f2fs: expose extension_list sysfs entry
This patch adds a sysfs entry 'extension_list' to support query/add/del item in extension list. Query: cat /sys/fs/f2fs/<device>/extension_list Add: echo 'extension' > /sys/fs/f2fs/<device>/extension_list Del: echo '!extension' > /sys/fs/f2fs/<device>/extension_list Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
此提交包含在:
@@ -136,6 +136,18 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
|
||||
if (!ptr)
|
||||
return -EINVAL;
|
||||
|
||||
if (!strcmp(a->attr.name, "extension_list")) {
|
||||
__u8 (*extlist)[F2FS_EXTENSION_LEN] =
|
||||
sbi->raw_super->extension_list;
|
||||
int count = le32_to_cpu(sbi->raw_super->extension_count);
|
||||
int len = 0, i;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
len += snprintf(buf + len, PAGE_SIZE - len, "%s\n",
|
||||
extlist[i]);
|
||||
return len;
|
||||
}
|
||||
|
||||
ui = (unsigned int *)(ptr + a->offset);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", *ui);
|
||||
@@ -154,6 +166,32 @@ static ssize_t f2fs_sbi_store(struct f2fs_attr *a,
|
||||
if (!ptr)
|
||||
return -EINVAL;
|
||||
|
||||
if (!strcmp(a->attr.name, "extension_list")) {
|
||||
const char *name = strim((char *)buf);
|
||||
bool set = true;
|
||||
|
||||
if (name[0] == '!') {
|
||||
name++;
|
||||
set = false;
|
||||
}
|
||||
|
||||
if (strlen(name) >= F2FS_EXTENSION_LEN)
|
||||
return -EINVAL;
|
||||
|
||||
down_write(&sbi->sb_lock);
|
||||
|
||||
ret = update_extension_list(sbi, name, set);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = f2fs_commit_super(sbi, false);
|
||||
if (ret)
|
||||
update_extension_list(sbi, name, !set);
|
||||
out:
|
||||
up_write(&sbi->sb_lock);
|
||||
return ret ? ret : count;
|
||||
}
|
||||
|
||||
ui = (unsigned int *)(ptr + a->offset);
|
||||
|
||||
ret = kstrtoul(skip_spaces(buf), 0, &t);
|
||||
@@ -307,6 +345,7 @@ F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, idle_interval, interval_time[REQ_TIME]);
|
||||
F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_enable, iostat_enable);
|
||||
F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, readdir_ra, readdir_ra);
|
||||
F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_pin_file_thresh, gc_pin_file_threshold);
|
||||
F2FS_RW_ATTR(F2FS_SBI, f2fs_super_block, extension_list, extension_list);
|
||||
#ifdef CONFIG_F2FS_FAULT_INJECTION
|
||||
F2FS_RW_ATTR(FAULT_INFO_RATE, f2fs_fault_info, inject_rate, inject_rate);
|
||||
F2FS_RW_ATTR(FAULT_INFO_TYPE, f2fs_fault_info, inject_type, inject_type);
|
||||
@@ -357,6 +396,7 @@ static struct attribute *f2fs_attrs[] = {
|
||||
ATTR_LIST(iostat_enable),
|
||||
ATTR_LIST(readdir_ra),
|
||||
ATTR_LIST(gc_pin_file_thresh),
|
||||
ATTR_LIST(extension_list),
|
||||
#ifdef CONFIG_F2FS_FAULT_INJECTION
|
||||
ATTR_LIST(inject_rate),
|
||||
ATTR_LIST(inject_type),
|
||||
|
新增問題並參考
封鎖使用者