On 18.08.2014 20:36, Milan Broz wrote: > 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: [] clone_endio+0x13/0xe0 [dm_mod] > ... > > [] bio_endio+0x61/0x90 > [] crypt_dec_pending+0x8c/0xd0 [dm_crypt] > [] kcryptd_crypt+0x4bf/0x4f0 [dm_crypt] > > This patch fixes the issue by aligning per-bio alocated structure size. > > Reported-by: Krzysztof Kolasa > Signed-off-by: Milan Broz > --- > 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) { patch tested positive for x86 ( no oops ) and x86_64 ( continues to work OK ). thanks