diff options
author | Kent Overstreet <kmo@daterainc.com> | 2013-12-16 19:38:49 -0500 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2014-01-08 16:05:09 -0500 |
commit | 5f5837d2d650db25b9153b91535e67a96b265f58 (patch) | |
tree | 48afdf71783484950632a95972cad6e9608332c7 /drivers/md/bcache | |
parent | 78365411b344df35a198b119133e6515c2dcfb9f (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.c | 5 |
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; |
2193 | err_free2: | 2193 | err_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); |
2196 | err_free1: | 2197 | err_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); |
2199 | err: | 2201 | err: |
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 | ||