Lines Matching refs:cpfile

20 nilfs_cpfile_checkpoints_per_block(const struct inode *cpfile)  in nilfs_cpfile_checkpoints_per_block()  argument
22 return NILFS_MDT(cpfile)->mi_entries_per_block; in nilfs_cpfile_checkpoints_per_block()
27 nilfs_cpfile_get_blkoff(const struct inode *cpfile, __u64 cno) in nilfs_cpfile_get_blkoff() argument
29 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1; in nilfs_cpfile_get_blkoff()
31 do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile)); in nilfs_cpfile_get_blkoff()
37 nilfs_cpfile_get_offset(const struct inode *cpfile, __u64 cno) in nilfs_cpfile_get_offset() argument
39 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1; in nilfs_cpfile_get_offset()
41 return do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile)); in nilfs_cpfile_get_offset()
44 static __u64 nilfs_cpfile_first_checkpoint_in_block(const struct inode *cpfile, in nilfs_cpfile_first_checkpoint_in_block() argument
47 return (__u64)nilfs_cpfile_checkpoints_per_block(cpfile) * blkoff in nilfs_cpfile_first_checkpoint_in_block()
48 + 1 - NILFS_MDT(cpfile)->mi_first_entry_offset; in nilfs_cpfile_first_checkpoint_in_block()
52 nilfs_cpfile_checkpoints_in_block(const struct inode *cpfile, in nilfs_cpfile_checkpoints_in_block() argument
57 nilfs_cpfile_checkpoints_per_block(cpfile) - in nilfs_cpfile_checkpoints_in_block()
58 nilfs_cpfile_get_offset(cpfile, curr), in nilfs_cpfile_checkpoints_in_block()
62 static inline int nilfs_cpfile_is_in_first(const struct inode *cpfile, in nilfs_cpfile_is_in_first() argument
65 return nilfs_cpfile_get_blkoff(cpfile, cno) == 0; in nilfs_cpfile_is_in_first()
69 nilfs_cpfile_block_add_valid_checkpoints(const struct inode *cpfile, in nilfs_cpfile_block_add_valid_checkpoints() argument
83 nilfs_cpfile_block_sub_valid_checkpoints(const struct inode *cpfile, in nilfs_cpfile_block_sub_valid_checkpoints() argument
98 nilfs_cpfile_block_get_header(const struct inode *cpfile, in nilfs_cpfile_block_get_header() argument
106 nilfs_cpfile_block_get_checkpoint(const struct inode *cpfile, __u64 cno, in nilfs_cpfile_block_get_checkpoint() argument
110 return kaddr + bh_offset(bh) + nilfs_cpfile_get_offset(cpfile, cno) * in nilfs_cpfile_block_get_checkpoint()
111 NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_block_get_checkpoint()
114 static void nilfs_cpfile_block_init(struct inode *cpfile, in nilfs_cpfile_block_init() argument
119 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_block_init()
120 int n = nilfs_cpfile_checkpoints_per_block(cpfile); in nilfs_cpfile_block_init()
128 static inline int nilfs_cpfile_get_header_block(struct inode *cpfile, in nilfs_cpfile_get_header_block() argument
131 return nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp); in nilfs_cpfile_get_header_block()
134 static inline int nilfs_cpfile_get_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_get_checkpoint_block() argument
139 return nilfs_mdt_get_block(cpfile, in nilfs_cpfile_get_checkpoint_block()
140 nilfs_cpfile_get_blkoff(cpfile, cno), in nilfs_cpfile_get_checkpoint_block()
161 static int nilfs_cpfile_find_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_find_checkpoint_block() argument
172 start = nilfs_cpfile_get_blkoff(cpfile, start_cno); in nilfs_cpfile_find_checkpoint_block()
173 end = nilfs_cpfile_get_blkoff(cpfile, end_cno); in nilfs_cpfile_find_checkpoint_block()
175 ret = nilfs_mdt_find_block(cpfile, start, end, &blkoff, bhp); in nilfs_cpfile_find_checkpoint_block()
178 nilfs_cpfile_first_checkpoint_in_block(cpfile, blkoff); in nilfs_cpfile_find_checkpoint_block()
182 static inline int nilfs_cpfile_delete_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_delete_checkpoint_block() argument
185 return nilfs_mdt_delete_block(cpfile, in nilfs_cpfile_delete_checkpoint_block()
186 nilfs_cpfile_get_blkoff(cpfile, cno)); in nilfs_cpfile_delete_checkpoint_block()
214 int nilfs_cpfile_get_checkpoint(struct inode *cpfile, in nilfs_cpfile_get_checkpoint() argument
226 if (unlikely(cno < 1 || cno > nilfs_mdt_cno(cpfile) || in nilfs_cpfile_get_checkpoint()
227 (cno < nilfs_mdt_cno(cpfile) && create))) in nilfs_cpfile_get_checkpoint()
230 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_checkpoint()
232 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_get_checkpoint()
235 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, create, &cp_bh); in nilfs_cpfile_get_checkpoint()
239 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_get_checkpoint()
249 if (!nilfs_cpfile_is_in_first(cpfile, cno)) in nilfs_cpfile_get_checkpoint()
250 nilfs_cpfile_block_add_valid_checkpoints(cpfile, cp_bh, in nilfs_cpfile_get_checkpoint()
255 header = nilfs_cpfile_block_get_header(cpfile, header_bh, in nilfs_cpfile_get_checkpoint()
260 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_get_checkpoint()
271 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_checkpoint()
285 void nilfs_cpfile_put_checkpoint(struct inode *cpfile, __u64 cno, in nilfs_cpfile_put_checkpoint() argument
311 int nilfs_cpfile_delete_checkpoints(struct inode *cpfile, in nilfs_cpfile_delete_checkpoints() argument
318 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_delete_checkpoints()
325 nilfs_msg(cpfile->i_sb, KERN_ERR, in nilfs_cpfile_delete_checkpoints()
331 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_delete_checkpoints()
333 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_delete_checkpoints()
340 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end); in nilfs_cpfile_delete_checkpoints()
341 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_delete_checkpoints()
352 cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_delete_checkpoints()
365 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_delete_checkpoints()
366 if (!nilfs_cpfile_is_in_first(cpfile, cno)) { in nilfs_cpfile_delete_checkpoints()
369 cpfile, cp_bh, kaddr, nicps); in nilfs_cpfile_delete_checkpoints()
376 cpfile, cno); in nilfs_cpfile_delete_checkpoints()
379 nilfs_msg(cpfile->i_sb, KERN_ERR, in nilfs_cpfile_delete_checkpoints()
393 header = nilfs_cpfile_block_get_header(cpfile, header_bh, in nilfs_cpfile_delete_checkpoints()
397 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_delete_checkpoints()
406 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_delete_checkpoints()
410 static void nilfs_cpfile_checkpoint_to_cpinfo(struct inode *cpfile, in nilfs_cpfile_checkpoint_to_cpinfo() argument
423 static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 *cnop, in nilfs_cpfile_do_get_cpinfo() argument
430 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_do_get_cpinfo()
431 __u64 cur_cno = nilfs_mdt_cno(cpfile), cno = *cnop; in nilfs_cpfile_do_get_cpinfo()
438 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_cpinfo()
442 cpfile, cno, cur_cno - 1, &cno, &bh); in nilfs_cpfile_do_get_cpinfo()
448 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, cur_cno); in nilfs_cpfile_do_get_cpinfo()
451 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr); in nilfs_cpfile_do_get_cpinfo()
454 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, in nilfs_cpfile_do_get_cpinfo()
471 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_cpinfo()
475 static ssize_t nilfs_cpfile_do_get_ssinfo(struct inode *cpfile, __u64 *cnop, in nilfs_cpfile_do_get_ssinfo() argument
488 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_ssinfo()
491 ret = nilfs_cpfile_get_header_block(cpfile, &bh); in nilfs_cpfile_do_get_ssinfo()
495 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr); in nilfs_cpfile_do_get_ssinfo()
508 curr_blkoff = nilfs_cpfile_get_blkoff(cpfile, curr); in nilfs_cpfile_do_get_ssinfo()
509 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, 0, &bh); in nilfs_cpfile_do_get_ssinfo()
517 cp = nilfs_cpfile_block_get_checkpoint(cpfile, curr, bh, kaddr); in nilfs_cpfile_do_get_ssinfo()
522 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, ci); in nilfs_cpfile_do_get_ssinfo()
529 next_blkoff = nilfs_cpfile_get_blkoff(cpfile, next); in nilfs_cpfile_do_get_ssinfo()
533 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, in nilfs_cpfile_do_get_ssinfo()
550 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_ssinfo()
562 ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode, in nilfs_cpfile_get_cpinfo() argument
567 return nilfs_cpfile_do_get_cpinfo(cpfile, cnop, buf, cisz, nci); in nilfs_cpfile_get_cpinfo()
569 return nilfs_cpfile_do_get_ssinfo(cpfile, cnop, buf, cisz, nci); in nilfs_cpfile_get_cpinfo()
580 int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno) in nilfs_cpfile_delete_checkpoint() argument
586 nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, sizeof(ci), 1); in nilfs_cpfile_delete_checkpoint()
594 return nilfs_cpfile_delete_checkpoints(cpfile, cno, cno + 1); in nilfs_cpfile_delete_checkpoint()
598 nilfs_cpfile_block_get_snapshot_list(const struct inode *cpfile, in nilfs_cpfile_block_get_snapshot_list() argument
608 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr); in nilfs_cpfile_block_get_snapshot_list()
611 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr); in nilfs_cpfile_block_get_snapshot_list()
617 static int nilfs_cpfile_set_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_set_snapshot() argument
630 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_set_snapshot()
632 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_set_snapshot()
636 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_set_snapshot()
649 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_set_snapshot()
653 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr); in nilfs_cpfile_set_snapshot()
661 prev_blkoff = nilfs_cpfile_get_blkoff(cpfile, prev); in nilfs_cpfile_set_snapshot()
666 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, in nilfs_cpfile_set_snapshot()
674 cpfile, curr, curr_bh, kaddr); in nilfs_cpfile_set_snapshot()
681 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0, in nilfs_cpfile_set_snapshot()
692 cpfile, curr, curr_bh, kaddr); in nilfs_cpfile_set_snapshot()
697 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_set_snapshot()
705 cpfile, prev, prev_bh, kaddr); in nilfs_cpfile_set_snapshot()
710 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr); in nilfs_cpfile_set_snapshot()
718 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_set_snapshot()
732 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_set_snapshot()
736 static int nilfs_cpfile_clear_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_clear_snapshot() argument
748 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_clear_snapshot()
750 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_clear_snapshot()
754 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_clear_snapshot()
771 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_clear_snapshot()
775 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, 0, in nilfs_cpfile_clear_snapshot()
784 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0, in nilfs_cpfile_clear_snapshot()
795 cpfile, next, next_bh, kaddr); in nilfs_cpfile_clear_snapshot()
801 cpfile, prev, prev_bh, kaddr); in nilfs_cpfile_clear_snapshot()
806 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_clear_snapshot()
813 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr); in nilfs_cpfile_clear_snapshot()
821 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_clear_snapshot()
835 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_clear_snapshot()
856 int nilfs_cpfile_is_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_is_snapshot() argument
867 if (cno == 0 || cno >= nilfs_mdt_cno(cpfile)) in nilfs_cpfile_is_snapshot()
869 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_is_snapshot()
871 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh); in nilfs_cpfile_is_snapshot()
875 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr); in nilfs_cpfile_is_snapshot()
884 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_is_snapshot()
906 int nilfs_cpfile_change_cpmode(struct inode *cpfile, __u64 cno, int mode) in nilfs_cpfile_change_cpmode() argument
912 if (nilfs_checkpoint_is_mounted(cpfile->i_sb, cno)) in nilfs_cpfile_change_cpmode()
921 ret = nilfs_cpfile_clear_snapshot(cpfile, cno); in nilfs_cpfile_change_cpmode()
924 return nilfs_cpfile_set_snapshot(cpfile, cno); in nilfs_cpfile_change_cpmode()
945 int nilfs_cpfile_get_stat(struct inode *cpfile, struct nilfs_cpstat *cpstat) in nilfs_cpfile_get_stat() argument
952 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_stat()
954 ret = nilfs_cpfile_get_header_block(cpfile, &bh); in nilfs_cpfile_get_stat()
958 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr); in nilfs_cpfile_get_stat()
959 cpstat->cs_cno = nilfs_mdt_cno(cpfile); in nilfs_cpfile_get_stat()
966 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_stat()
980 struct inode *cpfile; in nilfs_cpfile_read() local
993 cpfile = nilfs_iget_locked(sb, NULL, NILFS_CPFILE_INO); in nilfs_cpfile_read()
994 if (unlikely(!cpfile)) in nilfs_cpfile_read()
996 if (!(cpfile->i_state & I_NEW)) in nilfs_cpfile_read()
999 err = nilfs_mdt_init(cpfile, NILFS_MDT_GFP, 0); in nilfs_cpfile_read()
1003 nilfs_mdt_set_entry_size(cpfile, cpsize, in nilfs_cpfile_read()
1006 err = nilfs_read_inode_common(cpfile, raw_inode); in nilfs_cpfile_read()
1010 unlock_new_inode(cpfile); in nilfs_cpfile_read()
1012 *inodep = cpfile; in nilfs_cpfile_read()
1015 iget_failed(cpfile); in nilfs_cpfile_read()