diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h index 3bf1f45740..0a7c985d8a 100644 --- a/include/linux/blkdev_compat.h +++ b/include/linux/blkdev_compat.h @@ -338,6 +338,20 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags) # define vdev_bdev_block_size(bdev) bdev_hardsect_size(bdev) #endif +/* + * 2.6.37 API change + * The WRITE_FLUSH, WRITE_FUA, and WRITE_FLUSH_FUA flags have been + * introduced as a replacement for WRITE_BARRIER. This was done to + * allow richer semantics to be expressed to the block layer. It is + * the block layers responsibility to choose the correct way to + * implement these semantics. + */ +#ifdef WRITE_FLUSH_FUA +# define VDEV_WRITE_FLUSH_FUA WRITE_FLUSH_FUA +#else +# define VDEV_WRITE_FLUSH_FUA WRITE_BARRIER +#endif + /* * Default Linux IO Scheduler, * Setting the scheduler to noop will allow the Linux IO scheduler to diff --git a/module/zfs/vdev_disk.c b/module/zfs/vdev_disk.c index 4145dec4ae..28a4861abd 100644 --- a/module/zfs/vdev_disk.c +++ b/module/zfs/vdev_disk.c @@ -559,7 +559,7 @@ vdev_disk_io_flush(struct block_device *bdev, zio_t *zio) bio->bi_private = zio; bio->bi_bdev = bdev; zio->io_delay = jiffies_64; - submit_bio(WRITE_BARRIER, bio); + submit_bio(VDEV_WRITE_FLUSH_FUA, bio); return 0; }