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

Commit cc66b451 authored by Jens Axboe's avatar Jens Axboe
Browse files

block: fix blkdev_issue_flush() not detecting and passing EOPNOTSUPP back



This is important to eg dm, that tries to decide whether to stop using
barriers or not.

Tested as working by Anders Henke <anders.henke@1und1.de>

Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 56d94a37
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -259,8 +259,11 @@ int blk_do_ordered(struct request_queue *q, struct request **rqp)

static void bio_end_empty_barrier(struct bio *bio, int err)
{
	if (err)
	if (err) {
		if (err == -EOPNOTSUPP)
			set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
		clear_bit(BIO_UPTODATE, &bio->bi_flags);
	}

	complete(bio->bi_private);
}
@@ -309,7 +312,9 @@ int blkdev_issue_flush(struct block_device *bdev, sector_t *error_sector)
		*error_sector = bio->bi_sector;

	ret = 0;
	if (!bio_flagged(bio, BIO_UPTODATE))
	if (bio_flagged(bio, BIO_EOPNOTSUPP))
		ret = -EOPNOTSUPP;
	else if (!bio_flagged(bio, BIO_UPTODATE))
		ret = -EIO;

	bio_put(bio);