Browse Source

dm btree remove: fix bug in remove_one()

remove_one() was not incrementing the key for the beginning of the
range, so not all entries were being removed.  This resulted in
discards that were not unmapping all blocks.

Fixes: 4ec331c3ea ("dm btree: add dm_btree_remove_leaves()")
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Joe Thornber 10 years ago
parent
commit
aa0cd28d05
1 changed files with 1 additions and 0 deletions
  1. 1 0
      drivers/md/persistent-data/dm-btree-remove.c

+ 1 - 0
drivers/md/persistent-data/dm-btree-remove.c

@@ -689,6 +689,7 @@ static int remove_one(struct dm_btree_info *info, dm_block_t root,
 					     value_ptr(n, index));
 					     value_ptr(n, index));
 
 
 		delete_at(n, index);
 		delete_at(n, index);
+		keys[last_level] = k + 1ull;
 
 
 	} else
 	} else
 		r = -ENODATA;
 		r = -ENODATA;