Hi Vyacheslav,
On Mon, 22 Jul 2013 12:02:14 +0400, Vyacheslav Dubeyko wrote:
> From: Vyacheslav Dubeyko <[email protected]>
> Subject: [PATCH] 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 <[email protected]>
> Signed-off-by: Vyacheslav Dubeyko <[email protected]>
> CC: Ryusuke Konishi <[email protected]>
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.
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.
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