Message ID | 20171031034030.26719-1-jaegeuk@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2017/10/31 11:40, Jaegeuk Kim wrote: > This patch adds quota_ino feature infra to be used for quota files. > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Reviewed-by: Chao Yu <yuchao0@huawei.com> > --- > fs/f2fs/f2fs.h | 6 ++++++ > fs/f2fs/sysfs.c | 7 +++++++ > include/linux/f2fs_fs.h | 6 +++++- > 3 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index 4a75f07f1dc8..9a1c7ffa6845 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -122,6 +122,7 @@ struct f2fs_mount_info { > #define F2FS_FEATURE_PRJQUOTA 0x0010 > #define F2FS_FEATURE_INODE_CHKSUM 0x0020 > #define F2FS_FEATURE_FLEXIBLE_INLINE_XATTR 0x0040 > +#define F2FS_FEATURE_QUOTA_INO 0x0080 > > #define F2FS_HAS_FEATURE(sb, mask) \ > ((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0) > @@ -3070,6 +3071,11 @@ static inline int f2fs_sb_has_flexible_inline_xattr(struct super_block *sb) > return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_FLEXIBLE_INLINE_XATTR); > } > > +static inline int f2fs_sb_has_quota_ino(struct super_block *sb) > +{ > + return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_QUOTA_INO); > +} > + > #ifdef CONFIG_BLK_DEV_ZONED > static inline int get_blkz_type(struct f2fs_sb_info *sbi, > struct block_device *bdev, block_t blkaddr) > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c > index f0fdc89ce82f..9835348b6e5d 100644 > --- a/fs/f2fs/sysfs.c > +++ b/fs/f2fs/sysfs.c > @@ -110,6 +110,9 @@ static ssize_t features_show(struct f2fs_attr *a, > if (f2fs_sb_has_flexible_inline_xattr(sb)) > len += snprintf(buf + len, PAGE_SIZE - len, "%s%s", > len ? ", " : "", "flexible_inline_xattr"); > + if (f2fs_sb_has_quota_ino(sb)) > + len += snprintf(buf + len, PAGE_SIZE - len, "%s%s", > + len ? ", " : "", "quota_ino"); > len += snprintf(buf + len, PAGE_SIZE - len, "\n"); > return len; > } > @@ -227,6 +230,7 @@ enum feat_id { > FEAT_PROJECT_QUOTA, > FEAT_INODE_CHECKSUM, > FEAT_FLEXIBLE_INLINE_XATTR, > + FEAT_QUOTA_INO, > }; > > static ssize_t f2fs_feature_show(struct f2fs_attr *a, > @@ -240,6 +244,7 @@ static ssize_t f2fs_feature_show(struct f2fs_attr *a, > case FEAT_PROJECT_QUOTA: > case FEAT_INODE_CHECKSUM: > case FEAT_FLEXIBLE_INLINE_XATTR: > + case FEAT_QUOTA_INO: > return snprintf(buf, PAGE_SIZE, "supported\n"); > } > return 0; > @@ -314,6 +319,7 @@ F2FS_FEATURE_RO_ATTR(extra_attr, FEAT_EXTRA_ATTR); > F2FS_FEATURE_RO_ATTR(project_quota, FEAT_PROJECT_QUOTA); > F2FS_FEATURE_RO_ATTR(inode_checksum, FEAT_INODE_CHECKSUM); > F2FS_FEATURE_RO_ATTR(flexible_inline_xattr, FEAT_FLEXIBLE_INLINE_XATTR); > +F2FS_FEATURE_RO_ATTR(quota_ino, FEAT_QUOTA_INO); > > #define ATTR_LIST(name) (&f2fs_attr_##name.attr) > static struct attribute *f2fs_attrs[] = { > @@ -364,6 +370,7 @@ static struct attribute *f2fs_feat_attrs[] = { > ATTR_LIST(project_quota), > ATTR_LIST(inode_checksum), > ATTR_LIST(flexible_inline_xattr), > + ATTR_LIST(quota_ino), > NULL, > }; > > diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h > index 50a8ee501bf1..ce34007972c3 100644 > --- a/include/linux/f2fs_fs.h > +++ b/include/linux/f2fs_fs.h > @@ -36,6 +36,9 @@ > #define F2FS_NODE_INO(sbi) ((sbi)->node_ino_num) > #define F2FS_META_INO(sbi) ((sbi)->meta_ino_num) > > +#define F2FS_QUOTA_INO 3 > +#define F2FS_MAX_QUOTAS 3 > + > #define F2FS_IO_SIZE(sbi) (1 << (sbi)->write_io_size_bits) /* Blocks */ > #define F2FS_IO_SIZE_KB(sbi) (1 << ((sbi)->write_io_size_bits + 2)) /* KB */ > #define F2FS_IO_SIZE_BYTES(sbi) (1 << ((sbi)->write_io_size_bits + 12)) /* B */ > @@ -108,7 +111,8 @@ struct f2fs_super_block { > __u8 encryption_level; /* versioning level for encryption */ > __u8 encrypt_pw_salt[16]; /* Salt used for string2key algorithm */ > struct f2fs_device devs[MAX_DEVICES]; /* device list */ > - __u8 reserved[327]; /* valid reserved region */ > + __le32 qf_ino[F2FS_MAX_QUOTAS]; /* quota inode numbers */ > + __u8 reserved[315]; /* valid reserved region */ > } __packed; > > /* >
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 4a75f07f1dc8..9a1c7ffa6845 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -122,6 +122,7 @@ struct f2fs_mount_info { #define F2FS_FEATURE_PRJQUOTA 0x0010 #define F2FS_FEATURE_INODE_CHKSUM 0x0020 #define F2FS_FEATURE_FLEXIBLE_INLINE_XATTR 0x0040 +#define F2FS_FEATURE_QUOTA_INO 0x0080 #define F2FS_HAS_FEATURE(sb, mask) \ ((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0) @@ -3070,6 +3071,11 @@ static inline int f2fs_sb_has_flexible_inline_xattr(struct super_block *sb) return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_FLEXIBLE_INLINE_XATTR); } +static inline int f2fs_sb_has_quota_ino(struct super_block *sb) +{ + return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_QUOTA_INO); +} + #ifdef CONFIG_BLK_DEV_ZONED static inline int get_blkz_type(struct f2fs_sb_info *sbi, struct block_device *bdev, block_t blkaddr) diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c index f0fdc89ce82f..9835348b6e5d 100644 --- a/fs/f2fs/sysfs.c +++ b/fs/f2fs/sysfs.c @@ -110,6 +110,9 @@ static ssize_t features_show(struct f2fs_attr *a, if (f2fs_sb_has_flexible_inline_xattr(sb)) len += snprintf(buf + len, PAGE_SIZE - len, "%s%s", len ? ", " : "", "flexible_inline_xattr"); + if (f2fs_sb_has_quota_ino(sb)) + len += snprintf(buf + len, PAGE_SIZE - len, "%s%s", + len ? ", " : "", "quota_ino"); len += snprintf(buf + len, PAGE_SIZE - len, "\n"); return len; } @@ -227,6 +230,7 @@ enum feat_id { FEAT_PROJECT_QUOTA, FEAT_INODE_CHECKSUM, FEAT_FLEXIBLE_INLINE_XATTR, + FEAT_QUOTA_INO, }; static ssize_t f2fs_feature_show(struct f2fs_attr *a, @@ -240,6 +244,7 @@ static ssize_t f2fs_feature_show(struct f2fs_attr *a, case FEAT_PROJECT_QUOTA: case FEAT_INODE_CHECKSUM: case FEAT_FLEXIBLE_INLINE_XATTR: + case FEAT_QUOTA_INO: return snprintf(buf, PAGE_SIZE, "supported\n"); } return 0; @@ -314,6 +319,7 @@ F2FS_FEATURE_RO_ATTR(extra_attr, FEAT_EXTRA_ATTR); F2FS_FEATURE_RO_ATTR(project_quota, FEAT_PROJECT_QUOTA); F2FS_FEATURE_RO_ATTR(inode_checksum, FEAT_INODE_CHECKSUM); F2FS_FEATURE_RO_ATTR(flexible_inline_xattr, FEAT_FLEXIBLE_INLINE_XATTR); +F2FS_FEATURE_RO_ATTR(quota_ino, FEAT_QUOTA_INO); #define ATTR_LIST(name) (&f2fs_attr_##name.attr) static struct attribute *f2fs_attrs[] = { @@ -364,6 +370,7 @@ static struct attribute *f2fs_feat_attrs[] = { ATTR_LIST(project_quota), ATTR_LIST(inode_checksum), ATTR_LIST(flexible_inline_xattr), + ATTR_LIST(quota_ino), NULL, }; diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h index 50a8ee501bf1..ce34007972c3 100644 --- a/include/linux/f2fs_fs.h +++ b/include/linux/f2fs_fs.h @@ -36,6 +36,9 @@ #define F2FS_NODE_INO(sbi) ((sbi)->node_ino_num) #define F2FS_META_INO(sbi) ((sbi)->meta_ino_num) +#define F2FS_QUOTA_INO 3 +#define F2FS_MAX_QUOTAS 3 + #define F2FS_IO_SIZE(sbi) (1 << (sbi)->write_io_size_bits) /* Blocks */ #define F2FS_IO_SIZE_KB(sbi) (1 << ((sbi)->write_io_size_bits + 2)) /* KB */ #define F2FS_IO_SIZE_BYTES(sbi) (1 << ((sbi)->write_io_size_bits + 12)) /* B */ @@ -108,7 +111,8 @@ struct f2fs_super_block { __u8 encryption_level; /* versioning level for encryption */ __u8 encrypt_pw_salt[16]; /* Salt used for string2key algorithm */ struct f2fs_device devs[MAX_DEVICES]; /* device list */ - __u8 reserved[327]; /* valid reserved region */ + __le32 qf_ino[F2FS_MAX_QUOTAS]; /* quota inode numbers */ + __u8 reserved[315]; /* valid reserved region */ } __packed; /*
This patch adds quota_ino feature infra to be used for quota files. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- fs/f2fs/f2fs.h | 6 ++++++ fs/f2fs/sysfs.c | 7 +++++++ include/linux/f2fs_fs.h | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-)