Btrfs: Keep fs_mutex during reads done by snapshot deletion
authorChris Mason <chris.mason@oracle.com>
Tue, 1 Apr 2008 15:26:07 +0000 (11:26 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:01 +0000 (11:04 -0400)
There was an optimization to drop the fs_mutex when doing snapshot deletion
reads, but this can lead to false positives on checksumming errors.  Keep
the lock for now.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c

index c226656..cf283b0 100644 (file)
@@ -2046,11 +2046,12 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans,
                if (!next || !btrfs_buffer_uptodate(next)) {
                        free_extent_buffer(next);
                        reada_walk_down(root, cur, path->slots[*level]);
-                       mutex_unlock(&root->fs_info->fs_mutex);
                        next = read_tree_block(root, bytenr, blocksize);
-                       mutex_lock(&root->fs_info->fs_mutex);
 
-                       /* we dropped the lock, check one more time */
+                       /* we used to drop the lock above, keep the
+                        * code to double check so that we won't forget
+                        * when we drop the lock again in the future
+                        */
                        ret = lookup_extent_ref(trans, root, bytenr,
                                                blocksize, &refs);
                        BUG_ON(ret);