diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
| -rw-r--r-- | fs/btrfs/disk-io.c | 14 | 
1 files changed, 13 insertions, 1 deletions
| diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 59c3be8c1f4c..514ead6e93b6 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3978,11 +3978,23 @@ static void btrfs_end_empty_barrier(struct bio *bio)   */  static void write_dev_flush(struct btrfs_device *device)  { -	struct request_queue *q = bdev_get_queue(device->bdev);  	struct bio *bio = device->flush_bio; +#ifndef CONFIG_BTRFS_FS_CHECK_INTEGRITY +	/* +	 * When a disk has write caching disabled, we skip submission of a bio +	 * with flush and sync requests before writing the superblock, since +	 * it's not needed. However when the integrity checker is enabled, this +	 * results in reports that there are metadata blocks referred by a +	 * superblock that were not properly flushed. So don't skip the bio +	 * submission only when the integrity checker is enabled for the sake +	 * of simplicity, since this is a debug tool and not meant for use in +	 * non-debug builds. +	 */ +	struct request_queue *q = bdev_get_queue(device->bdev);  	if (!test_bit(QUEUE_FLAG_WC, &q->queue_flags))  		return; +#endif  	bio_reset(bio);  	bio->bi_end_io = btrfs_end_empty_barrier; |