]> git.itanic.dy.fi Git - linux-stable/commit
dm-integrity: align the outgoing bio in integrity_recheck
authorMikulas Patocka <mpatocka@redhat.com>
Thu, 21 Mar 2024 16:48:45 +0000 (17:48 +0100)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:17:39 +0000 (18:17 -0400)
commit0766231db9091d972dffd52a37f9a8fe72f382c2
treee73348f2bea28e5bd915e8b475b28472cd89ee2f
parent3d02f57794b56f8a04a21fdfb04f20a1c9f712a7
dm-integrity: align the outgoing bio in integrity_recheck

[ Upstream commit b4d78cfeb30476239cf08f4f40afc095c173d6e3 ]

It is possible to set up dm-integrity with smaller sector size than
the logical sector size of the underlying device. In this situation,
dm-integrity guarantees that the outgoing bios have the same alignment as
incoming bios (so, if you create a filesystem with 4k block size,
dm-integrity would send 4k-aligned bios to the underlying device).

This guarantee was broken when integrity_recheck was implemented.
integrity_recheck sends bio that is aligned to ic->sectors_per_block. So
if we set up integrity with 512-byte sector size on a device with logical
block size 4k, we would be sending unaligned bio. This triggered a bug in
one of our internal tests.

This commit fixes it by determining the actual alignment of the
incoming bio and then makes sure that the outgoing bio in
integrity_recheck has the same alignment.

Fixes: c88f5e553fe3 ("dm-integrity: recheck the integrity tag after a failure")
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/md/dm-integrity.c