dm btree: fix a bug in dm_btree_find_next_single()
authorJoe Thornber <ejt@redhat.com>
Fri, 1 Jul 2016 10:09:13 +0000 (11:09 +0100)
committerMike Snitzer <snitzer@redhat.com>
Wed, 20 Jul 2016 16:43:34 +0000 (12:43 -0400)
commite7e0f730477dea190fbc18c2d93338dacee82cea
treea32f1e357ed773559a8db6a9cf8315c4ae78cbd5
parent89d3d9a1e38a6bd453038cfdc7e1576ef2d19719
dm btree: fix a bug in dm_btree_find_next_single()

dm_btree_find_next_single() can short-circuit the search for a block
with a return of -ENODATA if all entries are higher than the search key
passed to lower_bound().

This hasn't been a problem because of the way the btree has been used by
DM thinp.  But it must be fixed now in preparation for fixing the race
in DM thinp's handling of simultaneous block discard vs allocation.
Otherwise, once that fix is in place, some of the blocks in a discard
would not be unmapped as expected.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/persistent-data/dm-btree.c