diff options
Diffstat (limited to 'fs/btrfs/sysfs.c')
-rw-r--r-- | fs/btrfs/sysfs.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index 539e7b5e3f86..4879656bda3c 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c | |||
@@ -120,6 +120,9 @@ static ssize_t btrfs_feature_attr_store(struct kobject *kobj, | |||
120 | if (!fs_info) | 120 | if (!fs_info) |
121 | return -EPERM; | 121 | return -EPERM; |
122 | 122 | ||
123 | if (fs_info->sb->s_flags & MS_RDONLY) | ||
124 | return -EROFS; | ||
125 | |||
123 | ret = kstrtoul(skip_spaces(buf), 0, &val); | 126 | ret = kstrtoul(skip_spaces(buf), 0, &val); |
124 | if (ret) | 127 | if (ret) |
125 | return ret; | 128 | return ret; |
@@ -364,7 +367,13 @@ static ssize_t btrfs_label_show(struct kobject *kobj, | |||
364 | { | 367 | { |
365 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); | 368 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); |
366 | char *label = fs_info->super_copy->label; | 369 | char *label = fs_info->super_copy->label; |
367 | return snprintf(buf, PAGE_SIZE, label[0] ? "%s\n" : "%s", label); | 370 | ssize_t ret; |
371 | |||
372 | spin_lock(&fs_info->super_lock); | ||
373 | ret = snprintf(buf, PAGE_SIZE, label[0] ? "%s\n" : "%s", label); | ||
374 | spin_unlock(&fs_info->super_lock); | ||
375 | |||
376 | return ret; | ||
368 | } | 377 | } |
369 | 378 | ||
370 | static ssize_t btrfs_label_store(struct kobject *kobj, | 379 | static ssize_t btrfs_label_store(struct kobject *kobj, |
@@ -374,6 +383,9 @@ static ssize_t btrfs_label_store(struct kobject *kobj, | |||
374 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); | 383 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); |
375 | size_t p_len; | 384 | size_t p_len; |
376 | 385 | ||
386 | if (!fs_info) | ||
387 | return -EPERM; | ||
388 | |||
377 | if (fs_info->sb->s_flags & MS_RDONLY) | 389 | if (fs_info->sb->s_flags & MS_RDONLY) |
378 | return -EROFS; | 390 | return -EROFS; |
379 | 391 | ||