From: Dave Chinner <david@fromorbit.com>
To: "Darrick J. Wong" <djwong@kernel.org>,
fstests <fstests@vger.kernel.org>,
linux-xfs@vger.kernel.org,
Ziyang Zhang <ZiyangZhang@linux.alibaba.com>
Subject: Re: [PATCH] common/populate: Ensure that S_IFDIR.FMT_BTREE is in btree format
Date: Thu, 8 Dec 2022 08:48:31 +1100 [thread overview]
Message-ID: <20221207214831.GI2703033@dread.disaster.area> (raw)
In-Reply-To: <Y4/2ZUIm2MKs6UID@B-P7TQMD6M-0146.local>
On Wed, Dec 07, 2022 at 10:11:49AM +0800, Gao Xiang wrote:
> On Wed, Dec 07, 2022 at 10:34:17AM +1100, Dave Chinner wrote:
> > On Fri, Dec 02, 2022 at 10:23:07AM +0800, Gao Xiang wrote:
> > > > > + [ "$nexts" -gt "$(((isize - 176) / 16))" ] && break
> > > >
> > > > Only need to calculate this once if you declare this at the top:
> > > >
> > > > # We need enough extents to guarantee that the data fork is in
> > > > # btree format. Cycling the mount to use xfs_db is too slow, so
> > > > # watch for when the extent count exceeds the space after the
> > > > # inode core.
> > > > local max_nextents="$(((isize - 176) / 16))"
> > > >
> > > > and then you can do:
> > > >
> > > > [[ $nexts -gt $max_nextents ]] && break
> > > >
> > > > Also not a fan of hardcoding 176 around fstests, but I don't know how
> > > > we'd detect that at all.
> > > >
> > > > # Number of bytes reserved for only the inode record, excluding the
> > > > # immediate fork areas.
> > > > _xfs_inode_core_bytes()
> > > > {
> > > > echo 176
> > > > }
> > > >
> > > > I guess? Or extract it from tests/xfs/122.out?
> > >
> > > Thanks for your comments.
> > >
> > > I guess hard-coded 176 in _xfs_inode_core_bytes() is fine for now
> > > (It seems a bit weird to extract a number from a test expected result..)
> >
> > Which is wrong when testing a v4 filesystem - in that case the inode
> > core size is 96 bytes and so max extents may be larger on v4
> > filesystems than v5 filesystems....
>
> Do we really care v4 fs for now since it's deprecated?...
Yes, there are still lots of v4 filesystems in production
environments. There shouldn't be many new ones, but there is a long
tail of existing storage containing v4 filesystems that we must not
break.
We have to support v4 filesystems for another few years yet, hence
we still need solid test coverage on them to ensure we don't
accidentally break something that is going to bite users before they
migrate to newer filesystems....
> Darrick once also
> suggested using (isize / 16) but it seems it could take unnecessary time to
> prepare.. Or we could just use (isize - 96) / 16 to keep v4 work.
It's taken me longer to write this email than it does to write the
code to make it work properly. e.g.:
xfs_info $scratch | sed -ne 's/.*crc=\([01]\).*/\1/p'
And now we have 0 = v4, 1 = v5, and it's trivial to return the
correct inode size.
You can even do this trivially with grep:
xfs_info $scratch | grep -wq "crc=1"
if [ $? -eq 0 ]; then
echo 176
else
echo 96
fi
and now the return value tells us if we have a v4 or v5 filesystem.
-Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2022-12-07 21:48 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-01 8:12 [PATCH] common/populate: Ensure that S_IFDIR.FMT_BTREE is in btree format Gao Xiang
2022-12-01 15:52 ` Darrick J. Wong
2022-12-02 2:23 ` Gao Xiang
2022-12-06 23:34 ` Dave Chinner
2022-12-07 2:11 ` Gao Xiang
2022-12-07 2:17 ` Darrick J. Wong
2022-12-07 21:48 ` Dave Chinner [this message]
2022-12-08 6:29 ` Ziyang Zhang
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=20221207214831.GI2703033@dread.disaster.area \
--to=david@fromorbit.com \
--cc=ZiyangZhang@linux.alibaba.com \
--cc=djwong@kernel.org \
--cc=fstests@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
/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