FAILED: patch "[PATCH] dm log writes: fix bug with too large bios" failed to apply to 4.7-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
7efb367320f56fc4d549875b6f3a6940018ef2e5Mon Sep 17 00:00:00 2001
From: Mikulas Patocka <[email protected]>
Date: Tue, 30 Aug 2016 16:20:55 -0400
Subject: [PATCH] dm log writes: fix bug with too large bios
bio_alloc() can allocate a bio with at most BIO_MAX_PAGES (256) vector entries. However, the incoming bio may have more vector entries if it was allocated by other means. For example, bcache submits bios with more than BIO_MAX_PAGES entries. This results in bio_alloc() failure.
To avoid the failure, change the code so that it allocates bio with at most BIO_MAX_PAGES entries. If the incoming bio has more entries, bio_add_page() will fail and a new bio will be allocated - the code that handles bio_add_page() failure already exists in the dm-log-writes target.
drivers/md/dm-log-writes.c +2 -2
@@ -260,7 +260,7 @@ static int log_one_block(struct log_writes_c *lc, sector++;atomic_inc (&lc->io_blocks); - bio =bio_alloc (GFP_KERNEL , block->vec_cnt); + bio =bio_alloc (GFP_KERNEL ,min (block->vec_cnt,BIO_MAX_PAGES ));if (!bio) {DMERR ("Couldn't alloc log bio" ); goto error;
@@ -282,7 +282,7 @@ static int log_one_block(struct log_writes_c *lc,if (ret != block->vecs[i].bv_len) {atomic_inc (&lc->io_blocks);submit_bio (bio); - bio =bio_alloc (GFP_KERNEL , block->vec_cnt - i); + bio =bio_alloc (GFP_KERNEL ,min (block->vec_cnt - i,BIO_MAX_PAGES ));if (!bio) {DMERR ("Couldn't alloc log bio" ); goto error;
Mikulas Patocka
maintainerPATCH 1/1 dm log writes: fix bug with too large bios
Hi
This is backport of the upstream patch 7efb367320f56fc4d549875b6f3a6940018ef2e5 for the stable kernels.
Quoted 48 lines · On Thu, 22 Sep 2016, [email protected] wrote:
The patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
7efb367320f56fc4d549875b6f3a6940018ef2e5Mon Sep 17 00:00:00 2001From: Mikulas Patocka <[email protected]>
Date: Tue, 30 Aug 2016 16:20:55 -0400
Subject: [PATCH] dm log writes: fix bug with too large bios
bio_alloc()can allocate a bio with at mostBIO_MAX_PAGES(256) vector entries. However, the incoming bio may have more vector entries if it was allocated by other means. For example, bcache submits bios with more thanBIO_MAX_PAGESentries. This results inbio_alloc()failure.To avoid the failure, change the code so that it allocates bio with at most
BIO_MAX_PAGESentries. If the incoming bio has more entries,bio_add_page()will fail and a new bio will be allocated - the code that handlesbio_add_page()failure already exists in the dm-log-writes target.Signed-off-by Mikulas Patocka <[email protected]>Reviewed-by Josef Bacik <jbacik@fb,com>Signed-off-by Mike Snitzer <[email protected]>Cc [email protected] # v4.1+drivers/md/dm-log-writes.c +1
-1@@ -260,7 +260,7 @@ static int log_one_block(struct log_writes_c *lc, sector++;atomic_inc (&lc->io_blocks); - bio =bio_alloc (GFP_KERNEL , block->vec_cnt); + bio =bio_alloc (GFP_KERNEL ,min (block->vec_cnt,BIO_MAX_PAGES ));if (!bio) {DMERR ("Couldn't alloc log bio" ); goto error;
drivers/md/dm-log-writes.c static int log_one_block(struct log_writes_c *lc, · line 288
Quoted 8 lines
drivers/md/dm-log-writes.c +1
-1@@ -282,7 +282,7 @@ static int log_one_block(struct log_writes_c *lc,if (ret != block->vecs[i].bv_len) {atomic_inc (&lc->io_blocks);submit_bio (bio); - bio =bio_alloc (GFP_KERNEL , block->vec_cnt - i); + bio =bio_alloc (GFP_KERNEL ,min (block->vec_cnt - i,BIO_MAX_PAGES ));if (!bio) {DMERR ("Couldn't alloc log bio" ); goto error;
commit 7efb367320f56fc4d549875b6f3a6940018ef2e5
Author: Mikulas Patocka <[email protected]> Date: Tue Aug 30 16:20:55 2016 -0400
dm log writes: fix bug with too large bios
bio_alloc() can allocate a bio with at most BIO_MAX_PAGES (256) vector entries. However, the incoming bio may have more vector entries if it was allocated by other means. For example, bcache submits bios with more than BIO_MAX_PAGES entries. This results in bio_alloc() failure.
To avoid the failure, change the code so that it allocates bio with at most BIO_MAX_PAGES entries. If the incoming bio has more entries, bio_add_page() will fail and a new bio will be allocated - the code that handles bio_add_page() failure already exists in the dm-log-writes target.
drivers/md/dm-log-writes.c +2 -2
@@ -260,7 +260,7 @@ static int log_one_block(struct log_writes_c *lc, sector++;atomic_inc (&lc->io_blocks); - bio =bio_alloc (GFP_KERNEL , block->vec_cnt); + bio =bio_alloc (GFP_KERNEL ,min (block->vec_cnt,BIO_MAX_PAGES ));if (!bio) {DMERR ("Couldn't alloc log bio" ); goto error;
@@ -282,7 +282,7 @@ static int log_one_block(struct log_writes_c *lc,if (ret != block->vecs[i].bv_len) {atomic_inc (&lc->io_blocks);submit_bio (WRITE , bio); - bio =bio_alloc (GFP_KERNEL , block->vec_cnt - i); + bio =bio_alloc (GFP_KERNEL ,min (block->vec_cnt - i,BIO_MAX_PAGES ));if (!bio) {DMERR ("Couldn't alloc log bio" ); goto error;
Greg KH
maintainerRe: [PATCH] dm log writes: fix bug with too large bios
Quoted 4 lines · Mikulas Patocka
Hi
This is backport of the upstream patch
7efb367320f56fc4d549875b6f3a6940018ef2e5for the stable kernels.
Thanks, now queued up.
greg k-h