aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/loop.c')
-rw-r--r--drivers/block/loop.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index de3083b0a4f5..6c48b3545f84 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -479,17 +479,17 @@ static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
479 pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset; 479 pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset;
480 480
481 if (bio_rw(bio) == WRITE) { 481 if (bio_rw(bio) == WRITE) {
482 bool barrier = !!(bio->bi_rw & REQ_HARDBARRIER);
483 struct file *file = lo->lo_backing_file; 482 struct file *file = lo->lo_backing_file;
484 483
485 if (barrier) { 484 /* REQ_HARDBARRIER is deprecated */
486 if (unlikely(!file->f_op->fsync)) { 485 if (bio->bi_rw & REQ_HARDBARRIER) {
487 ret = -EOPNOTSUPP; 486 ret = -EOPNOTSUPP;
488 goto out; 487 goto out;
489 } 488 }
490 489
490 if (bio->bi_rw & REQ_FLUSH) {
491 ret = vfs_fsync(file, 0); 491 ret = vfs_fsync(file, 0);
492 if (unlikely(ret)) { 492 if (unlikely(ret && ret != -EINVAL)) {
493 ret = -EIO; 493 ret = -EIO;
494 goto out; 494 goto out;
495 } 495 }
@@ -497,9 +497,9 @@ static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
497 497
498 ret = lo_send(lo, bio, pos); 498 ret = lo_send(lo, bio, pos);
499 499
500 if (barrier && !ret) { 500 if ((bio->bi_rw & REQ_FUA) && !ret) {
501 ret = vfs_fsync(file, 0); 501 ret = vfs_fsync(file, 0);
502 if (unlikely(ret)) 502 if (unlikely(ret && ret != -EINVAL))
503 ret = -EIO; 503 ret = -EIO;
504 } 504 }
505 } else 505 } else
@@ -931,7 +931,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
931 lo->lo_queue->unplug_fn = loop_unplug; 931 lo->lo_queue->unplug_fn = loop_unplug;
932 932
933 if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync) 933 if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
934 blk_queue_ordered(lo->lo_queue, QUEUE_ORDERED_DRAIN); 934 blk_queue_flush(lo->lo_queue, REQ_FLUSH);
935 935
936 set_capacity(lo->lo_disk, size); 936 set_capacity(lo->lo_disk, size);
937 bd_set_size(bdev, size << 9); 937 bd_set_size(bdev, size << 9);