linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nikolay Borisov <nborisov@suse.com>
To: Qu Wenruo <quwenruo.btrfs@gmx.com>,
	Chris Murphy <lists@colorremedies.com>,
	Btrfs BTRFS <linux-btrfs@vger.kernel.org>
Subject: Re: confusing behavior when supers mismatch
Date: Mon, 11 Mar 2019 14:37:00 +0200	[thread overview]
Message-ID: <8d1f2baf-e889-e4e5-6f48-c93890ecd3c4@suse.com> (raw)
In-Reply-To: <a79900be-5fc9-4c1d-18da-f4aa9fdda8ab@gmx.com>



On 11.03.19 г. 14:35 ч., Qu Wenruo wrote:
> 
> 
> On 2019/3/11 下午8:26, Nikolay Borisov wrote:
>>
>>
>> On 11.03.19 г. 3:17 ч., Qu Wenruo wrote:
>>>
>>>
>>> On 2019/3/11 上午7:09, Chris Murphy wrote:
>>>> In the case where superblock 0 at 65536 is valid but stale (older than
>>>> the others):
>>>
>>> Then this means either the fs is fuzzed, or the FUA implementation of
>>> the disk is completely screwed up.
>>>
>>> Btrfs kernel submit super blocks as the following sequence:
>>> 1) wait all metadata write
>>> 2) flush
>>> 3) FUA the primary superblock
>>
>> SATA devices generally do not have FUA support. For example my evo 850
>> ssds do not support it nor does my evo 860 PRO. IMO not having
>> functioning FUA seems to be the norm rather than an exception.
> 
> Kernel block layer will translate FUA to write + flush.

Where exactly does this happen?

> So in that case we will do:
> 
> 1) wait all metadata write
> 2) flush
> 3) write first sb, flush
> 4) write backup sb
> 
> For FUA -> write + flush, it's less atomic than native FUA, but it
> should be good enough for pseudo-atomic.
> 
> Thanks,
> Qu
> 
>>
>>
>>> 4) write the backup superblocks
>>>
>>> If backup is newer than primary, then the FUA write doesn't reach disk
>>> before normal write.
>>> This means any fs could be corrupted on that disk, not only btrfs.
>>>
>>>>
>>>> 1. btrfs check doesn't complain, the stale super is used for the check
>>>> 2. when mounting, super 0 is used, no complaints at mount time, fairly
>>>> quickly the newer supers are overwritten
>>>
>>> The reason why kernel doesn't search backup roots is to avoid stale btrfs.
>>> For case like mkfs.btrfs -> do btrfs write -> mkfs.xfs -> try mount as
>>> btrfs again, this would cause problems.
>>>
>>> So IMHO always use the primary superblock is the designed behavior.
>>>
>>> Thanks,
>>> Qu
>>>
>>>>
>>>> Is this expected? In particular, in lieu of `btrfs rescue super`
>>>> behavior which considers super 0 a bad super, and offers to fix it
>>>> from the newer ones, and when I answer y, it replaces super 0 with
>>>> newer information from the other supers.
>>>>
>>>> I think the `btrfs rescue` behavior is correct. I would expect that
>>>> all the supers are read at mount time, and if there's discrepancy that
>>>> either there's code to suspiciously sanity check the latest roots in
>>>> the newest super, or it flat out fails to mount. Mounting based on
>>>> stale super data seems risky doesn't it?
>>>>
>>>
> 

  reply	other threads:[~2019-03-11 12:37 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-10 23:09 confusing behavior when supers mismatch Chris Murphy
2019-03-10 23:18 ` Chris Murphy
2019-03-11  1:17 ` Qu Wenruo
2019-03-11  3:20   ` Chris Murphy
2019-03-11  4:58     ` Qu Wenruo
2019-03-11  5:19       ` Chris Murphy
2019-03-11 12:26   ` Nikolay Borisov
2019-03-11 12:35     ` Qu Wenruo
2019-03-11 12:37       ` Nikolay Borisov [this message]
2019-03-11 13:27         ` Qu Wenruo
2019-03-11 14:38 ` Anand Jain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8d1f2baf-e889-e4e5-6f48-c93890ecd3c4@suse.com \
    --to=nborisov@suse.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=lists@colorremedies.com \
    --cc=quwenruo.btrfs@gmx.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).