dm space maps: don't reset space map allocation cursor when committing
authorJoe Thornber <ejt@redhat.com>
Tue, 13 Apr 2021 08:03:49 +0000 (09:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jul 2021 07:44:45 +0000 (09:44 +0200)
commit65e780667cf39f54154c6d95e40fd650bd0a31c5
tree667171cc3a43827c0b03feedd47de8ed71b316a2
parent313d9f25804c0024568f8863ec48f25a273e14c9
dm space maps: don't reset space map allocation cursor when committing

[ Upstream commit 5faafc77f7de69147d1e818026b9a0cbf036a7b2 ]

Current commit code resets the place where the search for free blocks
will begin back to the start of the metadata device.  There are a couple
of repercussions to this:

- The first allocation after the commit is likely to take longer than
  normal as it searches for a free block in an area that is likely to
  have very few free blocks (if any).

- Any free blocks it finds will have been recently freed.  Reusing them
  means we have fewer old copies of the metadata to aid recovery from
  hardware error.

Fix these issues by leaving the cursor alone, only resetting when the
search hits the end of the metadata device.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/md/persistent-data/dm-space-map-disk.c
drivers/md/persistent-data/dm-space-map-metadata.c