btrfs: move commit out of sysfs when changing label
authorDavid Sterba <dsterba@suse.cz>
Fri, 30 May 2014 17:29:05 +0000 (19:29 +0200)
committerDavid Sterba <dsterba@suse.cz>
Wed, 12 Nov 2014 15:53:15 +0000 (16:53 +0100)
Signed-off-by: David Sterba <dsterba@suse.cz>
fs/btrfs/sysfs.c

index 226f7261533a4471b456847556e7e856d93192f1..92db3f648df40cc5d1fe3428a89348efffe45776 100644 (file)
@@ -369,9 +369,6 @@ static ssize_t btrfs_label_store(struct kobject *kobj,
                                 const char *buf, size_t len)
 {
        struct btrfs_fs_info *fs_info = to_fs_info(kobj);
-       struct btrfs_trans_handle *trans;
-       struct btrfs_root *root = fs_info->fs_root;
-       int ret;
        size_t p_len;
 
        if (fs_info->sb->s_flags & MS_RDONLY)
@@ -386,20 +383,18 @@ static ssize_t btrfs_label_store(struct kobject *kobj,
        if (p_len >= BTRFS_LABEL_SIZE)
                return -EINVAL;
 
-       trans = btrfs_start_transaction(root, 0);
-       if (IS_ERR(trans))
-               return PTR_ERR(trans);
-
-       spin_lock(&root->fs_info->super_lock);
+       spin_lock(&fs_info->super_lock);
        memset(fs_info->super_copy->label, 0, BTRFS_LABEL_SIZE);
        memcpy(fs_info->super_copy->label, buf, p_len);
-       spin_unlock(&root->fs_info->super_lock);
-       ret = btrfs_commit_transaction(trans, root);
+       spin_unlock(&fs_info->super_lock);
 
-       if (!ret)
-               return len;
+       /*
+        * We don't want to do full transaction commit from inside sysfs
+        */
+       btrfs_set_pending(fs_info, COMMIT);
+       wake_up_process(fs_info->transaction_kthread);
 
-       return ret;
+       return len;
 }
 BTRFS_ATTR_RW(label, btrfs_label_show, btrfs_label_store);
 
This page took 0.027004 seconds and 5 git commands to generate.