Hi Ryusuke,
On Tue, 2013-07-23 at 03:24 +0900, Ryusuke Konishi wrote:
[snip]
>
> Thank you for following the issue. I reviewed the code around bio.
>
> In conclusion, Dan Carpenter's patch looks correct because
> nilfs_segbuf_submit_bio() does not increment the number of flying bio
> (segbuf->sb_nbio) for EOPNOTSUPP/BIO_EOPNOTSUPP case.
>
I worry that nilfs_end_bio_write() is called asynchronously. And, as I
understand, the BIO_EOPNOTSUPP flag is set during nilfs_end_bio_write()
call. It means for me that sometimes segbuf->sb_nbio will be not
incremented in nilfs_segbuf_submit_bio() but sometimes this field can be
incremented and for BIO_EOPNOTSUPP case.
> If nilfs_end_bio_write() function reaches the complete() call for the
> EOPNOTSUPP/BIO_EOPNOTSUPP case (as the current implementation), the
> number of complete() calls and that of wait_for_complete() will not
> balance.
>
I think that it is dangerous to return without complete() call because
of asynchronous nature of nilfs_end_bio_write() call.
What do you think?
With the best regards,
Vyacheslav Dubeyko.
> Do you have a comment?
>
> Regards,
> 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-fsdevel" in
> > the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html