|
@@ -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++;
|
|
|
}
|