Commit 020e5277 authored by Anand Jain's avatar Anand Jain Committed by David Sterba

btrfs: sysfs: convert scnprintf and snprintf to sysfs_emit

Commit 2efc459d ("sysfs: Add sysfs_emit and sysfs_emit_at to format
sysfs out") merged in 5.10 introduced two new functions sysfs_emit() and
sysfs_emit_at() which are aware of the PAGE_SIZE limit of the output
buffer.

Use the above two new functions instead of scnprintf() and snprintf()
in various sysfs show().
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 38732474
...@@ -177,7 +177,7 @@ static ssize_t btrfs_feature_attr_show(struct kobject *kobj, ...@@ -177,7 +177,7 @@ static ssize_t btrfs_feature_attr_show(struct kobject *kobj,
} else } else
val = can_modify_feature(fa); val = can_modify_feature(fa);
return scnprintf(buf, PAGE_SIZE, "%d\n", val); return sysfs_emit(buf, "%d\n", val);
} }
static ssize_t btrfs_feature_attr_store(struct kobject *kobj, static ssize_t btrfs_feature_attr_store(struct kobject *kobj,
...@@ -330,7 +330,7 @@ static const struct attribute_group btrfs_feature_attr_group = { ...@@ -330,7 +330,7 @@ static const struct attribute_group btrfs_feature_attr_group = {
static ssize_t rmdir_subvol_show(struct kobject *kobj, static ssize_t rmdir_subvol_show(struct kobject *kobj,
struct kobj_attribute *ka, char *buf) struct kobj_attribute *ka, char *buf)
{ {
return scnprintf(buf, PAGE_SIZE, "0\n"); return sysfs_emit(buf, "0\n");
} }
BTRFS_ATTR(static_feature, rmdir_subvol, rmdir_subvol_show); BTRFS_ATTR(static_feature, rmdir_subvol, rmdir_subvol_show);
...@@ -345,12 +345,12 @@ static ssize_t supported_checksums_show(struct kobject *kobj, ...@@ -345,12 +345,12 @@ static ssize_t supported_checksums_show(struct kobject *kobj,
* This "trick" only works as long as 'enum btrfs_csum_type' has * This "trick" only works as long as 'enum btrfs_csum_type' has
* no holes in it * no holes in it
*/ */
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "%s%s", ret += sysfs_emit_at(buf, ret, "%s%s", (i == 0 ? "" : " "),
(i == 0 ? "" : " "), btrfs_super_csum_name(i)); btrfs_super_csum_name(i));
} }
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n"); ret += sysfs_emit_at(buf, ret, "\n");
return ret; return ret;
} }
BTRFS_ATTR(static_feature, supported_checksums, supported_checksums_show); BTRFS_ATTR(static_feature, supported_checksums, supported_checksums_show);
...@@ -358,7 +358,7 @@ BTRFS_ATTR(static_feature, supported_checksums, supported_checksums_show); ...@@ -358,7 +358,7 @@ BTRFS_ATTR(static_feature, supported_checksums, supported_checksums_show);
static ssize_t send_stream_version_show(struct kobject *kobj, static ssize_t send_stream_version_show(struct kobject *kobj,
struct kobj_attribute *ka, char *buf) struct kobj_attribute *ka, char *buf)
{ {
return snprintf(buf, PAGE_SIZE, "%d\n", BTRFS_SEND_STREAM_VERSION); return sysfs_emit(buf, "%d\n", BTRFS_SEND_STREAM_VERSION);
} }
BTRFS_ATTR(static_feature, send_stream_version, send_stream_version_show); BTRFS_ATTR(static_feature, send_stream_version, send_stream_version_show);
...@@ -378,9 +378,8 @@ static ssize_t supported_rescue_options_show(struct kobject *kobj, ...@@ -378,9 +378,8 @@ static ssize_t supported_rescue_options_show(struct kobject *kobj,
int i; int i;
for (i = 0; i < ARRAY_SIZE(rescue_opts); i++) for (i = 0; i < ARRAY_SIZE(rescue_opts); i++)
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "%s%s", ret += sysfs_emit_at(buf, ret, "%s%s", (i ? " " : ""), rescue_opts[i]);
(i ? " " : ""), rescue_opts[i]); ret += sysfs_emit_at(buf, ret, "\n");
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n");
return ret; return ret;
} }
BTRFS_ATTR(static_feature, supported_rescue_options, BTRFS_ATTR(static_feature, supported_rescue_options,
...@@ -394,10 +393,10 @@ static ssize_t supported_sectorsizes_show(struct kobject *kobj, ...@@ -394,10 +393,10 @@ static ssize_t supported_sectorsizes_show(struct kobject *kobj,
/* 4K sector size is also supported with 64K page size */ /* 4K sector size is also supported with 64K page size */
if (PAGE_SIZE == SZ_64K) if (PAGE_SIZE == SZ_64K)
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "%u ", SZ_4K); ret += sysfs_emit_at(buf, ret, "%u ", SZ_4K);
/* Only sectorsize == PAGE_SIZE is now supported */ /* Only sectorsize == PAGE_SIZE is now supported */
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "%lu\n", PAGE_SIZE); ret += sysfs_emit_at(buf, ret, "%lu\n", PAGE_SIZE);
return ret; return ret;
} }
...@@ -437,7 +436,7 @@ static ssize_t btrfs_discardable_bytes_show(struct kobject *kobj, ...@@ -437,7 +436,7 @@ static ssize_t btrfs_discardable_bytes_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%lld\n", return sysfs_emit(buf, "%lld\n",
atomic64_read(&fs_info->discard_ctl.discardable_bytes)); atomic64_read(&fs_info->discard_ctl.discardable_bytes));
} }
BTRFS_ATTR(discard, discardable_bytes, btrfs_discardable_bytes_show); BTRFS_ATTR(discard, discardable_bytes, btrfs_discardable_bytes_show);
...@@ -448,7 +447,7 @@ static ssize_t btrfs_discardable_extents_show(struct kobject *kobj, ...@@ -448,7 +447,7 @@ static ssize_t btrfs_discardable_extents_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%d\n", return sysfs_emit(buf, "%d\n",
atomic_read(&fs_info->discard_ctl.discardable_extents)); atomic_read(&fs_info->discard_ctl.discardable_extents));
} }
BTRFS_ATTR(discard, discardable_extents, btrfs_discardable_extents_show); BTRFS_ATTR(discard, discardable_extents, btrfs_discardable_extents_show);
...@@ -459,7 +458,7 @@ static ssize_t btrfs_discard_bitmap_bytes_show(struct kobject *kobj, ...@@ -459,7 +458,7 @@ static ssize_t btrfs_discard_bitmap_bytes_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%llu\n", return sysfs_emit(buf, "%llu\n",
fs_info->discard_ctl.discard_bitmap_bytes); fs_info->discard_ctl.discard_bitmap_bytes);
} }
BTRFS_ATTR(discard, discard_bitmap_bytes, btrfs_discard_bitmap_bytes_show); BTRFS_ATTR(discard, discard_bitmap_bytes, btrfs_discard_bitmap_bytes_show);
...@@ -470,7 +469,7 @@ static ssize_t btrfs_discard_bytes_saved_show(struct kobject *kobj, ...@@ -470,7 +469,7 @@ static ssize_t btrfs_discard_bytes_saved_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%lld\n", return sysfs_emit(buf, "%lld\n",
atomic64_read(&fs_info->discard_ctl.discard_bytes_saved)); atomic64_read(&fs_info->discard_ctl.discard_bytes_saved));
} }
BTRFS_ATTR(discard, discard_bytes_saved, btrfs_discard_bytes_saved_show); BTRFS_ATTR(discard, discard_bytes_saved, btrfs_discard_bytes_saved_show);
...@@ -481,7 +480,7 @@ static ssize_t btrfs_discard_extent_bytes_show(struct kobject *kobj, ...@@ -481,7 +480,7 @@ static ssize_t btrfs_discard_extent_bytes_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%llu\n", return sysfs_emit(buf, "%llu\n",
fs_info->discard_ctl.discard_extent_bytes); fs_info->discard_ctl.discard_extent_bytes);
} }
BTRFS_ATTR(discard, discard_extent_bytes, btrfs_discard_extent_bytes_show); BTRFS_ATTR(discard, discard_extent_bytes, btrfs_discard_extent_bytes_show);
...@@ -492,7 +491,7 @@ static ssize_t btrfs_discard_iops_limit_show(struct kobject *kobj, ...@@ -492,7 +491,7 @@ static ssize_t btrfs_discard_iops_limit_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%u\n", return sysfs_emit(buf, "%u\n",
READ_ONCE(fs_info->discard_ctl.iops_limit)); READ_ONCE(fs_info->discard_ctl.iops_limit));
} }
...@@ -523,7 +522,7 @@ static ssize_t btrfs_discard_kbps_limit_show(struct kobject *kobj, ...@@ -523,7 +522,7 @@ static ssize_t btrfs_discard_kbps_limit_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%u\n", return sysfs_emit(buf, "%u\n",
READ_ONCE(fs_info->discard_ctl.kbps_limit)); READ_ONCE(fs_info->discard_ctl.kbps_limit));
} }
...@@ -553,7 +552,7 @@ static ssize_t btrfs_discard_max_discard_size_show(struct kobject *kobj, ...@@ -553,7 +552,7 @@ static ssize_t btrfs_discard_max_discard_size_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj); struct btrfs_fs_info *fs_info = discard_to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%llu\n", return sysfs_emit(buf, "%llu\n",
READ_ONCE(fs_info->discard_ctl.max_discard_size)); READ_ONCE(fs_info->discard_ctl.max_discard_size));
} }
...@@ -627,7 +626,7 @@ static ssize_t btrfs_show_u64(u64 *value_ptr, spinlock_t *lock, char *buf) ...@@ -627,7 +626,7 @@ static ssize_t btrfs_show_u64(u64 *value_ptr, spinlock_t *lock, char *buf)
val = *value_ptr; val = *value_ptr;
if (lock) if (lock)
spin_unlock(lock); spin_unlock(lock);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val); return sysfs_emit(buf, "%llu\n", val);
} }
static ssize_t global_rsv_size_show(struct kobject *kobj, static ssize_t global_rsv_size_show(struct kobject *kobj,
...@@ -673,7 +672,7 @@ static ssize_t raid_bytes_show(struct kobject *kobj, ...@@ -673,7 +672,7 @@ static ssize_t raid_bytes_show(struct kobject *kobj,
val += block_group->used; val += block_group->used;
} }
up_read(&sinfo->groups_sem); up_read(&sinfo->groups_sem);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val); return sysfs_emit(buf, "%llu\n", val);
} }
/* /*
...@@ -771,7 +770,7 @@ static ssize_t btrfs_label_show(struct kobject *kobj, ...@@ -771,7 +770,7 @@ static ssize_t btrfs_label_show(struct kobject *kobj,
ssize_t ret; ssize_t ret;
spin_lock(&fs_info->super_lock); spin_lock(&fs_info->super_lock);
ret = scnprintf(buf, PAGE_SIZE, label[0] ? "%s\n" : "%s", label); ret = sysfs_emit(buf, label[0] ? "%s\n" : "%s", label);
spin_unlock(&fs_info->super_lock); spin_unlock(&fs_info->super_lock);
return ret; return ret;
...@@ -819,7 +818,7 @@ static ssize_t btrfs_nodesize_show(struct kobject *kobj, ...@@ -819,7 +818,7 @@ static ssize_t btrfs_nodesize_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%u\n", fs_info->super_copy->nodesize); return sysfs_emit(buf, "%u\n", fs_info->super_copy->nodesize);
} }
BTRFS_ATTR(, nodesize, btrfs_nodesize_show); BTRFS_ATTR(, nodesize, btrfs_nodesize_show);
...@@ -829,8 +828,7 @@ static ssize_t btrfs_sectorsize_show(struct kobject *kobj, ...@@ -829,8 +828,7 @@ static ssize_t btrfs_sectorsize_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%u\n", return sysfs_emit(buf, "%u\n", fs_info->super_copy->sectorsize);
fs_info->super_copy->sectorsize);
} }
BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show); BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show);
...@@ -840,7 +838,7 @@ static ssize_t btrfs_clone_alignment_show(struct kobject *kobj, ...@@ -840,7 +838,7 @@ static ssize_t btrfs_clone_alignment_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%u\n", fs_info->super_copy->sectorsize); return sysfs_emit(buf, "%u\n", fs_info->super_copy->sectorsize);
} }
BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show); BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show);
...@@ -852,7 +850,7 @@ static ssize_t quota_override_show(struct kobject *kobj, ...@@ -852,7 +850,7 @@ static ssize_t quota_override_show(struct kobject *kobj,
int quota_override; int quota_override;
quota_override = test_bit(BTRFS_FS_QUOTA_OVERRIDE, &fs_info->flags); quota_override = test_bit(BTRFS_FS_QUOTA_OVERRIDE, &fs_info->flags);
return scnprintf(buf, PAGE_SIZE, "%d\n", quota_override); return sysfs_emit(buf, "%d\n", quota_override);
} }
static ssize_t quota_override_store(struct kobject *kobj, static ssize_t quota_override_store(struct kobject *kobj,
...@@ -890,8 +888,7 @@ static ssize_t btrfs_metadata_uuid_show(struct kobject *kobj, ...@@ -890,8 +888,7 @@ static ssize_t btrfs_metadata_uuid_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%pU\n", return sysfs_emit(buf, "%pU\n", fs_info->fs_devices->metadata_uuid);
fs_info->fs_devices->metadata_uuid);
} }
BTRFS_ATTR(, metadata_uuid, btrfs_metadata_uuid_show); BTRFS_ATTR(, metadata_uuid, btrfs_metadata_uuid_show);
...@@ -902,7 +899,7 @@ static ssize_t btrfs_checksum_show(struct kobject *kobj, ...@@ -902,7 +899,7 @@ static ssize_t btrfs_checksum_show(struct kobject *kobj,
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
u16 csum_type = btrfs_super_csum_type(fs_info->super_copy); u16 csum_type = btrfs_super_csum_type(fs_info->super_copy);
return scnprintf(buf, PAGE_SIZE, "%s (%s)\n", return sysfs_emit(buf, "%s (%s)\n",
btrfs_super_csum_name(csum_type), btrfs_super_csum_name(csum_type),
crypto_shash_driver_name(fs_info->csum_shash)); crypto_shash_driver_name(fs_info->csum_shash));
} }
...@@ -941,7 +938,7 @@ static ssize_t btrfs_exclusive_operation_show(struct kobject *kobj, ...@@ -941,7 +938,7 @@ static ssize_t btrfs_exclusive_operation_show(struct kobject *kobj,
str = "UNKNOWN\n"; str = "UNKNOWN\n";
break; break;
} }
return scnprintf(buf, PAGE_SIZE, "%s", str); return sysfs_emit(buf, "%s", str);
} }
BTRFS_ATTR(, exclusive_operation, btrfs_exclusive_operation_show); BTRFS_ATTR(, exclusive_operation, btrfs_exclusive_operation_show);
...@@ -950,7 +947,7 @@ static ssize_t btrfs_generation_show(struct kobject *kobj, ...@@ -950,7 +947,7 @@ static ssize_t btrfs_generation_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return scnprintf(buf, PAGE_SIZE, "%llu\n", fs_info->generation); return sysfs_emit(buf, "%llu\n", fs_info->generation);
} }
BTRFS_ATTR(, generation, btrfs_generation_show); BTRFS_ATTR(, generation, btrfs_generation_show);
...@@ -1028,8 +1025,7 @@ static ssize_t btrfs_bg_reclaim_threshold_show(struct kobject *kobj, ...@@ -1028,8 +1025,7 @@ static ssize_t btrfs_bg_reclaim_threshold_show(struct kobject *kobj,
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
ssize_t ret; ssize_t ret;
ret = scnprintf(buf, PAGE_SIZE, "%d\n", ret = sysfs_emit(buf, "%d\n", READ_ONCE(fs_info->bg_reclaim_threshold));
READ_ONCE(fs_info->bg_reclaim_threshold));
return ret; return ret;
} }
...@@ -1471,7 +1467,7 @@ static ssize_t btrfs_devinfo_in_fs_metadata_show(struct kobject *kobj, ...@@ -1471,7 +1467,7 @@ static ssize_t btrfs_devinfo_in_fs_metadata_show(struct kobject *kobj,
val = !!test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state); val = !!test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
return scnprintf(buf, PAGE_SIZE, "%d\n", val); return sysfs_emit(buf, "%d\n", val);
} }
BTRFS_ATTR(devid, in_fs_metadata, btrfs_devinfo_in_fs_metadata_show); BTRFS_ATTR(devid, in_fs_metadata, btrfs_devinfo_in_fs_metadata_show);
...@@ -1484,7 +1480,7 @@ static ssize_t btrfs_devinfo_missing_show(struct kobject *kobj, ...@@ -1484,7 +1480,7 @@ static ssize_t btrfs_devinfo_missing_show(struct kobject *kobj,
val = !!test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state); val = !!test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state);
return scnprintf(buf, PAGE_SIZE, "%d\n", val); return sysfs_emit(buf, "%d\n", val);
} }
BTRFS_ATTR(devid, missing, btrfs_devinfo_missing_show); BTRFS_ATTR(devid, missing, btrfs_devinfo_missing_show);
...@@ -1498,7 +1494,7 @@ static ssize_t btrfs_devinfo_replace_target_show(struct kobject *kobj, ...@@ -1498,7 +1494,7 @@ static ssize_t btrfs_devinfo_replace_target_show(struct kobject *kobj,
val = !!test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state); val = !!test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
return scnprintf(buf, PAGE_SIZE, "%d\n", val); return sysfs_emit(buf, "%d\n", val);
} }
BTRFS_ATTR(devid, replace_target, btrfs_devinfo_replace_target_show); BTRFS_ATTR(devid, replace_target, btrfs_devinfo_replace_target_show);
...@@ -1509,8 +1505,7 @@ static ssize_t btrfs_devinfo_scrub_speed_max_show(struct kobject *kobj, ...@@ -1509,8 +1505,7 @@ static ssize_t btrfs_devinfo_scrub_speed_max_show(struct kobject *kobj,
struct btrfs_device *device = container_of(kobj, struct btrfs_device, struct btrfs_device *device = container_of(kobj, struct btrfs_device,
devid_kobj); devid_kobj);
return scnprintf(buf, PAGE_SIZE, "%llu\n", return sysfs_emit(buf, "%llu\n", READ_ONCE(device->scrub_speed_max));
READ_ONCE(device->scrub_speed_max));
} }
static ssize_t btrfs_devinfo_scrub_speed_max_store(struct kobject *kobj, static ssize_t btrfs_devinfo_scrub_speed_max_store(struct kobject *kobj,
...@@ -1538,7 +1533,7 @@ static ssize_t btrfs_devinfo_writeable_show(struct kobject *kobj, ...@@ -1538,7 +1533,7 @@ static ssize_t btrfs_devinfo_writeable_show(struct kobject *kobj,
val = !!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state); val = !!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
return scnprintf(buf, PAGE_SIZE, "%d\n", val); return sysfs_emit(buf, "%d\n", val);
} }
BTRFS_ATTR(devid, writeable, btrfs_devinfo_writeable_show); BTRFS_ATTR(devid, writeable, btrfs_devinfo_writeable_show);
...@@ -1549,14 +1544,14 @@ static ssize_t btrfs_devinfo_error_stats_show(struct kobject *kobj, ...@@ -1549,14 +1544,14 @@ static ssize_t btrfs_devinfo_error_stats_show(struct kobject *kobj,
devid_kobj); devid_kobj);
if (!device->dev_stats_valid) if (!device->dev_stats_valid)
return scnprintf(buf, PAGE_SIZE, "invalid\n"); return sysfs_emit(buf, "invalid\n");
/* /*
* Print all at once so we get a snapshot of all values from the same * Print all at once so we get a snapshot of all values from the same
* time. Keep them in sync and in order of definition of * time. Keep them in sync and in order of definition of
* btrfs_dev_stat_values. * btrfs_dev_stat_values.
*/ */
return scnprintf(buf, PAGE_SIZE, return sysfs_emit(buf,
"write_errs %d\n" "write_errs %d\n"
"read_errs %d\n" "read_errs %d\n"
"flush_errs %d\n" "flush_errs %d\n"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment