0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _NILFS_SUFILE_H
0011 #define _NILFS_SUFILE_H
0012
0013 #include <linux/fs.h>
0014 #include <linux/buffer_head.h>
0015 #include "mdt.h"
0016
0017
0018 static inline unsigned long nilfs_sufile_get_nsegments(struct inode *sufile)
0019 {
0020 return ((struct the_nilfs *)sufile->i_sb->s_fs_info)->ns_nsegments;
0021 }
0022
0023 unsigned long nilfs_sufile_get_ncleansegs(struct inode *sufile);
0024
0025 int nilfs_sufile_set_alloc_range(struct inode *sufile, __u64 start, __u64 end);
0026 int nilfs_sufile_alloc(struct inode *, __u64 *);
0027 int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum);
0028 int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum,
0029 unsigned long nblocks, time64_t modtime);
0030 int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
0031 ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned int,
0032 size_t);
0033 ssize_t nilfs_sufile_set_suinfo(struct inode *, void *, unsigned int, size_t);
0034
0035 int nilfs_sufile_updatev(struct inode *, __u64 *, size_t, int, size_t *,
0036 void (*dofunc)(struct inode *, __u64,
0037 struct buffer_head *,
0038 struct buffer_head *));
0039 int nilfs_sufile_update(struct inode *, __u64, int,
0040 void (*dofunc)(struct inode *, __u64,
0041 struct buffer_head *,
0042 struct buffer_head *));
0043 void nilfs_sufile_do_scrap(struct inode *, __u64, struct buffer_head *,
0044 struct buffer_head *);
0045 void nilfs_sufile_do_free(struct inode *, __u64, struct buffer_head *,
0046 struct buffer_head *);
0047 void nilfs_sufile_do_cancel_free(struct inode *, __u64, struct buffer_head *,
0048 struct buffer_head *);
0049 void nilfs_sufile_do_set_error(struct inode *, __u64, struct buffer_head *,
0050 struct buffer_head *);
0051
0052 int nilfs_sufile_resize(struct inode *sufile, __u64 newnsegs);
0053 int nilfs_sufile_read(struct super_block *sb, size_t susize,
0054 struct nilfs_inode *raw_inode, struct inode **inodep);
0055 int nilfs_sufile_trim_fs(struct inode *sufile, struct fstrim_range *range);
0056
0057
0058
0059
0060
0061
0062 static inline int nilfs_sufile_scrap(struct inode *sufile, __u64 segnum)
0063 {
0064 return nilfs_sufile_update(sufile, segnum, 1, nilfs_sufile_do_scrap);
0065 }
0066
0067
0068
0069
0070
0071
0072 static inline int nilfs_sufile_free(struct inode *sufile, __u64 segnum)
0073 {
0074 return nilfs_sufile_update(sufile, segnum, 0, nilfs_sufile_do_free);
0075 }
0076
0077
0078
0079
0080
0081
0082
0083
0084 static inline int nilfs_sufile_freev(struct inode *sufile, __u64 *segnumv,
0085 size_t nsegs, size_t *ndone)
0086 {
0087 return nilfs_sufile_updatev(sufile, segnumv, nsegs, 0, ndone,
0088 nilfs_sufile_do_free);
0089 }
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101 static inline int nilfs_sufile_cancel_freev(struct inode *sufile,
0102 __u64 *segnumv, size_t nsegs,
0103 size_t *ndone)
0104 {
0105 return nilfs_sufile_updatev(sufile, segnumv, nsegs, 0, ndone,
0106 nilfs_sufile_do_cancel_free);
0107 }
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 static inline int nilfs_sufile_set_error(struct inode *sufile, __u64 segnum)
0127 {
0128 return nilfs_sufile_update(sufile, segnum, 0,
0129 nilfs_sufile_do_set_error);
0130 }
0131
0132 #endif