nilfs2: fix issue with counting number of bio requests for BIO_EOPNOTSUPP error detection
Subsystems (3)
Vyacheslav Dubeyko
maintainerPATCH v3 2/2 nilfs2: fix issue with counting number of bio requests for BIO_EOPNOTSUPP error detection
From: Vyacheslav Dubeyko <[email protected]>
Subject: [PATCH v3 2/2] nilfs2: fix issue with counting number of bio requests for BIO_EOPNOTSUPP error detection
This patch fixes the issue with improper counting number of flying bio requests for BIO_EOPNOTSUPP error detection case.
The sb_nbio must be incremented exactly the same number of times as complete() function was called (or will be called) because nilfs_segbuf_wait() will call wail_for_completion() for the number of times set to sb_nbio:
do {
wait_for_completion(&segbuf->sb_bio_event);
} while (--segbuf->sb_nbio > 0);Two functions complete() and wait_for_completion() must be called the same number of times for the same sb_bio_event. Otherwise, wait_for_completion() will hang or leak.
--- fs/nilfs2/segbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/nilfs2/segbuf.c +1 -1
@@ -376,12 +376,12 @@ static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf, bio->bi_private = segbuf;bio_get (bio);submit_bio (mode, bio); + segbuf->sb_nbio++;if (bio_flagged (bio,BIO_EOPNOTSUPP )) {bio_put (bio); err = -EOPNOTSUPP ; goto failed; } - segbuf->sb_nbio++;bio_put (bio); wi->bio =NULL ;
Signature · 1 line
1.7.9.5
Quoted 15 lines · Vyacheslav Dubeyko
From: Vyacheslav Dubeyko <[email protected]>
Subject: [PATCH v3 2/2] nilfs2: fix issue with counting number of bio requests forBIO_EOPNOTSUPPerror detectionThis patch fixes the issue with improper counting number of flying bio requests for
BIO_EOPNOTSUPPerror detection case.The
sb_nbiomust be incremented exactly the same number of times ascomplete()function was called (or will be called) becausenilfs_segbuf_wait()will callwail_for_completion()for the number of times set tosb_nbio:do { wait_for_completion(&segbuf->sb_bio_event); } while (--segbuf->sb_nbio > 0);
Quoted 6 lines
Two functions
complete()andwait_for_completion()must be called the same number of times for the samesb_bio_event. Otherwise,wait_for_completion()will hang or leak.Signed-off-by Vyacheslav Dubeyko <[email protected]>CC Ryusuke Konishi <[email protected]>
I confirmed that this fixes the leak of wait_for_completion() for the BIO_EOPNOTSUPP error detection case.
Andrew, please send this upstream along with the companion patch titled "nilfs2: remove double bio_put() in nilfs_end_bio_write() for BIO_EOPNOTSUPP error".
Thanks,
Ryusuke Konishi
Quoted 32 lines
CC Dan Carpenter <[email protected]>--- fs/nilfs2/segbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/nilfs2/segbuf.c +1
-1@@ -376,12 +376,12 @@ static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf, bio->bi_private = segbuf;bio_get (bio);submit_bio (mode, bio); + segbuf->sb_nbio++;if (bio_flagged (bio,BIO_EOPNOTSUPP )) {bio_put (bio); err = -EOPNOTSUPP ; goto failed; } - segbuf->sb_nbio++;bio_put (bio); wi->bio =NULL ;Signature · 8 lines
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