Lines Matching refs:cpfile
34 nilfs_cpfile_checkpoints_per_block(const struct inode *cpfile) in nilfs_cpfile_checkpoints_per_block() argument
36 return NILFS_MDT(cpfile)->mi_entries_per_block; in nilfs_cpfile_checkpoints_per_block()
41 nilfs_cpfile_get_blkoff(const struct inode *cpfile, __u64 cno) in nilfs_cpfile_get_blkoff() argument
43 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1; in nilfs_cpfile_get_blkoff()
44 do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile)); in nilfs_cpfile_get_blkoff()
50 nilfs_cpfile_get_offset(const struct inode *cpfile, __u64 cno) in nilfs_cpfile_get_offset() argument
52 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1; in nilfs_cpfile_get_offset()
53 return do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile)); in nilfs_cpfile_get_offset()
56 static __u64 nilfs_cpfile_first_checkpoint_in_block(const struct inode *cpfile, in nilfs_cpfile_first_checkpoint_in_block() argument
59 return (__u64)nilfs_cpfile_checkpoints_per_block(cpfile) * blkoff in nilfs_cpfile_first_checkpoint_in_block()
60 + 1 - NILFS_MDT(cpfile)->mi_first_entry_offset; in nilfs_cpfile_first_checkpoint_in_block()
64 nilfs_cpfile_checkpoints_in_block(const struct inode *cpfile, in nilfs_cpfile_checkpoints_in_block() argument
69 nilfs_cpfile_checkpoints_per_block(cpfile) - in nilfs_cpfile_checkpoints_in_block()
70 nilfs_cpfile_get_offset(cpfile, curr), in nilfs_cpfile_checkpoints_in_block()
74 static inline int nilfs_cpfile_is_in_first(const struct inode *cpfile, in nilfs_cpfile_is_in_first() argument
77 return nilfs_cpfile_get_blkoff(cpfile, cno) == 0; in nilfs_cpfile_is_in_first()
81 nilfs_cpfile_block_add_valid_checkpoints(const struct inode *cpfile, in nilfs_cpfile_block_add_valid_checkpoints() argument
95 nilfs_cpfile_block_sub_valid_checkpoints(const struct inode *cpfile, in nilfs_cpfile_block_sub_valid_checkpoints() argument
110 nilfs_cpfile_block_get_header(const struct inode *cpfile, in nilfs_cpfile_block_get_header() argument
118 nilfs_cpfile_block_get_checkpoint(const struct inode *cpfile, __u64 cno, in nilfs_cpfile_block_get_checkpoint() argument
122 return kaddr + bh_offset(bh) + nilfs_cpfile_get_offset(cpfile, cno) * in nilfs_cpfile_block_get_checkpoint()
123 NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_block_get_checkpoint()
126 static void nilfs_cpfile_block_init(struct inode *cpfile, in nilfs_cpfile_block_init() argument
131 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_block_init()
132 int n = nilfs_cpfile_checkpoints_per_block(cpfile); in nilfs_cpfile_block_init()
140 static inline int nilfs_cpfile_get_header_block(struct inode *cpfile, in nilfs_cpfile_get_header_block() argument
143 return nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp); in nilfs_cpfile_get_header_block()
146 static inline int nilfs_cpfile_get_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_get_checkpoint_block() argument
151 return nilfs_mdt_get_block(cpfile, in nilfs_cpfile_get_checkpoint_block()
152 nilfs_cpfile_get_blkoff(cpfile, cno), in nilfs_cpfile_get_checkpoint_block()
173 static int nilfs_cpfile_find_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_find_checkpoint_block() argument
184 start = nilfs_cpfile_get_blkoff(cpfile, start_cno); in nilfs_cpfile_find_checkpoint_block()
185 end = nilfs_cpfile_get_blkoff(cpfile, end_cno); in nilfs_cpfile_find_checkpoint_block()
187 ret = nilfs_mdt_find_block(cpfile, start, end, &blkoff, bhp); in nilfs_cpfile_find_checkpoint_block()
190 nilfs_cpfile_first_checkpoint_in_block(cpfile, blkoff); in nilfs_cpfile_find_checkpoint_block()
194 static inline int nilfs_cpfile_delete_checkpoint_block(struct inode *cpfile, in nilfs_cpfile_delete_checkpoint_block() argument
197 return nilfs_mdt_delete_block(cpfile, in nilfs_cpfile_delete_checkpoint_block()
198 nilfs_cpfile_get_blkoff(cpfile, cno)); in nilfs_cpfile_delete_checkpoint_block()
226 int nilfs_cpfile_get_checkpoint(struct inode *cpfile, in nilfs_cpfile_get_checkpoint() argument
238 if (unlikely(cno < 1 || cno > nilfs_mdt_cno(cpfile) || in nilfs_cpfile_get_checkpoint()
239 (cno < nilfs_mdt_cno(cpfile) && create))) in nilfs_cpfile_get_checkpoint()
242 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_checkpoint()
244 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_get_checkpoint()
247 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, create, &cp_bh); in nilfs_cpfile_get_checkpoint()
251 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_get_checkpoint()
261 if (!nilfs_cpfile_is_in_first(cpfile, cno)) in nilfs_cpfile_get_checkpoint()
262 nilfs_cpfile_block_add_valid_checkpoints(cpfile, cp_bh, in nilfs_cpfile_get_checkpoint()
267 header = nilfs_cpfile_block_get_header(cpfile, header_bh, in nilfs_cpfile_get_checkpoint()
272 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_get_checkpoint()
283 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_checkpoint()
297 void nilfs_cpfile_put_checkpoint(struct inode *cpfile, __u64 cno, in nilfs_cpfile_put_checkpoint() argument
323 int nilfs_cpfile_delete_checkpoints(struct inode *cpfile, in nilfs_cpfile_delete_checkpoints() argument
330 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_delete_checkpoints()
343 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_delete_checkpoints()
345 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_delete_checkpoints()
352 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end); in nilfs_cpfile_delete_checkpoints()
353 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_delete_checkpoints()
364 cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_delete_checkpoints()
377 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_delete_checkpoints()
378 if (!nilfs_cpfile_is_in_first(cpfile, cno)) { in nilfs_cpfile_delete_checkpoints()
381 cpfile, cp_bh, kaddr, nicps); in nilfs_cpfile_delete_checkpoints()
388 cpfile, cno); in nilfs_cpfile_delete_checkpoints()
405 header = nilfs_cpfile_block_get_header(cpfile, header_bh, in nilfs_cpfile_delete_checkpoints()
409 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_delete_checkpoints()
418 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_delete_checkpoints()
422 static void nilfs_cpfile_checkpoint_to_cpinfo(struct inode *cpfile, in nilfs_cpfile_checkpoint_to_cpinfo() argument
435 static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 *cnop, in nilfs_cpfile_do_get_cpinfo() argument
441 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; in nilfs_cpfile_do_get_cpinfo()
442 __u64 cur_cno = nilfs_mdt_cno(cpfile), cno = *cnop; in nilfs_cpfile_do_get_cpinfo()
449 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_cpinfo()
453 cpfile, cno, cur_cno - 1, &cno, &bh); in nilfs_cpfile_do_get_cpinfo()
459 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, cur_cno); in nilfs_cpfile_do_get_cpinfo()
462 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr); in nilfs_cpfile_do_get_cpinfo()
465 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, in nilfs_cpfile_do_get_cpinfo()
482 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_cpinfo()
486 static ssize_t nilfs_cpfile_do_get_ssinfo(struct inode *cpfile, __u64 *cnop, in nilfs_cpfile_do_get_ssinfo() argument
498 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_ssinfo()
501 ret = nilfs_cpfile_get_header_block(cpfile, &bh); in nilfs_cpfile_do_get_ssinfo()
505 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr); in nilfs_cpfile_do_get_ssinfo()
518 curr_blkoff = nilfs_cpfile_get_blkoff(cpfile, curr); in nilfs_cpfile_do_get_ssinfo()
519 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, 0, &bh); in nilfs_cpfile_do_get_ssinfo()
527 cp = nilfs_cpfile_block_get_checkpoint(cpfile, curr, bh, kaddr); in nilfs_cpfile_do_get_ssinfo()
532 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, ci); in nilfs_cpfile_do_get_ssinfo()
539 next_blkoff = nilfs_cpfile_get_blkoff(cpfile, next); in nilfs_cpfile_do_get_ssinfo()
543 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, in nilfs_cpfile_do_get_ssinfo()
560 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_do_get_ssinfo()
572 ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode, in nilfs_cpfile_get_cpinfo() argument
577 return nilfs_cpfile_do_get_cpinfo(cpfile, cnop, buf, cisz, nci); in nilfs_cpfile_get_cpinfo()
579 return nilfs_cpfile_do_get_ssinfo(cpfile, cnop, buf, cisz, nci); in nilfs_cpfile_get_cpinfo()
590 int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno) in nilfs_cpfile_delete_checkpoint() argument
596 nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, sizeof(ci), 1); in nilfs_cpfile_delete_checkpoint()
604 return nilfs_cpfile_delete_checkpoints(cpfile, cno, cno + 1); in nilfs_cpfile_delete_checkpoint()
608 nilfs_cpfile_block_get_snapshot_list(const struct inode *cpfile, in nilfs_cpfile_block_get_snapshot_list() argument
618 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr); in nilfs_cpfile_block_get_snapshot_list()
621 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr); in nilfs_cpfile_block_get_snapshot_list()
627 static int nilfs_cpfile_set_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_set_snapshot() argument
640 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_set_snapshot()
642 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_set_snapshot()
646 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_set_snapshot()
659 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_set_snapshot()
663 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr); in nilfs_cpfile_set_snapshot()
671 prev_blkoff = nilfs_cpfile_get_blkoff(cpfile, prev); in nilfs_cpfile_set_snapshot()
676 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, in nilfs_cpfile_set_snapshot()
684 cpfile, curr, curr_bh, kaddr); in nilfs_cpfile_set_snapshot()
691 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0, in nilfs_cpfile_set_snapshot()
702 cpfile, curr, curr_bh, kaddr); in nilfs_cpfile_set_snapshot()
707 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_set_snapshot()
715 cpfile, prev, prev_bh, kaddr); in nilfs_cpfile_set_snapshot()
720 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr); in nilfs_cpfile_set_snapshot()
728 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_set_snapshot()
742 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_set_snapshot()
746 static int nilfs_cpfile_clear_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_clear_snapshot() argument
758 down_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_clear_snapshot()
760 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); in nilfs_cpfile_clear_snapshot()
764 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_clear_snapshot()
781 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh); in nilfs_cpfile_clear_snapshot()
785 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, 0, in nilfs_cpfile_clear_snapshot()
794 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0, in nilfs_cpfile_clear_snapshot()
805 cpfile, next, next_bh, kaddr); in nilfs_cpfile_clear_snapshot()
811 cpfile, prev, prev_bh, kaddr); in nilfs_cpfile_clear_snapshot()
816 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr); in nilfs_cpfile_clear_snapshot()
823 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr); in nilfs_cpfile_clear_snapshot()
831 nilfs_mdt_mark_dirty(cpfile); in nilfs_cpfile_clear_snapshot()
845 up_write(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_clear_snapshot()
866 int nilfs_cpfile_is_snapshot(struct inode *cpfile, __u64 cno) in nilfs_cpfile_is_snapshot() argument
875 if (cno == 0 || cno >= nilfs_mdt_cno(cpfile)) in nilfs_cpfile_is_snapshot()
877 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_is_snapshot()
879 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh); in nilfs_cpfile_is_snapshot()
883 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr); in nilfs_cpfile_is_snapshot()
892 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_is_snapshot()
914 int nilfs_cpfile_change_cpmode(struct inode *cpfile, __u64 cno, int mode) in nilfs_cpfile_change_cpmode() argument
920 if (nilfs_checkpoint_is_mounted(cpfile->i_sb, cno)) in nilfs_cpfile_change_cpmode()
929 ret = nilfs_cpfile_clear_snapshot(cpfile, cno); in nilfs_cpfile_change_cpmode()
932 return nilfs_cpfile_set_snapshot(cpfile, cno); in nilfs_cpfile_change_cpmode()
953 int nilfs_cpfile_get_stat(struct inode *cpfile, struct nilfs_cpstat *cpstat) in nilfs_cpfile_get_stat() argument
960 down_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_stat()
962 ret = nilfs_cpfile_get_header_block(cpfile, &bh); in nilfs_cpfile_get_stat()
966 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr); in nilfs_cpfile_get_stat()
967 cpstat->cs_cno = nilfs_mdt_cno(cpfile); in nilfs_cpfile_get_stat()
974 up_read(&NILFS_MDT(cpfile)->mi_sem); in nilfs_cpfile_get_stat()
988 struct inode *cpfile; in nilfs_cpfile_read() local
1003 cpfile = nilfs_iget_locked(sb, NULL, NILFS_CPFILE_INO); in nilfs_cpfile_read()
1004 if (unlikely(!cpfile)) in nilfs_cpfile_read()
1006 if (!(cpfile->i_state & I_NEW)) in nilfs_cpfile_read()
1009 err = nilfs_mdt_init(cpfile, NILFS_MDT_GFP, 0); in nilfs_cpfile_read()
1013 nilfs_mdt_set_entry_size(cpfile, cpsize, in nilfs_cpfile_read()
1016 err = nilfs_read_inode_common(cpfile, raw_inode); in nilfs_cpfile_read()
1020 unlock_new_inode(cpfile); in nilfs_cpfile_read()
1022 *inodep = cpfile; in nilfs_cpfile_read()
1025 iget_failed(cpfile); in nilfs_cpfile_read()