Re: [PATCH] Btrfs: disable FUA if mounted with nobarrier

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2017年12月06日 14:54, Omar Sandoval wrote:
> From: Omar Sandoval <osandov@xxxxxx>
> 
> I was seeing disk flushes still happening when I mounted a Btrfs
> filesystem with nobarrier for testing. This is because we use FUA to
> write out the first super block, and on devices without FUA support, the
> block layer translates FUA to a flush. Even on devices supporting true
> FUA, using FUA when we asked for no barriers is surprising.
> 
> Signed-off-by: Omar Sandoval <osandov@xxxxxx>

Reviewed-by: Qu Wenruo <wqu@xxxxxxxx>

Thanks,
Qu

> ---
>  fs/btrfs/disk-io.c | 12 +++++-------
>  1 file 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++;
>  	}
> 

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux