Lines Matching refs:sufile

35 static inline struct nilfs_sufile_info *NILFS_SUI(struct inode *sufile)  in NILFS_SUI()  argument
37 return (struct nilfs_sufile_info *)NILFS_MDT(sufile); in NILFS_SUI()
41 nilfs_sufile_segment_usages_per_block(const struct inode *sufile) in nilfs_sufile_segment_usages_per_block() argument
43 return NILFS_MDT(sufile)->mi_entries_per_block; in nilfs_sufile_segment_usages_per_block()
47 nilfs_sufile_get_blkoff(const struct inode *sufile, __u64 segnum) in nilfs_sufile_get_blkoff() argument
49 __u64 t = segnum + NILFS_MDT(sufile)->mi_first_entry_offset; in nilfs_sufile_get_blkoff()
51 do_div(t, nilfs_sufile_segment_usages_per_block(sufile)); in nilfs_sufile_get_blkoff()
56 nilfs_sufile_get_offset(const struct inode *sufile, __u64 segnum) in nilfs_sufile_get_offset() argument
58 __u64 t = segnum + NILFS_MDT(sufile)->mi_first_entry_offset; in nilfs_sufile_get_offset()
60 return do_div(t, nilfs_sufile_segment_usages_per_block(sufile)); in nilfs_sufile_get_offset()
64 nilfs_sufile_segment_usages_in_block(const struct inode *sufile, __u64 curr, in nilfs_sufile_segment_usages_in_block() argument
68 nilfs_sufile_segment_usages_per_block(sufile) - in nilfs_sufile_segment_usages_in_block()
69 nilfs_sufile_get_offset(sufile, curr), in nilfs_sufile_segment_usages_in_block()
74 nilfs_sufile_block_get_segment_usage(const struct inode *sufile, __u64 segnum, in nilfs_sufile_block_get_segment_usage() argument
78 nilfs_sufile_get_offset(sufile, segnum) * in nilfs_sufile_block_get_segment_usage()
79 NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_block_get_segment_usage()
82 static inline int nilfs_sufile_get_header_block(struct inode *sufile, in nilfs_sufile_get_header_block() argument
85 return nilfs_mdt_get_block(sufile, 0, 0, NULL, bhp); in nilfs_sufile_get_header_block()
89 nilfs_sufile_get_segment_usage_block(struct inode *sufile, __u64 segnum, in nilfs_sufile_get_segment_usage_block() argument
92 return nilfs_mdt_get_block(sufile, in nilfs_sufile_get_segment_usage_block()
93 nilfs_sufile_get_blkoff(sufile, segnum), in nilfs_sufile_get_segment_usage_block()
97 static int nilfs_sufile_delete_segment_usage_block(struct inode *sufile, in nilfs_sufile_delete_segment_usage_block() argument
100 return nilfs_mdt_delete_block(sufile, in nilfs_sufile_delete_segment_usage_block()
101 nilfs_sufile_get_blkoff(sufile, segnum)); in nilfs_sufile_delete_segment_usage_block()
123 unsigned long nilfs_sufile_get_ncleansegs(struct inode *sufile) in nilfs_sufile_get_ncleansegs() argument
125 return NILFS_SUI(sufile)->ncleansegs; in nilfs_sufile_get_ncleansegs()
156 int nilfs_sufile_updatev(struct inode *sufile, __u64 *segnumv, size_t nsegs, in nilfs_sufile_updatev() argument
171 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_updatev()
173 if (unlikely(*seg >= nilfs_sufile_get_nsegments(sufile))) { in nilfs_sufile_updatev()
174 nilfs_msg(sufile->i_sb, KERN_WARNING, in nilfs_sufile_updatev()
185 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_updatev()
190 blkoff = nilfs_sufile_get_blkoff(sufile, *seg); in nilfs_sufile_updatev()
191 ret = nilfs_mdt_get_block(sufile, blkoff, create, NULL, &bh); in nilfs_sufile_updatev()
196 dofunc(sufile, *seg, header_bh, bh); in nilfs_sufile_updatev()
201 blkoff = nilfs_sufile_get_blkoff(sufile, *seg); in nilfs_sufile_updatev()
207 ret = nilfs_mdt_get_block(sufile, blkoff, create, NULL, &bh); in nilfs_sufile_updatev()
217 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_updatev()
224 int nilfs_sufile_update(struct inode *sufile, __u64 segnum, int create, in nilfs_sufile_update() argument
232 if (unlikely(segnum >= nilfs_sufile_get_nsegments(sufile))) { in nilfs_sufile_update()
233 nilfs_msg(sufile->i_sb, KERN_WARNING, in nilfs_sufile_update()
238 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_update()
240 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_update()
244 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, create, &bh); in nilfs_sufile_update()
246 dofunc(sufile, segnum, header_bh, bh); in nilfs_sufile_update()
252 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_update()
267 int nilfs_sufile_set_alloc_range(struct inode *sufile, __u64 start, __u64 end) in nilfs_sufile_set_alloc_range() argument
269 struct nilfs_sufile_info *sui = NILFS_SUI(sufile); in nilfs_sufile_set_alloc_range()
273 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_alloc_range()
274 nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_set_alloc_range()
281 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_alloc_range()
302 int nilfs_sufile_alloc(struct inode *sufile, __u64 *segnump) in nilfs_sufile_alloc() argument
307 struct nilfs_sufile_info *sui = NILFS_SUI(sufile); in nilfs_sufile_alloc()
308 size_t susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_alloc()
314 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_alloc()
316 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_alloc()
324 nsegments = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_alloc()
351 trace_nilfs2_segment_usage_check(sufile, segnum, cnt); in nilfs_sufile_alloc()
352 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 1, in nilfs_sufile_alloc()
358 sufile, segnum, su_bh, kaddr); in nilfs_sufile_alloc()
361 sufile, segnum, maxsegnum); in nilfs_sufile_alloc()
379 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_alloc()
383 trace_nilfs2_segment_usage_allocated(sufile, segnum); in nilfs_sufile_alloc()
399 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_alloc()
403 void nilfs_sufile_do_cancel_free(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_cancel_free() argument
411 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_cancel_free()
413 nilfs_msg(sufile->i_sb, KERN_WARNING, in nilfs_sufile_do_cancel_free()
423 NILFS_SUI(sufile)->ncleansegs--; in nilfs_sufile_do_cancel_free()
426 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_cancel_free()
429 void nilfs_sufile_do_scrap(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_scrap() argument
438 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_scrap()
454 NILFS_SUI(sufile)->ncleansegs -= clean; in nilfs_sufile_do_scrap()
457 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_scrap()
460 void nilfs_sufile_do_free(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_free() argument
469 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_free()
471 nilfs_msg(sufile->i_sb, KERN_WARNING, in nilfs_sufile_do_free()
486 NILFS_SUI(sufile)->ncleansegs++; in nilfs_sufile_do_free()
488 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_free()
490 trace_nilfs2_segment_usage_freed(sufile, segnum); in nilfs_sufile_do_free()
498 int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum) in nilfs_sufile_mark_dirty() argument
505 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_mark_dirty()
506 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); in nilfs_sufile_mark_dirty()
509 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_mark_dirty()
511 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr); in nilfs_sufile_mark_dirty()
516 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_mark_dirty()
527 int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum, in nilfs_sufile_set_segment_usage() argument
535 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_segment_usage()
536 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); in nilfs_sufile_set_segment_usage()
541 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr); in nilfs_sufile_set_segment_usage()
549 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_set_segment_usage()
553 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_segment_usage()
573 int nilfs_sufile_get_stat(struct inode *sufile, struct nilfs_sustat *sustat) in nilfs_sufile_get_stat() argument
577 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_get_stat()
581 down_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_stat()
583 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_get_stat()
589 sustat->ss_nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_get_stat()
601 up_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_stat()
605 void nilfs_sufile_do_set_error(struct inode *sufile, __u64 segnum, in nilfs_sufile_do_set_error() argument
614 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); in nilfs_sufile_do_set_error()
625 NILFS_SUI(sufile)->ncleansegs--; in nilfs_sufile_do_set_error()
628 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_do_set_error()
648 static int nilfs_sufile_truncate_range(struct inode *sufile, in nilfs_sufile_truncate_range() argument
651 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_truncate_range()
655 size_t susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_truncate_range()
664 nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_truncate_range()
670 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_truncate_range()
674 segusages_per_block = nilfs_sufile_segment_usages_per_block(sufile); in nilfs_sufile_truncate_range()
680 nilfs_sufile_get_offset(sufile, segnum), in nilfs_sufile_truncate_range()
682 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, in nilfs_sufile_truncate_range()
692 sufile, segnum, su_bh, kaddr); in nilfs_sufile_truncate_range()
720 nilfs_sufile_delete_segment_usage_block(sufile, segnum); in nilfs_sufile_truncate_range()
727 NILFS_SUI(sufile)->ncleansegs += ncleaned; in nilfs_sufile_truncate_range()
729 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_truncate_range()
752 int nilfs_sufile_resize(struct inode *sufile, __u64 newnsegs) in nilfs_sufile_resize() argument
754 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_resize()
757 struct nilfs_sufile_info *sui = NILFS_SUI(sufile); in nilfs_sufile_resize()
762 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_resize()
764 nsegs = nilfs_sufile_get_nsegments(sufile); in nilfs_sufile_resize()
773 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_resize()
780 ret = nilfs_sufile_truncate_range(sufile, newnsegs, nsegs - 1); in nilfs_sufile_resize()
802 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_resize()
808 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_resize()
829 ssize_t nilfs_sufile_get_suinfo(struct inode *sufile, __u64 segnum, void *buf, in nilfs_sufile_get_suinfo() argument
835 size_t susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_get_suinfo()
836 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_get_suinfo()
842 down_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_suinfo()
844 segusages_per_block = nilfs_sufile_segment_usages_per_block(sufile); in nilfs_sufile_get_suinfo()
846 nilfs_sufile_get_nsegments(sufile) - segnum, in nilfs_sufile_get_suinfo()
851 nilfs_sufile_get_offset(sufile, segnum), in nilfs_sufile_get_suinfo()
853 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, in nilfs_sufile_get_suinfo()
866 sufile, segnum, su_bh, kaddr); in nilfs_sufile_get_suinfo()
883 up_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_get_suinfo()
907 ssize_t nilfs_sufile_set_suinfo(struct inode *sufile, void *buf, in nilfs_sufile_set_suinfo() argument
910 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_set_suinfo()
933 down_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_suinfo()
935 ret = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_set_suinfo()
940 blkoff = nilfs_sufile_get_blkoff(sufile, sup->sup_segnum); in nilfs_sufile_set_suinfo()
941 ret = nilfs_mdt_get_block(sufile, blkoff, 1, NULL, &bh); in nilfs_sufile_set_suinfo()
948 sufile, sup->sup_segnum, bh, kaddr); in nilfs_sufile_set_suinfo()
990 blkoff = nilfs_sufile_get_blkoff(sufile, sup->sup_segnum); in nilfs_sufile_set_suinfo()
997 ret = nilfs_mdt_get_block(sufile, blkoff, 1, NULL, &bh); in nilfs_sufile_set_suinfo()
1008 NILFS_SUI(sufile)->ncleansegs += ncleaned; in nilfs_sufile_set_suinfo()
1010 nilfs_mdt_mark_dirty(sufile); in nilfs_sufile_set_suinfo()
1014 up_write(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_set_suinfo()
1034 int nilfs_sufile_trim_fs(struct inode *sufile, struct fstrim_range *range) in nilfs_sufile_trim_fs() argument
1036 struct the_nilfs *nilfs = sufile->i_sb->s_fs_info; in nilfs_sufile_trim_fs()
1040 size_t n, i, susz = NILFS_MDT(sufile)->mi_entry_size; in nilfs_sufile_trim_fs()
1072 down_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_trim_fs()
1075 n = nilfs_sufile_segment_usages_in_block(sufile, segnum, in nilfs_sufile_trim_fs()
1078 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, in nilfs_sufile_trim_fs()
1089 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, in nilfs_sufile_trim_fs()
1132 sufile, segnum, su_bh, kaddr); in nilfs_sufile_trim_fs()
1164 up_read(&NILFS_MDT(sufile)->mi_sem); in nilfs_sufile_trim_fs()
1180 struct inode *sufile; in nilfs_sufile_read() local
1197 sufile = nilfs_iget_locked(sb, NULL, NILFS_SUFILE_INO); in nilfs_sufile_read()
1198 if (unlikely(!sufile)) in nilfs_sufile_read()
1200 if (!(sufile->i_state & I_NEW)) in nilfs_sufile_read()
1203 err = nilfs_mdt_init(sufile, NILFS_MDT_GFP, sizeof(*sui)); in nilfs_sufile_read()
1207 nilfs_mdt_set_entry_size(sufile, susize, in nilfs_sufile_read()
1210 err = nilfs_read_inode_common(sufile, raw_inode); in nilfs_sufile_read()
1214 err = nilfs_sufile_get_header_block(sufile, &header_bh); in nilfs_sufile_read()
1218 sui = NILFS_SUI(sufile); in nilfs_sufile_read()
1225 sui->allocmax = nilfs_sufile_get_nsegments(sufile) - 1; in nilfs_sufile_read()
1228 unlock_new_inode(sufile); in nilfs_sufile_read()
1230 *inodep = sufile; in nilfs_sufile_read()
1233 iget_failed(sufile); in nilfs_sufile_read()