f2fs: introduce f2fs_base_attr for global sysfs entries
[ Upstream commit 21925ede449e038ed6f9efdfe0e79f15bddc34bc ] In /sys/fs/f2fs/features, there's no f2fs_sb_info, so let's avoid to get the pointer. Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9af429febf
commit
6fed5e23d2
@@ -61,6 +61,12 @@ struct f2fs_attr {
|
||||
int id;
|
||||
};
|
||||
|
||||
struct f2fs_base_attr {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct f2fs_base_attr *a, char *buf);
|
||||
ssize_t (*store)(struct f2fs_base_attr *a, const char *buf, size_t len);
|
||||
};
|
||||
|
||||
static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
|
||||
struct f2fs_sb_info *sbi, char *buf);
|
||||
|
||||
@@ -791,6 +797,25 @@ static void f2fs_sb_release(struct kobject *kobj)
|
||||
complete(&sbi->s_kobj_unregister);
|
||||
}
|
||||
|
||||
static ssize_t f2fs_base_attr_show(struct kobject *kobj,
|
||||
struct attribute *attr, char *buf)
|
||||
{
|
||||
struct f2fs_base_attr *a = container_of(attr,
|
||||
struct f2fs_base_attr, attr);
|
||||
|
||||
return a->show ? a->show(a, buf) : 0;
|
||||
}
|
||||
|
||||
static ssize_t f2fs_base_attr_store(struct kobject *kobj,
|
||||
struct attribute *attr,
|
||||
const char *buf, size_t len)
|
||||
{
|
||||
struct f2fs_base_attr *a = container_of(attr,
|
||||
struct f2fs_base_attr, attr);
|
||||
|
||||
return a->store ? a->store(a, buf, len) : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note that there are three feature list entries:
|
||||
* 1) /sys/fs/f2fs/features
|
||||
@@ -809,14 +834,13 @@ static void f2fs_sb_release(struct kobject *kobj)
|
||||
* please add new on-disk feature in this list only.
|
||||
* - ref. F2FS_SB_FEATURE_RO_ATTR()
|
||||
*/
|
||||
static ssize_t f2fs_feature_show(struct f2fs_attr *a,
|
||||
struct f2fs_sb_info *sbi, char *buf)
|
||||
static ssize_t f2fs_feature_show(struct f2fs_base_attr *a, char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "supported\n");
|
||||
}
|
||||
|
||||
#define F2FS_FEATURE_RO_ATTR(_name) \
|
||||
static struct f2fs_attr f2fs_attr_##_name = { \
|
||||
static struct f2fs_base_attr f2fs_base_attr_##_name = { \
|
||||
.attr = {.name = __stringify(_name), .mode = 0444 }, \
|
||||
.show = f2fs_feature_show, \
|
||||
}
|
||||
@@ -1166,37 +1190,38 @@ static struct attribute *f2fs_attrs[] = {
|
||||
};
|
||||
ATTRIBUTE_GROUPS(f2fs);
|
||||
|
||||
#define BASE_ATTR_LIST(name) (&f2fs_base_attr_##name.attr)
|
||||
static struct attribute *f2fs_feat_attrs[] = {
|
||||
#ifdef CONFIG_FS_ENCRYPTION
|
||||
ATTR_LIST(encryption),
|
||||
ATTR_LIST(test_dummy_encryption_v2),
|
||||
BASE_ATTR_LIST(encryption),
|
||||
BASE_ATTR_LIST(test_dummy_encryption_v2),
|
||||
#if IS_ENABLED(CONFIG_UNICODE)
|
||||
ATTR_LIST(encrypted_casefold),
|
||||
BASE_ATTR_LIST(encrypted_casefold),
|
||||
#endif
|
||||
#endif /* CONFIG_FS_ENCRYPTION */
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
ATTR_LIST(block_zoned),
|
||||
BASE_ATTR_LIST(block_zoned),
|
||||
#endif
|
||||
ATTR_LIST(atomic_write),
|
||||
ATTR_LIST(extra_attr),
|
||||
ATTR_LIST(project_quota),
|
||||
ATTR_LIST(inode_checksum),
|
||||
ATTR_LIST(flexible_inline_xattr),
|
||||
ATTR_LIST(quota_ino),
|
||||
ATTR_LIST(inode_crtime),
|
||||
ATTR_LIST(lost_found),
|
||||
BASE_ATTR_LIST(atomic_write),
|
||||
BASE_ATTR_LIST(extra_attr),
|
||||
BASE_ATTR_LIST(project_quota),
|
||||
BASE_ATTR_LIST(inode_checksum),
|
||||
BASE_ATTR_LIST(flexible_inline_xattr),
|
||||
BASE_ATTR_LIST(quota_ino),
|
||||
BASE_ATTR_LIST(inode_crtime),
|
||||
BASE_ATTR_LIST(lost_found),
|
||||
#ifdef CONFIG_FS_VERITY
|
||||
ATTR_LIST(verity),
|
||||
BASE_ATTR_LIST(verity),
|
||||
#endif
|
||||
ATTR_LIST(sb_checksum),
|
||||
BASE_ATTR_LIST(sb_checksum),
|
||||
#if IS_ENABLED(CONFIG_UNICODE)
|
||||
ATTR_LIST(casefold),
|
||||
BASE_ATTR_LIST(casefold),
|
||||
#endif
|
||||
ATTR_LIST(readonly),
|
||||
BASE_ATTR_LIST(readonly),
|
||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||
ATTR_LIST(compression),
|
||||
BASE_ATTR_LIST(compression),
|
||||
#endif
|
||||
ATTR_LIST(pin_file),
|
||||
BASE_ATTR_LIST(pin_file),
|
||||
NULL,
|
||||
};
|
||||
ATTRIBUTE_GROUPS(f2fs_feat);
|
||||
@@ -1263,9 +1288,14 @@ static struct kset f2fs_kset = {
|
||||
.kobj = {.ktype = &f2fs_ktype},
|
||||
};
|
||||
|
||||
static const struct sysfs_ops f2fs_feat_attr_ops = {
|
||||
.show = f2fs_base_attr_show,
|
||||
.store = f2fs_base_attr_store,
|
||||
};
|
||||
|
||||
static const struct kobj_type f2fs_feat_ktype = {
|
||||
.default_groups = f2fs_feat_groups,
|
||||
.sysfs_ops = &f2fs_attr_ops,
|
||||
.sysfs_ops = &f2fs_feat_attr_ops,
|
||||
};
|
||||
|
||||
static struct kobject f2fs_feat = {
|
||||
|
Reference in New Issue
Block a user