aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/bcache
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2013-12-16 19:38:49 -0500
committerKent Overstreet <kmo@daterainc.com>2014-01-08 16:05:09 -0500
commit5f5837d2d650db25b9153b91535e67a96b265f58 (patch)
tree48afdf71783484950632a95972cad6e9608332c7 /drivers/md/bcache
parent78365411b344df35a198b119133e6515c2dcfb9f (diff)
bcache: Do bkey_put() in btree_split() error path
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>
Diffstat (limited to 'drivers/md/bcache')
-rw-r--r--drivers/md/bcache/btree.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 6a0f5faf0bed..5a6b7522eb20 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -2191,18 +2191,21 @@ static int btree_split(struct btree *b, struct btree_op *op,
2191 2191
2192 return 0; 2192 return 0;
2193err_free2: 2193err_free2:
2194 bkey_put(b->c, &n2->key);
2194 btree_node_free(n2); 2195 btree_node_free(n2);
2195 rw_unlock(true, n2); 2196 rw_unlock(true, n2);
2196err_free1: 2197err_free1:
2198 bkey_put(b->c, &n1->key);
2197 btree_node_free(n1); 2199 btree_node_free(n1);
2198 rw_unlock(true, n1); 2200 rw_unlock(true, n1);
2199err: 2201err:
2202 WARN(1, "bcache: btree split failed");
2203
2200 if (n3 == ERR_PTR(-EAGAIN) || 2204 if (n3 == ERR_PTR(-EAGAIN) ||
2201 n2 == ERR_PTR(-EAGAIN) || 2205 n2 == ERR_PTR(-EAGAIN) ||
2202 n1 == ERR_PTR(-EAGAIN)) 2206 n1 == ERR_PTR(-EAGAIN))
2203 return -EAGAIN; 2207 return -EAGAIN;
2204 2208
2205 pr_warn("couldn't split");
2206 return -ENOMEM; 2209 return -ENOMEM;
2207} 2210}
2208 2211