btrfs: send: remove BUG_ON from name_cache_delete
authorDavid Sterba <dsterba@suse.cz>
Mon, 3 Feb 2014 18:24:40 +0000 (19:24 +0100)
committerJosef Bacik <jbacik@fb.com>
Mon, 10 Mar 2014 19:15:48 +0000 (15:15 -0400)
If cleaning the name cache fails, we could try to proceed at the cost of
some memory leak. This is not expected to happen often.

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Josef Bacik <jbacik@fb.com>
fs/btrfs/send.c

index d3ed9df77422dfb64d2cc0a23d6739f0f69d001c..bef7ba638dee9409b2dcc28fcc26a3d0ce8dd10b 100644 (file)
@@ -1890,13 +1890,20 @@ static void name_cache_delete(struct send_ctx *sctx,
 
        nce_head = radix_tree_lookup(&sctx->name_cache,
                        (unsigned long)nce->ino);
-       BUG_ON(!nce_head);
+       if (!nce_head) {
+               btrfs_err(sctx->send_root->fs_info,
+             "name_cache_delete lookup failed ino %llu cache size %d, leaking memory",
+                       nce->ino, sctx->name_cache_size);
+       }
 
        list_del(&nce->radix_list);
        list_del(&nce->list);
        sctx->name_cache_size--;
 
-       if (list_empty(nce_head)) {
+       /*
+        * We may not get to the final release of nce_head if the lookup fails
+        */
+       if (nce_head && list_empty(nce_head)) {
                radix_tree_delete(&sctx->name_cache, (unsigned long)nce->ino);
                kfree(nce_head);
        }