Btrfs: double unlock bug in error handling
authorDan Carpenter <dan.carpenter@oracle.com>
Wed, 18 Apr 2012 06:59:03 +0000 (09:59 +0300)
committerDavid Sterba <dsterba@suse.cz>
Wed, 18 Apr 2012 17:22:31 +0000 (19:22 +0200)
The caller expects this function to return with the lock held and
releases it immediately on error.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
fs/btrfs/extent-tree.c

index 2b35f8d14bb9a14c7f1539268dce04973413512f..a0bb9dcd3c360438fbb292f79a36d6338d84c8da 100644 (file)
@@ -2301,6 +2301,7 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
 
                                if (ret) {
                                        printk(KERN_DEBUG "btrfs: run_delayed_extent_op returned %d\n", ret);
+                                       spin_lock(&delayed_refs->lock);
                                        return ret;
                                }
 
@@ -2331,6 +2332,7 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
 
                if (ret) {
                        printk(KERN_DEBUG "btrfs: run_one_delayed_ref returned %d\n", ret);
+                       spin_lock(&delayed_refs->lock);
                        return ret;
                }