Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Feb 2022 13:39:51 +0200
From:      Andriy Gapon <avg@FreeBSD.org>
To:        freebsd-stable List <stable@FreeBSD.org>, freebsd-fs <fs@FreeBSD.org>, "freebsd-geom@FreeBSD.org" <geom@freebsd.org>
Subject:   Re: fsck -C -p: NO WRITE ACCESS
Message-ID:  <c75ee147-1b48-5ff8-4593-21a05a5e70ee@FreeBSD.org>
In-Reply-To: <20220218020821.GK97875@funkthat.com>
References:  <346d021f-b737-f41a-883f-e821389c4431@FreeBSD.org> <20220214231758.GD97875@funkthat.com> <5eac56d0-51fb-5e23-0d2a-3c6b6bf163d0@FreeBSD.org> <20220218020821.GK97875@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 18/02/2022 04:08, John-Mark Gurney wrote:
> Andriy Gapon wrote this message on Tue, Feb 15, 2022 at 08:44 +0200:
>> On 15/02/2022 01:17, John-Mark Gurney wrote:
>>> Andriy Gapon wrote this message on Mon, Feb 07, 2022 at 14:15 +0200:
>>>> I've got a problem where fsck behaves differently from my expectations.
>>>> The problem happens with a filesystem on a GELI encrypted ZVOL.
>>>> The volume has 4K block size and that's the GELI's sector size as well.
>>>> FreeBSD is stable/13 from mid January.
>>>
>>> Did you put a ffs filesystem that was formatted on a 512 byte sector disk
>>> onto this geli device?
>>
>> As far as I can recall, no.  I created it with newsfs on the geli device.
> 
> Looks like it's a bug in newfs, as I just reproduced this myself:
> fsbtodb           int32_t          0x00000003
> 
> and manually specifying a sector size of 4096 to newfs does not fix the
> issue.
> 
> This is the issue:
> https://cgit.freebsd.org/src/blame/sbin/newfs/newfs.c#n399
> 
> It changes the sectorsize back down to 512 from whatever it should
> be, which means that the calculation in mkfs.c becomes off.  I'd file
> a bug report and get someone who knows FFS to look at it.  I tried to
> change mkfs.c to use realsectorsize isntead, so fsbtodb is set to 0, but
> then it break ffsinfo, because it's calculations are likely wrong.

Thank you very much for looking into this.
I'll try to draw Kirk's attention to this issue (he is also in this thread, but 
a different sub-thread).

>>> fsck calculates the sector size via (/sbin/fsck_ffs/setup.c):
>>> 	dev_bsize = sblock.fs_fsize / fsbtodb(&sblock, 1);
>>>
>>> and fsbtodb:
>>> ../../sys/ufs/ffs/fs.h:#define	fsbtodb(fs, b)	((daddr_t)(b) << (fs)->fs_fsbtodb)
>>>
>>>> fsize   4096    shift   12      mask    0xfffff000
>>>> frag    8       shift   3       fsbtodb 3
>>>
>>> fsize / (1 << 3) == 4096 / 8 == 512.
>>>
>>> so, likely updating fsbtodb to be 0 instead of 3 would fix this.  I'm not
>>> sure how to do this though, as tunefs and fsdb don't seem to have options
>>> to do this, and likely you'll want to update all the superblocks w/ this
>>> new value.
> 


-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?c75ee147-1b48-5ff8-4593-21a05a5e70ee>