From: nborisov <nborisov@suse.de>
To: Qu Wenruo <quwenruo.btrfs@gmx.com>
Cc: Rich Rauenzahn <rich@shroop.net>,
Rich Rauenzahn <rrauenza@gmail.com>,
Btrfs BTRFS <linux-btrfs@vger.kernel.org>
Subject: Re: WARNING: CPU: 3 PID: 439 at fs/btrfs/ctree.h:1559 btrfs_update_device+0x1c5/0x1d0 [btrfs]
Date: Wed, 20 Sep 2017 16:14:53 +0200 [thread overview]
Message-ID: <2e940d95b1e00ebb2a873b89760ec236@suse.de> (raw)
In-Reply-To: <c0be1b97-43d1-1ebb-f745-b7308e6a9eba@gmx.com>
On 2017-09-20 08:23, Qu Wenruo wrote:
> On 2017年09月20日 14:11, nborisov wrote:
>> On 2017-09-20 07:39, Qu Wenruo wrote:
>>> On 2017年09月20日 13:10, Qu Wenruo wrote:
>>>>
>>>>
>>>> On 2017年09月20日 12:59, Qu Wenruo wrote:
>>>>>
>>>>>
>>>>> On 2017年09月20日 12:49, Rich Rauenzahn wrote:
>>>>>>
>>>>>>
>>>>>> On 9/19/2017 5:31 PM, Qu Wenruo wrote:
>>>>>>> On 2017年09月19日 23:56, Rich Rauenzahn wrote:
>>>>>>>> [ 4.747377] WARNING: CPU: 3 PID: 439 at fs/btrfs/ctree.h:1559
>>>>>>>> btrfs_update_device+0x1c5/0x1d0 [btrfs]
>>>>>>>
>>>>>>> Is that line the following WARN_ON()?
>>>>>>> ---
>>>>>>> static inline void btrfs_set_device_total_bytes(struct
>>>>>>> extent_buffer *eb,
>>>>>>> struct btrfs_dev_item *s,
>>>>>>> u64 val)
>>>>>>> {
>>>>>>> BUILD_BUG_ON(sizeof(u64) !=
>>>>>>> sizeof(((struct btrfs_dev_item *)0))->total_bytes);
>>>>>>> WARN_ON(!IS_ALIGNED(val, eb->fs_info->sectorsize)); <<<
>>>>>>> btrfs_set_64(eb, s, offsetof(struct btrfs_dev_item,
>>>>>>> total_bytes), val);
>>>>>>> }
>>>>>>> ---
>>>>>>>
>>>>>>> If so, that means your devices size is not aligned to 4K.
>>>>>>>
>>>>>>> Is your block device still using old 512 block size?
>>>>>>> AFAIK nowadays most HDDs are using 4K blocksize and it's
>>>>>>> recommended to use it.
>>>>>>>
>>>>>>> It's not a big problem and one can easily remove the WARN_ON().
>>>>>>> But I think we'd better fix the caller to do round_down() before
>>>>>>> calling this function.
>>>>>>>
>>>>>>
>>>>>> That's interesting! I believe I made an effort to align them when
>>>>>> I set it up years ago, but never knew how to verify.
>>>>>
>>>>> Well, best verifying if that's the line causing the warning, since
>>>>> I don't have the source of RedHat kernel.
>>>>>
>>>>>>
>>>>>> I have three mirrored filesystems:
>>>>>>
>>>> [snip]
>>>>>>
>>>>>> Number Start (sector) End (sector) Size Code Name
>>>>>> 1 40 3907029134 1.8 TiB 8300 BTRFS
>>>>>> MEDIA
>>>>>> GPT fdisk (gdisk) version 0.8.6
>>>>>
>>>>> At least this size is not aligned to 4K.
>>>>>
>>>>>>
>>>>>> Partition table scan:
>>>> [snip]
>>>>>>
>>>>>> .....and one is aligned differently!
>>>>>>
>>>>>> Could it be /dev/sdd that's the issue? But it's aligned at 4096
>>>>>> -- so I'm not sure that's the issue after all.
>>>>>
>>>>> Its start sector is aligned, but end point is not, so the size is
>>>>> not aligned either.
>>>>>
>>>>> BTW, is /dev/sdd added to btrfs using "btrfs device add"?
>>>>> In my test, if making btrfs on a unaligned file, it will round down
>>>>> to its sectorsize boundary.
>>>>
>>>> Confirmed that "btrfs device add" won't round down the size.
>>>> Check the btrfs-debug-tree output:
>>>> ------
>>>> item 0 key (DEV_ITEMS DEV_ITEM 1) itemoff 16185 itemsize 98
>>>> devid 1 total_bytes 10737418240 bytes_used
>>>> 2172649472
>>>> io_align 4096 io_width 4096 sector_size 4096 type 0
>>>> generation 0 start_offset 0 dev_group 0
>>>> seek_speed 0 bandwidth 0
>>>> uuid 243a1117-ca31-4d87-8656-81c5630aafb2
>>>> fsid 6452cde7-14d5-4541-aa07-b265a400bad0
>>>> item 1 key (DEV_ITEMS DEV_ITEM 2) itemoff 16087 itemsize 98
>>>> devid 2 total_bytes 1073742336 bytes_used 0
>>>> io_align 4096 io_width 4096 sector_size 4096 type 0
>>>> generation 0 start_offset 0 dev_group 0
>>>> seek_speed 0 bandwidth 0
>>>> uuid 6bb07260-d230-4e22-88b1-1eabb46622ed
>>>> fsid 6452cde7-14d5-4541-aa07-b265a400bad0
>>>> ------
>>>
>>> Sorry, the output is from v4.12.x, so no kernel warning nor the patch
>>> rounding down the value.
>>>
>>>>
>>>> Where first device is completely aligned, the 2nd device which is
>>>> just 1G + 512, definitely not aligned.
>>>>
>>>> So if you're using single device purely created by mkfs.btrfs,
>>>> you're OK.
>>>> But if any new device added, you're not OK and causing the false
>>>> alert.
>>>>
>>>> Any way, it should not be hard to fix.
>>>> Just remove the WARN_ON() and add extra round_down when adding
>>>> device.
>>>
>>> In v4.13 kernel, the newly added devices are in fact rounded down.
>>> But existing device doesn't get the round down.
>>
>> We got a report internally at Suse of this problem and it prevented a
>> filesystem from being mounted due to the
>> following check failing:
>> http://elixir.free-electrons.com/linux/latest/source/fs/btrfs/volumes.c#L6893.
>> Hence I added the rounding down fixes. And this warning was put
>> specifically to catch future offenders and see
>> if I had missed a place to patch it. So removing the warning is the
>> wrong solution to the problem.
>
> Then at least only enable it for BTRFS_DEBUG.
No, the idea is that if a bug in the code causes such a "corruption" we
ought to be able to catch it in the first instance and not post factum.
If a bug in btrfs is introduced in a call path which invokes
btrfs_update_device with misaligned values we won't see which was the
culprit. If one then enables BTRFS_DEBUG and starts seeing the warnings
it will likely yield no useful information since the value will already
be corrupted.
>
> For end user it's just confusing.
>
> I have submitted a patch to do the check at mounting time, and warning
> user to do shrink to fix it.
> (Although still removed the WARN_ON)
>
> I think such warning breaks backward compatibility should be as gentle
> as possible for end users.
How exactly is it breaking backward compatibility?
>
> Thanks,
> Qu
>
>> Generally if
>> balancing kicked in had to resize his disk everything would be back to
>> normal. >
>>>
>>> So it's recommended to resize (shrink) your fs for very small size to
>>> fix it if you don't want to wait for the kernel fix.
>>>
>>> Thanks,
>>> Qu
>>>>
>>>> Thanks for the report,
>>>> Qu
>>>>
>>>>>
>>>>> So I'm wondering if it's caused by added new btrfs device.
>>>>>
>>>>> Thanks,
>>>>> Qu
>>>>>
>>>>>> -- To unsubscribe from this list: send the line "unsubscribe
>>>>>> linux-btrfs" in
>>>>>> the body of a message to majordomo@vger.kernel.org
>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>> -- To unsubscribe from this list: send the line "unsubscribe
>>>> linux-btrfs" in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> -- To unsubscribe from this list: send the line "unsubscribe
>>> linux-btrfs" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>> -- To unsubscribe from this list: send the line "unsubscribe
>> linux-btrfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-09-20 14:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-19 15:56 WARNING: CPU: 3 PID: 439 at fs/btrfs/ctree.h:1559 btrfs_update_device+0x1c5/0x1d0 [btrfs] Rich Rauenzahn
2017-09-20 0:31 ` Qu Wenruo
2017-09-20 4:49 ` Rich Rauenzahn
2017-09-20 4:59 ` Qu Wenruo
2017-09-20 5:10 ` Qu Wenruo
2017-09-20 5:39 ` Qu Wenruo
2017-09-20 6:11 ` nborisov
2017-09-20 6:23 ` Qu Wenruo
2017-09-20 14:14 ` nborisov [this message]
2017-09-20 14:42 ` Qu Wenruo
2017-09-20 16:53 ` Rich Rauenzahn
2017-09-20 16:58 ` Rich Rauenzahn
2017-09-20 18:10 ` Rich Rauenzahn
2017-09-20 23:19 ` Qu Wenruo
2019-08-28 14:21 ` Qu Wenruo
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=2e940d95b1e00ebb2a873b89760ec236@suse.de \
--to=nborisov@suse.de \
--cc=linux-btrfs@vger.kernel.org \
--cc=quwenruo.btrfs@gmx.com \
--cc=rich@shroop.net \
--cc=rrauenza@gmail.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).