Re: [PATCH v3 1/2] nilfs2: remove double bio_put() in nilfs_end_bio_write() for BIO_EOPNOTSUPP error
From: Ryusuke Konishi <hidden>
Date: 2013-08-13 16:51:48
Also in:
linux-fsdevel
On Tue, 13 Aug 2013 17:50:33 +0400, Vyacheslav Dubeyko wrote:
From: Vyacheslav Dubeyko <slava@dubeyko.com> Subject: [PATCH v3 1/2] nilfs2: remove double bio_put() in nilfs_end_bio_write() for BIO_EOPNOTSUPP error This patch removes double call of bio_put() in nilfs_end_bio_write() for the case of BIO_EOPNOTSUPP error detection. The issue was found by Dan Carpenter and he suggests first version of the fix too. Reported-by: Dan Carpenter <redacted> Signed-off-by: Vyacheslav Dubeyko <slava@dubeyko.com> CC: Ryusuke Konishi <redacted>
Acked-by: Ryusuke Konishi <redacted> Tested-by: Ryusuke Konishi <redacted> I tested this patch by inserting a pseudo EOPNOTSUPP error, and this actually fixed a crach "kernel BUG at fs/bio.c:498!" due to reference count underflow of bio_put() that nilfs_end_bio_write() induced. Andrew, please pick up this bug-fix preferably for this cycle. Thanks, Ryusuke Konishi
quoted hunk ↗ jump to hunk
--- fs/nilfs2/segbuf.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)diff --git a/fs/nilfs2/segbuf.c b/fs/nilfs2/segbuf.c index dc9a913..5bacf46 100644 --- a/fs/nilfs2/segbuf.c +++ b/fs/nilfs2/segbuf.c@@ -345,8 +345,7 @@ static void nilfs_end_bio_write(struct bio *bio, int err) if (err = -EOPNOTSUPP) { set_bit(BIO_EOPNOTSUPP, &bio->bi_flags); - bio_put(bio); - /* to be detected by submit_seg_bio() */ + /* to be detected by nilfs_segbuf_submit_bio() */ } if (!uptodate)-- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html