[dm-devel] [PATCH] dm-crypt: Fix per-bio data alignment
Milan Broz
gmazyland at gmail.com
Mon Aug 18 18:36:37 UTC 2014
The commit
298a9fa08a1577211d42a75e8fc073baef61e0d9
dm crypt: use per-bio data
causes OOPS on 32bit i686 architecture
BUG: unable to handle kernel paging request at 20000000
IP: [<e0fe2433>] clone_endio+0x13/0xe0 [dm_mod]
...
[<c1257b61>] bio_endio+0x61/0x90
[<e142476c>] crypt_dec_pending+0x8c/0xd0 [dm_crypt]
[<e142666f>] kcryptd_crypt+0x4bf/0x4f0 [dm_crypt]
This patch fixes the issue by aligning per-bio alocated structure size.
Reported-by: Krzysztof Kolasa <kkolasa at winsoft.pl>
Signed-off-by: Milan Broz <gmazyland at gmail.com>
---
drivers/md/dm-crypt.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 2785007..33f26a2 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -1735,9 +1735,10 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto bad;
}
- cc->per_bio_data_size = ti->per_bio_data_size =
- sizeof(struct dm_crypt_io) + cc->dmreq_start +
- sizeof(struct dm_crypt_request) + cc->iv_size;
+ cc->per_bio_data_size = ALIGN(sizeof(struct dm_crypt_io) + cc->dmreq_start +
+ sizeof(struct dm_crypt_request) + cc->iv_size,
+ ARCH_KMALLOC_MINALIGN);
+ ti->per_bio_data_size = cc->per_bio_data_size;
cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0);
if (!cc->page_pool) {
--
2.1.0
More information about the dm-devel
mailing list