]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
bcache: Do bkey_put() in btree_split() error path
authorKent Overstreet <kmo@daterainc.com>
Tue, 17 Dec 2013 00:38:49 +0000 (16:38 -0800)
committerKent Overstreet <kmo@daterainc.com>
Wed, 8 Jan 2014 21:05:09 +0000 (13:05 -0800)
This error path shouldn't have been hit in practice.. and we've got reworked
reserve code coming soon so that it shouldn't _ever_ be bit... but if we've got
code for this error path it should be correct.

Signed-off-by: Kent Overstreet <kmo@daterainc.com>
drivers/md/bcache/btree.c

index 6a0f5faf0bed2ba0796999f53c5f845a023fe9fd..5a6b7522eb20cb695a01ff921fa2f73b7c41c44d 100644 (file)
@@ -2191,18 +2191,21 @@ static int btree_split(struct btree *b, struct btree_op *op,
 
        return 0;
 err_free2:
+       bkey_put(b->c, &n2->key);
        btree_node_free(n2);
        rw_unlock(true, n2);
 err_free1:
+       bkey_put(b->c, &n1->key);
        btree_node_free(n1);
        rw_unlock(true, n1);
 err:
+       WARN(1, "bcache: btree split failed");
+
        if (n3 == ERR_PTR(-EAGAIN) ||
            n2 == ERR_PTR(-EAGAIN) ||
            n1 == ERR_PTR(-EAGAIN))
                return -EAGAIN;
 
-       pr_warn("couldn't split");
        return -ENOMEM;
 }