FAILED: patch "[PATCH] dm log writes: fix bug with too large bios" failed to apply to 4.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.4-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;