Lines Matching refs:sufile
47 static inline struct nilfs_sufile_info *NILFS_SUI(struct inode *sufile) in NILFS_SUI() argument
49 return (struct nilfs_sufile_info *)NILFS_MDT(sufile); in NILFS_SUI()
53 nilfs_sufile_segment_usages_per_block(const struct inode *sufile) in nilfs_sufile_segment_usages_per_block() argument
55 return NILFS_MDT(sufile)->mi_entries_per_block; in nilfs_sufile_segment_usages_per_block()
59 nilfs_sufile_get_blkoff(const struct inode *sufile, __u64 segnum) in nilfs_sufile_get_blkoff() argument
61 __u64 t = segnum + NILFS_MDT(sufile)->mi_first_entry_offset; in nilfs_sufile_get_blkoff()
62 do_div(t, nilfs_sufile_segment_usages_per_block(sufile)); in nilfs_sufile_get_blkoff()
67 nilfs_sufile_get_offset(const struct inode *sufile, __u64 segnum) in nilfs_sufile_get_offset() argument
69 __u64 t = segnum + NILFS_MDT(sufile)->mi_first_entry_offset; in nilfs_sufile_get_offset()
70 return do_div(t, nilfs_sufile_segment_usages_per_block(sufile)); in nilfs_sufile_get_offset()
74 nilfs_sufile_segment_usages_in_block(const struct inode *sufile, __u64 curr, in nilfs_sufile_segment_usages_in_block() argument
78 nilfs_sufile_segment_usages_per_block(sufile) - in nilfs_sufile_segment_usages_in_block()
79 nilfs_sufile_get_offset(sufile, curr), in nilfs_sufile_segment_usages_in_block()
84 nilfs_sufile_block_get_segment_usage(const struct inode *sufile, __u64 segnum, in nilfs_sufile_block_get_segment_usage() argument
88 nilfs_sufile_get_offset(sufile, segnum) * in nilfs_sufile_block_get_segment_usage()
89 NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_block_get_segment_usage()
92 static inline int nilfs_sufile_get_header_block(struct inode *sufile, in nilfs_sufile_get_header_block() argument
95 return nilfs_mdt_get_block(sufile, 0, 0, NULL, bhp); in nilfs_sufile_get_header_block()
99 nilfs_sufile_get_segment_usage_block(struct inode *sufile, __u64 segnum, in nilfs_sufile_get_segment_usage_block() argument
102 return nilfs_mdt_get_block(sufile, in nilfs_sufile_get_segment_usage_block()
103 nilfs_sufile_get_blkoff(sufile, segnum), in nilfs_sufile_get_segment_usage_block()
107 static int nilfs_sufile_delete_segment_usage_block(struct inode *sufile, in nilfs_sufile_delete_segment_usage_block() argument
110 return nilfs_mdt_delete_block(sufile, in nilfs_sufile_delete_segment_usage_block()
111 nilfs_sufile_get_blkoff(sufile, segnum)); in nilfs_sufile_delete_segment_usage_block()
133 unsigned long nilfs_sufile_get_ncleansegs(struct inode *sufile) in nilfs_sufile_get_ncleansegs() argument
135 return NILFS_SUI(sufile)->ncleansegs; in nilfs_sufile_get_ncleansegs()
166 int nilfs_sufile_updatev(struct inode *sufile, __u64 *segnumv, size_t nsegs, in nilfs_sufile_updatev() argument
181 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_updatev()
183 if (unlikely(*seg >= nilfs_sufile_get_nsegments(sufile))) { in nilfs_sufile_updatev()
195 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_updatev()
200 blkoff = nilfs_sufile_get_blkoff(sufile, *seg); in nilfs_sufile_updatev()
201 ret = nilfs_mdt_get_block(sufile, blkoff, create, NULL, &bh); in nilfs_sufile_updatev()
206 dofunc(sufile, *seg, header_bh, bh); in nilfs_sufile_updatev()
211 blkoff = nilfs_sufile_get_blkoff(sufile, *seg); in nilfs_sufile_updatev()
217 ret = nilfs_mdt_get_block(sufile, blkoff, create, NULL, &bh); in nilfs_sufile_updatev()
227 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_updatev()
234 int nilfs_sufile_update(struct inode *sufile, __u64 segnum, int create, in nilfs_sufile_update() argument
242 if (unlikely(segnum >= nilfs_sufile_get_nsegments(sufile))) { in nilfs_sufile_update()
247 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_update()
249 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_update()
253 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, create, &bh); in nilfs_sufile_update()
255 dofunc(sufile, segnum, header_bh, bh); in nilfs_sufile_update()
261 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_update()
276 int nilfs_sufile_set_alloc_range(struct inode *sufile, __u64 start, __u64 end) in nilfs_sufile_set_alloc_range() argument
278 struct nilfs_sufile_info *sui = NILFS_SUI(sufile); in nilfs_sufile_set_alloc_range()
282 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_alloc_range()
283 nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_set_alloc_range()
290 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_alloc_range()
311 int nilfs_sufile_alloc(struct inode *sufile, __u64 *segnump) in nilfs_sufile_alloc() argument
316 struct nilfs_sufile_info *sui = NILFS_SUI(sufile); in nilfs_sufile_alloc()
317 size_t susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_alloc()
323 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_alloc()
325 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_alloc()
334 nsegments = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_alloc()
361 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 1, in nilfs_sufile_alloc()
367 sufile, segnum, su_bh, kaddr); in nilfs_sufile_alloc()
370 sufile, segnum, maxsegnum); in nilfs_sufile_alloc()
388 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_alloc()
405 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_alloc()
409 void nilfs_sufile_do_cancel_free(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_cancel_free() argument
417 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_cancel_free()
428 NILFS_SUI(sufile)->ncleansegs--; in nilfs_sufile_do_cancel_free()
431 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_cancel_free()
434 void nilfs_sufile_do_scrap(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_scrap() argument
443 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_scrap()
459 NILFS_SUI(sufile)->ncleansegs -= clean; in nilfs_sufile_do_scrap()
462 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_scrap()
465 void nilfs_sufile_do_free(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_free() argument
474 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_free()
490 NILFS_SUI(sufile)->ncleansegs++; in nilfs_sufile_do_free()
492 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_free()
500 int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum) in nilfs_sufile_mark_dirty() argument
505 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); in nilfs_sufile_mark_dirty()
508 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_mark_dirty()
521 int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum, in nilfs_sufile_set_segment_usage() argument
529 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_segment_usage()
530 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); in nilfs_sufile_set_segment_usage()
535 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr); in nilfs_sufile_set_segment_usage()
543 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_set_segment_usage()
547 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_segment_usage()
567 int nilfs_sufile_get_stat(struct inode *sufile, struct nilfs_sustat *sustat) in nilfs_sufile_get_stat() argument
571 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_get_stat()
575 down_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_stat()
577 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_get_stat()
583 sustat->ss_nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_get_stat()
595 up_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_stat()
599 void nilfs_sufile_do_set_error(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_set_error() argument
608 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_set_error()
619 NILFS_SUI(sufile)->ncleansegs--; in nilfs_sufile_do_set_error()
622 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_set_error()
642 static int nilfs_sufile_truncate_range(struct inode *sufile, in nilfs_sufile_truncate_range() argument
645 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_truncate_range()
649 size_t susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_truncate_range()
658 nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_truncate_range()
664 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_truncate_range()
668 segusages_per_block = nilfs_sufile_segment_usages_per_block(sufile); in nilfs_sufile_truncate_range()
674 nilfs_sufile_get_offset(sufile, segnum), in nilfs_sufile_truncate_range()
676 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, in nilfs_sufile_truncate_range()
686 sufile, segnum, su_bh, kaddr); in nilfs_sufile_truncate_range()
714 nilfs_sufile_delete_segment_usage_block(sufile, segnum); in nilfs_sufile_truncate_range()
721 NILFS_SUI(sufile)->ncleansegs += ncleaned; in nilfs_sufile_truncate_range()
723 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_truncate_range()
746 int nilfs_sufile_resize(struct inode *sufile, __u64 newnsegs) in nilfs_sufile_resize() argument
748 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_resize()
751 struct nilfs_sufile_info *sui = NILFS_SUI(sufile); in nilfs_sufile_resize()
756 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_resize()
758 nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_resize()
767 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_resize()
774 ret = nilfs_sufile_truncate_range(sufile, newnsegs, nsegs - 1); in nilfs_sufile_resize()
787 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_resize()
793 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_resize()
814 ssize_t nilfs_sufile_get_suinfo(struct inode *sufile, __u64 segnum, void *buf, in nilfs_sufile_get_suinfo() argument
820 size_t susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_get_suinfo()
821 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_get_suinfo()
827 down_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_suinfo()
829 segusages_per_block = nilfs_sufile_segment_usages_per_block(sufile); in nilfs_sufile_get_suinfo()
831 nilfs_sufile_get_nsegments(sufile) - segnum, in nilfs_sufile_get_suinfo()
836 nilfs_sufile_get_offset(sufile, segnum), in nilfs_sufile_get_suinfo()
838 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, in nilfs_sufile_get_suinfo()
851 sufile, segnum, su_bh, kaddr); in nilfs_sufile_get_suinfo()
868 up_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_suinfo()
892 ssize_t nilfs_sufile_set_suinfo(struct inode *sufile, void *buf, in nilfs_sufile_set_suinfo() argument
895 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_set_suinfo()
918 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_suinfo()
920 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_set_suinfo()
925 blkoff = nilfs_sufile_get_blkoff(sufile, sup->sup_segnum); in nilfs_sufile_set_suinfo()
926 ret = nilfs_mdt_get_block(sufile, blkoff, 1, NULL, &bh); in nilfs_sufile_set_suinfo()
933 sufile, sup->sup_segnum, bh, kaddr); in nilfs_sufile_set_suinfo()
975 blkoff = nilfs_sufile_get_blkoff(sufile, sup->sup_segnum); in nilfs_sufile_set_suinfo()
982 ret = nilfs_mdt_get_block(sufile, blkoff, 1, NULL, &bh); in nilfs_sufile_set_suinfo()
993 NILFS_SUI(sufile)->ncleansegs += ncleaned; in nilfs_sufile_set_suinfo()
995 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_set_suinfo()
999 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_suinfo()
1019 int nilfs_sufile_trim_fs(struct inode *sufile, struct fstrim_range *range) in nilfs_sufile_trim_fs() argument
1021 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_trim_fs()
1025 size_t n, i, susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_trim_fs()
1057 down_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_trim_fs()
1060 n = nilfs_sufile_segment_usages_in_block(sufile, segnum, in nilfs_sufile_trim_fs()
1063 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, in nilfs_sufile_trim_fs()
1074 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, in nilfs_sufile_trim_fs()
1117 sufile, segnum, su_bh, kaddr); in nilfs_sufile_trim_fs()
1149 up_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_trim_fs()
1165 struct inode *sufile; in nilfs_sufile_read() local
1184 sufile = nilfs_iget_locked(sb, NULL, NILFS_SUFILE_INO); in nilfs_sufile_read()
1185 if (unlikely(!sufile)) in nilfs_sufile_read()
1187 if (!(sufile->i_state & I_NEW)) in nilfs_sufile_read()
1190 err = nilfs_mdt_init(sufile, NILFS_MDT_GFP, sizeof(*sui)); in nilfs_sufile_read()
1194 nilfs_mdt_set_entry_size(sufile, susize, in nilfs_sufile_read()
1197 err = nilfs_read_inode_common(sufile, raw_inode); in nilfs_sufile_read()
1201 err = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_read()
1205 sui = NILFS_SUI(sufile); in nilfs_sufile_read()
1212 sui->allocmax = nilfs_sufile_get_nsegments(sufile) - 1; in nilfs_sufile_read()
1215 unlock_new_inode(sufile); in nilfs_sufile_read()
1217 *inodep = sufile; in nilfs_sufile_read()
1220 iget_failed(sufile); in nilfs_sufile_read()