]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/btrfs/extent_io.c
Merge branch 'for-2.6.38' of git://linux-nfs.org/~bfields/linux
[mv-sheeva.git] / fs / btrfs / extent_io.c
index 0418bf2c9757f08f15fe897652ee59d2d2534e88..92ac5192c518be5d59de00b1cb5b66c29e1e9cd2 100644 (file)
@@ -2822,9 +2822,17 @@ int try_release_extent_state(struct extent_map_tree *map,
                 * at this point we can safely clear everything except the
                 * locked bit and the nodatasum bit
                 */
-               clear_extent_bit(tree, start, end,
+               ret = clear_extent_bit(tree, start, end,
                                 ~(EXTENT_LOCKED | EXTENT_NODATASUM),
                                 0, 0, NULL, mask);
+
+               /* if clear_extent_bit failed for enomem reasons,
+                * we can't allow the release to continue.
+                */
+               if (ret < 0)
+                       ret = 0;
+               else
+                       ret = 1;
        }
        return ret;
 }
@@ -3084,7 +3092,6 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
        eb->len = len;
        spin_lock_init(&eb->lock);
        init_waitqueue_head(&eb->lock_wq);
-       INIT_RCU_HEAD(&eb->rcu_head);
 
 #if LEAK_DEBUG
        spin_lock_irqsave(&leak_lock, flags);