diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-01-23 08:10:44 -0800 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-01-23 08:10:44 -0800 |
commit | 55df811f2066fcaec2548248f0a1a6a0c12dc6b8 (patch) | |
tree | 0850f490489e5b941692f3fe36dff5d2c1c35c3c /drivers/md/persistent-data/dm-array.c | |
parent | 8e2f2325b73f3e5e46ecffd291556f33b8e3f8c9 (diff) | |
parent | 497ab1f290a26fa9414c5c316515f1e2ddba0803 (diff) |
Merge branch 'next' into for-linus
First round of input updates for 3.14.
Diffstat (limited to 'drivers/md/persistent-data/dm-array.c')
-rw-r--r-- | drivers/md/persistent-data/dm-array.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/md/persistent-data/dm-array.c b/drivers/md/persistent-data/dm-array.c index af96e24ec328..1d75b1dc1e2e 100644 --- a/drivers/md/persistent-data/dm-array.c +++ b/drivers/md/persistent-data/dm-array.c @@ -317,8 +317,16 @@ static int shadow_ablock(struct dm_array_info *info, dm_block_t *root, * The shadow op will often be a noop. Only insert if it really * copied data. */ - if (dm_block_location(*block) != b) + if (dm_block_location(*block) != b) { + /* + * dm_tm_shadow_block will have already decremented the old + * block, but it is still referenced by the btree. We + * increment to stop the insert decrementing it below zero + * when overwriting the old value. + */ + dm_tm_inc(info->btree_info.tm, b); r = insert_ablock(info, index, *block, root); + } return r; } |