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 tcno = div64_ul(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
85 nilfs_cpfile_block_sub_valid_checkpoints(const struct inode *cpfile, in nilfs_cpfile_block_sub_valid_checkpoints() argument
101 static void nilfs_cpfile_block_init(struct inode *cpfile, in nilfs_cpfile_block_init() argument
106 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_block_init()
107 int n = nilfs_cpfile_checkpoints_per_block(cpfile); in nilfs_cpfile_block_init()
124 static size_t nilfs_cpfile_checkpoint_offset(const struct inode *cpfile, in nilfs_cpfile_checkpoint_offset() argument
129 nilfs_cpfile_get_offset(cpfile, cno) * in nilfs_cpfile_checkpoint_offset()
130 NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_checkpoint_offset()
144 static size_t nilfs_cpfile_cp_snapshot_list_offset(const struct inode *cpfile, in nilfs_cpfile_cp_snapshot_list_offset() argument
148 return nilfs_cpfile_checkpoint_offset(cpfile, cno, bh) + in nilfs_cpfile_cp_snapshot_list_offset()
163 static int nilfs_cpfile_get_header_block(struct inode *cpfile, in nilfs_cpfile_get_header_block() argument
166 int err = nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp); in nilfs_cpfile_get_header_block()
169 nilfs_error(cpfile->i_sb, in nilfs_cpfile_get_header_block()
176 static inline int nilfs_cpfile_get_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_get_checkpoint_block() argument
181 return nilfs_mdt_get_block(cpfile, in nilfs_cpfile_get_checkpoint_block()
182 nilfs_cpfile_get_blkoff(cpfile, cno), in nilfs_cpfile_get_checkpoint_block()
200 static int nilfs_cpfile_find_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_find_checkpoint_block() argument
211 start = nilfs_cpfile_get_blkoff(cpfile, start_cno); in nilfs_cpfile_find_checkpoint_block()
212 end = nilfs_cpfile_get_blkoff(cpfile, end_cno); in nilfs_cpfile_find_checkpoint_block()
214 ret = nilfs_mdt_find_block(cpfile, start, end, &blkoff, bhp); in nilfs_cpfile_find_checkpoint_block()
217 nilfs_cpfile_first_checkpoint_in_block(cpfile, blkoff); in nilfs_cpfile_find_checkpoint_block()
221 static inline int nilfs_cpfile_delete_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_delete_checkpoint_block() argument
224 return nilfs_mdt_delete_block(cpfile, in nilfs_cpfile_delete_checkpoint_block()
225 nilfs_cpfile_get_blkoff(cpfile, cno)); in nilfs_cpfile_delete_checkpoint_block()
245 int nilfs_cpfile_read_checkpoint(struct inode *cpfile, __u64 cno, in nilfs_cpfile_read_checkpoint() argument
253 if (cno < 1 || cno > nilfs_mdt_cno(cpfile)) in nilfs_cpfile_read_checkpoint()
256 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_read_checkpoint()
257 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_read_checkpoint()
264 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_read_checkpoint()
277 nilfs_err(cpfile->i_sb, in nilfs_cpfile_read_checkpoint()
293 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_read_checkpoint()
314 int nilfs_cpfile_create_checkpoint(struct inode *cpfile, __u64 cno) in nilfs_cpfile_create_checkpoint() argument
325 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_create_checkpoint()
326 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_create_checkpoint()
330 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 1, &cp_bh); in nilfs_cpfile_create_checkpoint()
334 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_create_checkpoint()
340 if (!nilfs_cpfile_is_in_first(cpfile, cno)) in nilfs_cpfile_create_checkpoint()
341 nilfs_cpfile_block_add_valid_checkpoints(cpfile, cp_bh, in nilfs_cpfile_create_checkpoint()
355 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_create_checkpoint()
361 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_create_checkpoint()
383 int nilfs_cpfile_finalize_checkpoint(struct inode *cpfile, __u64 cno, in nilfs_cpfile_finalize_checkpoint() argument
395 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_finalize_checkpoint()
396 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_finalize_checkpoint()
403 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_finalize_checkpoint()
430 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_finalize_checkpoint()
434 nilfs_error(cpfile->i_sb, in nilfs_cpfile_finalize_checkpoint()
456 int nilfs_cpfile_delete_checkpoints(struct inode *cpfile, in nilfs_cpfile_delete_checkpoints() argument
463 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_delete_checkpoints()
471 nilfs_err(cpfile->i_sb, in nilfs_cpfile_delete_checkpoints()
477 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_delete_checkpoints()
479 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_delete_checkpoints()
486 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end); in nilfs_cpfile_delete_checkpoints()
487 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_delete_checkpoints()
496 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_delete_checkpoints()
516 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_delete_checkpoints()
517 if (nilfs_cpfile_is_in_first(cpfile, cno)) { in nilfs_cpfile_delete_checkpoints()
522 count = nilfs_cpfile_block_sub_valid_checkpoints(cpfile, cp_bh, in nilfs_cpfile_delete_checkpoints()
529 ret = nilfs_cpfile_delete_checkpoint_block(cpfile, cno); in nilfs_cpfile_delete_checkpoints()
531 nilfs_err(cpfile->i_sb, in nilfs_cpfile_delete_checkpoints()
541 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_delete_checkpoints()
550 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_delete_checkpoints()
554 static void nilfs_cpfile_checkpoint_to_cpinfo(struct inode *cpfile, in nilfs_cpfile_checkpoint_to_cpinfo() argument
567 static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 *cnop, in nilfs_cpfile_do_get_cpinfo() argument
574 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_do_get_cpinfo()
575 __u64 cur_cno = nilfs_mdt_cno(cpfile), cno = *cnop; in nilfs_cpfile_do_get_cpinfo()
583 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_cpinfo()
587 cpfile, cno, cur_cno - 1, &cno, &bh); in nilfs_cpfile_do_get_cpinfo()
593 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, cur_cno); in nilfs_cpfile_do_get_cpinfo()
595 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, bh); in nilfs_cpfile_do_get_cpinfo()
599 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, in nilfs_cpfile_do_get_cpinfo()
616 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_cpinfo()
620 static ssize_t nilfs_cpfile_do_get_ssinfo(struct inode *cpfile, __u64 *cnop, in nilfs_cpfile_do_get_ssinfo() argument
633 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_ssinfo()
636 ret = nilfs_cpfile_get_header_block(cpfile, &bh); in nilfs_cpfile_do_get_ssinfo()
652 curr_blkoff = nilfs_cpfile_get_blkoff(cpfile, curr); in nilfs_cpfile_do_get_ssinfo()
653 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, 0, &bh); in nilfs_cpfile_do_get_ssinfo()
659 offset = nilfs_cpfile_checkpoint_offset(cpfile, curr, bh); in nilfs_cpfile_do_get_ssinfo()
666 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, ci); in nilfs_cpfile_do_get_ssinfo()
674 next_blkoff = nilfs_cpfile_get_blkoff(cpfile, next); in nilfs_cpfile_do_get_ssinfo()
677 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, in nilfs_cpfile_do_get_ssinfo()
684 offset = nilfs_cpfile_checkpoint_offset(cpfile, next, bh); in nilfs_cpfile_do_get_ssinfo()
695 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_ssinfo()
725 ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode, in nilfs_cpfile_get_cpinfo() argument
730 return nilfs_cpfile_do_get_cpinfo(cpfile, cnop, buf, cisz, nci); in nilfs_cpfile_get_cpinfo()
732 return nilfs_cpfile_do_get_ssinfo(cpfile, cnop, buf, cisz, nci); in nilfs_cpfile_get_cpinfo()
750 int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno) in nilfs_cpfile_delete_checkpoint() argument
756 nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, sizeof(ci), 1); in nilfs_cpfile_delete_checkpoint()
764 return nilfs_cpfile_delete_checkpoints(cpfile, cno, cno + 1); in nilfs_cpfile_delete_checkpoint()
767 static int nilfs_cpfile_set_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_set_snapshot() argument
780 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_set_snapshot()
782 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_set_snapshot()
786 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_set_snapshot()
790 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_set_snapshot()
818 prev_blkoff = nilfs_cpfile_get_blkoff(cpfile, prev); in nilfs_cpfile_set_snapshot()
823 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, in nilfs_cpfile_set_snapshot()
829 cpfile, curr, curr_bh); in nilfs_cpfile_set_snapshot()
837 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0, in nilfs_cpfile_set_snapshot()
843 cpfile, prev, prev_bh); in nilfs_cpfile_set_snapshot()
856 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_set_snapshot()
877 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_set_snapshot()
891 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_set_snapshot()
895 static int nilfs_cpfile_clear_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_clear_snapshot() argument
907 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_clear_snapshot()
909 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_clear_snapshot()
913 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_clear_snapshot()
917 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, cp_bh); in nilfs_cpfile_clear_snapshot()
936 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, 0, in nilfs_cpfile_clear_snapshot()
942 cpfile, next, next_bh); in nilfs_cpfile_clear_snapshot()
949 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0, in nilfs_cpfile_clear_snapshot()
955 cpfile, prev, prev_bh); in nilfs_cpfile_clear_snapshot()
988 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_clear_snapshot()
1002 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_clear_snapshot()
1017 int nilfs_cpfile_is_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_is_snapshot() argument
1028 if (cno == 0 || cno >= nilfs_mdt_cno(cpfile)) in nilfs_cpfile_is_snapshot()
1030 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_is_snapshot()
1032 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh); in nilfs_cpfile_is_snapshot()
1036 offset = nilfs_cpfile_checkpoint_offset(cpfile, cno, bh); in nilfs_cpfile_is_snapshot()
1046 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_is_snapshot()
1065 int nilfs_cpfile_change_cpmode(struct inode *cpfile, __u64 cno, int mode) in nilfs_cpfile_change_cpmode() argument
1071 if (nilfs_checkpoint_is_mounted(cpfile->i_sb, cno)) in nilfs_cpfile_change_cpmode()
1080 ret = nilfs_cpfile_clear_snapshot(cpfile, cno); in nilfs_cpfile_change_cpmode()
1083 return nilfs_cpfile_set_snapshot(cpfile, cno); in nilfs_cpfile_change_cpmode()
1102 int nilfs_cpfile_get_stat(struct inode *cpfile, struct nilfs_cpstat *cpstat) in nilfs_cpfile_get_stat() argument
1108 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_stat()
1110 ret = nilfs_cpfile_get_header_block(cpfile, &bh); in nilfs_cpfile_get_stat()
1114 cpstat->cs_cno = nilfs_mdt_cno(cpfile); in nilfs_cpfile_get_stat()
1121 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_stat()
1137 struct inode *cpfile; in nilfs_cpfile_read() local
1148 cpfile = nilfs_iget_locked(sb, NULL, NILFS_CPFILE_INO); in nilfs_cpfile_read()
1149 if (unlikely(!cpfile)) in nilfs_cpfile_read()
1151 if (!(inode_state_read_once(cpfile) & I_NEW)) in nilfs_cpfile_read()
1154 err = nilfs_mdt_init(cpfile, NILFS_MDT_GFP, 0); in nilfs_cpfile_read()
1158 nilfs_mdt_set_entry_size(cpfile, cpsize, in nilfs_cpfile_read()
1161 err = nilfs_read_inode_common(cpfile, raw_inode); in nilfs_cpfile_read()
1165 unlock_new_inode(cpfile); in nilfs_cpfile_read()
1167 *inodep = cpfile; in nilfs_cpfile_read()
1170 iget_failed(cpfile); in nilfs_cpfile_read()