- Fix DM integrity and verity targets to not use excessive stack when
they recheck in the error path. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEJfWUX4UqZ4x1O2wixSPxCi2dA1oFAmXaEswACgkQxSPxCi2d A1oT2Qf/c1opgjRUe+yY/v7nWf4paufSj2O4LYAy/qQBU7IS9CcXQPzi/pKlfEo8 60OZfa5gfrCAla79se7hHI/mxReq7CI5nFvYDyqQ1JZQ/djG/4cN/oWf5fQ12pon /ET1IzaZ+Mom+5wDBeQBLoQwXTA1ru5Bi1OiUe9Ed3wzadZQQks5s65fPnc0emGJ ClyaXiiCt4Dy36E5GmuPpmPB4ZJ57SwcnFWDFIeCHEbIQk36APkZ22z7lqGObjw2 ANO1l59k6ojzmaXLi9pw/J/o/qyfNR0MpeI7SpmtJzhSZKeGKsUX2GlJ9QBhViJp XL/+7MbSRJ43IY1lomoHZm1vxe0aPg== =sQPX -----END PGP SIGNATURE----- Merge tag 'for-6.8/dm-fix-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm Pull device mapper fix from Mike Snitzer: - Fix DM integrity and verity targets to not use excessive stack when they recheck in the error path. * tag 'for-6.8/dm-fix-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm-integrity, dm-verity: reduce stack usage for recheck
This commit is contained in:
commit
f2e367d6ad
@ -1691,14 +1691,13 @@ failed:
|
||||
get_random_bytes(result, ic->tag_size);
|
||||
}
|
||||
|
||||
static void integrity_recheck(struct dm_integrity_io *dio)
|
||||
static noinline void integrity_recheck(struct dm_integrity_io *dio, char *checksum)
|
||||
{
|
||||
struct bio *bio = dm_bio_from_per_bio_data(dio, sizeof(struct dm_integrity_io));
|
||||
struct dm_integrity_c *ic = dio->ic;
|
||||
struct bvec_iter iter;
|
||||
struct bio_vec bv;
|
||||
sector_t sector, logical_sector, area, offset;
|
||||
char checksum_onstack[max_t(size_t, HASH_MAX_DIGESTSIZE, MAX_TAG_SIZE)];
|
||||
struct page *page;
|
||||
void *buffer;
|
||||
|
||||
@ -1734,9 +1733,8 @@ static void integrity_recheck(struct dm_integrity_io *dio)
|
||||
goto free_ret;
|
||||
}
|
||||
|
||||
integrity_sector_checksum(ic, logical_sector, buffer,
|
||||
checksum_onstack);
|
||||
r = dm_integrity_rw_tag(ic, checksum_onstack, &dio->metadata_block,
|
||||
integrity_sector_checksum(ic, logical_sector, buffer, checksum);
|
||||
r = dm_integrity_rw_tag(ic, checksum, &dio->metadata_block,
|
||||
&dio->metadata_offset, ic->tag_size, TAG_CMP);
|
||||
if (r) {
|
||||
if (r > 0) {
|
||||
@ -1851,7 +1849,7 @@ again:
|
||||
checksums_ptr - checksums, dio->op == REQ_OP_READ ? TAG_CMP : TAG_WRITE);
|
||||
if (unlikely(r)) {
|
||||
if (r > 0) {
|
||||
integrity_recheck(dio);
|
||||
integrity_recheck(dio, checksums);
|
||||
goto skip_io;
|
||||
}
|
||||
if (likely(checksums != checksums_onstack))
|
||||
|
@ -491,8 +491,8 @@ static int verity_recheck_copy(struct dm_verity *v, struct dm_verity_io *io,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verity_recheck(struct dm_verity *v, struct dm_verity_io *io,
|
||||
struct bvec_iter start, sector_t cur_block)
|
||||
static noinline int verity_recheck(struct dm_verity *v, struct dm_verity_io *io,
|
||||
struct bvec_iter start, sector_t cur_block)
|
||||
{
|
||||
struct page *page;
|
||||
void *buffer;
|
||||
|
Loading…
Reference in New Issue
Block a user