Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbbf0556 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: fix DISCARD_BARRIER requests



Filesystems assume that DISCARD_BARRIER are full barriers, so that they
don't have to track in-progress discard operation when submitting new I/O.
But currently we only treat them as elevator barriers, which don't
actually do the nessecary queue drains.

Also remove the unlikely around both the DISCARD and BARRIER requests -
the happen far too often for a static mispredict.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent 79600aad
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1149,13 +1149,10 @@ void init_request_from_bio(struct request *req, struct bio *bio)
	else
		req->cmd_flags |= bio->bi_rw & REQ_FAILFAST_MASK;

	if (unlikely(bio_rw_flagged(bio, BIO_RW_DISCARD))) {
	if (bio_rw_flagged(bio, BIO_RW_DISCARD))
		req->cmd_flags |= REQ_DISCARD;
	if (bio_rw_flagged(bio, BIO_RW_BARRIER))
			req->cmd_flags |= REQ_SOFTBARRIER;
	} else if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER)))
		req->cmd_flags |= REQ_HARDBARRIER;

	if (bio_rw_flagged(bio, BIO_RW_SYNCIO))
		req->cmd_flags |= REQ_RW_SYNC;
	if (bio_rw_flagged(bio, BIO_RW_META))