diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
| -rw-r--r-- | fs/btrfs/disk-io.c | 12 | 
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 10a2a579cc7f..a8ecccfc36de 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3231,6 +3231,7 @@ static int write_dev_supers(struct btrfs_device *device,  	int errors = 0;  	u32 crc;  	u64 bytenr; +	int op_flags;  	if (max_mirrors == 0)  		max_mirrors = BTRFS_SUPER_MIRROR_MAX; @@ -3273,13 +3274,10 @@ static int write_dev_supers(struct btrfs_device *device,  		 * we fua the first super.  The others we allow  		 * to go down lazy.  		 */ -		if (i == 0) { -			ret = btrfsic_submit_bh(REQ_OP_WRITE, -				REQ_SYNC | REQ_FUA | REQ_META | REQ_PRIO, bh); -		} else { -			ret = btrfsic_submit_bh(REQ_OP_WRITE, -				REQ_SYNC | REQ_META | REQ_PRIO, bh); -		} +		op_flags = REQ_SYNC | REQ_META | REQ_PRIO; +		if (i == 0 && !btrfs_test_opt(device->fs_info, NOBARRIER)) +			op_flags |= REQ_FUA; +		ret = btrfsic_submit_bh(REQ_OP_WRITE, op_flags, bh);  		if (ret)  			errors++;  	}  | 
