On Tue, 13 Aug 2013 17:50:33 +0400, Vyacheslav Dubeyko wrote: > From: Vyacheslav Dubeyko <slava@xxxxxxxxxxx> > 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 <dan.carpenter@xxxxxxxxxx> > Signed-off-by: Vyacheslav Dubeyko <slava@xxxxxxxxxxx> > CC: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx> Acked-by: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx> Tested-by: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx> 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 > --- > 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@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html