From: Chandan Babu R <chandan.babu@oracle.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Chandan Babu R <chandanrlinux@gmail.com>,
linux-xfs <linux-xfs@vger.kernel.org>,
"Darrick J . Wong" <darrick.wong@oracle.com>,
"Darrick J. Wong" <djwong@kernel.org>,
Christoph Hellwig <hch@lst.de>,
Allison Henderson <allison.henderson@oracle.com>,
"Luis R. Rodriguez" <mcgrof@kernel.org>,
Theodore Tso <tytso@mit.edu>
Subject: Re: [PATCH V14 00/16] Bail out if transaction can cause extent count to overflow
Date: Mon, 23 May 2022 21:20:09 +0530 [thread overview]
Message-ID: <878rqs2pg9.fsf@debian-BULLSEYE-live-builder-AMD64> (raw)
In-Reply-To: <CAOQ4uxi8eNVCjqeSeVFRgrYC00gjdbuPyV4B2WPN0DmqjrfyFg@mail.gmail.com>
On Mon, May 23, 2022 at 02:15:44 PM +0300, Amir Goldstein wrote:
> On Sun, Jan 10, 2021 at 6:10 PM Chandan Babu R <chandanrlinux@gmail.com> wrote:
>>
>> XFS does not check for possible overflow of per-inode extent counter
>> fields when adding extents to either data or attr fork.
>>
>> For e.g.
>> 1. Insert 5 million xattrs (each having a value size of 255 bytes) and
>> then delete 50% of them in an alternating manner.
>>
>> 2. On a 4k block sized XFS filesystem instance, the above causes 98511
>> extents to be created in the attr fork of the inode.
>>
>> xfsaild/loop0 2008 [003] 1475.127209: probe:xfs_inode_to_disk: (ffffffffa43fb6b0) if_nextents=98511 i_ino=131
>>
>> 3. The incore inode fork extent counter is a signed 32-bit
>> quantity. However, the on-disk extent counter is an unsigned 16-bit
>> quantity and hence cannot hold 98511 extents.
>>
>> 4. The following incorrect value is stored in the xattr extent counter,
>> # xfs_db -f -c 'inode 131' -c 'print core.naextents' /dev/loop0
>> core.naextents = -32561
>>
>> This patchset adds a new helper function
>> (i.e. xfs_iext_count_may_overflow()) to check for overflow of the
>> per-inode data and xattr extent counters and invokes it before
>> starting an fs operation (e.g. creating a new directory entry). With
>> this patchset applied, XFS detects counter overflows and returns with
>> an error rather than causing a silent corruption.
>>
>> The patchset has been tested by executing xfstests with the following
>> mkfs.xfs options,
>> 1. -m crc=0 -b size=1k
>> 2. -m crc=0 -b size=4k
>> 3. -m crc=0 -b size=512
>> 4. -m rmapbt=1,reflink=1 -b size=1k
>> 5. -m rmapbt=1,reflink=1 -b size=4k
>>
>> The patches can also be obtained from
>> https://github.com/chandanr/linux.git at branch xfs-reserve-extent-count-v14.
>>
>> I have two patches that define the newly introduced error injection
>> tags in xfsprogs
>> (https://lore.kernel.org/linux-xfs/20201104114900.172147-1-chandanrlinux@gmail.com/).
>>
>> I have also written tests
>> (https://github.com/chandanr/xfstests/commits/extent-overflow-tests)
>> for verifying the checks introduced in the kernel.
>>
>
> Hi Chandan and XFS folks,
>
> As you may have heard, I am working on producing a series of
> xfs patches for stable v5.10.y.
>
> My patch selection is documented at [1].
> I am in the process of testing the backport patches against the 5.10.y
> baseline using Luis' kdevops [2] fstests runner.
>
> The configurations that we are testing are:
> 1. -m rmbat=0,reflink=1 -b size=4k (default)
> 2. -m crc=0 -b size=4k
> 3. -m crc=0 -b size=512
> 4. -m rmapbt=1,reflink=1 -b size=1k
> 5. -m rmapbt=1,reflink=1 -b size=4k
>
> This patch set is the only largish series that I selected, because:
> - It applies cleanly to 5.10.y
> - I evaluated it as low risk and high value
> - Chandan has written good regression tests
>
> I intend to post the rest of the individual selected patches
> for review in small batches after they pass the tests, but w.r.t this
> patch set -
>
> Does anyone object to including it in the stable kernel
> after it passes the tests?
>
Hi Amir,
The following three commits will have to be skipped from the series,
1. 02092a2f034fdeabab524ae39c2de86ba9ffa15a
xfs: Check for extent overflow when renaming dir entries
2. 0dbc5cb1a91cc8c44b1c75429f5b9351837114fd
xfs: Check for extent overflow when removing dir entries
3. f5d92749191402c50e32ac83dd9da3b910f5680f
xfs: Check for extent overflow when adding dir entries
The maximum size of a directory data fork is ~96GiB. This is much smaller than
what can be accommodated by the existing data fork extent counter (i.e. 2^31
extents).
Also the corresponding test (i.e. xfs/533) has been removed from
fstests. Please refer to
https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/commit/?id=9ae10c882550c48868e7c0baff889bb1a7c7c8e9
--
chandan
next prev parent reply other threads:[~2022-05-23 16:18 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-10 16:07 [PATCH V14 00/16] Bail out if transaction can cause extent count to overflow Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 01/16] xfs: Add helper for checking per-inode extent count overflow Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 02/16] xfs: Check for extent overflow when trivally adding a new extent Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 03/16] xfs: Check for extent overflow when punching a hole Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 04/16] xfs: Check for extent overflow when adding dir entries Chandan Babu R
2021-01-12 1:34 ` Darrick J. Wong
2021-01-10 16:07 ` [PATCH V14 05/16] xfs: Check for extent overflow when removing " Chandan Babu R
2021-01-12 1:38 ` Darrick J. Wong
2021-01-10 16:07 ` [PATCH V14 06/16] xfs: Check for extent overflow when renaming " Chandan Babu R
2021-01-12 1:37 ` Darrick J. Wong
2021-01-10 16:07 ` [PATCH V14 07/16] xfs: Check for extent overflow when adding/removing xattrs Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 08/16] xfs: Check for extent overflow when writing to unwritten extent Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 09/16] xfs: Check for extent overflow when moving extent from cow to data fork Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 10/16] xfs: Check for extent overflow when remapping an extent Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 11/16] xfs: Check for extent overflow when swapping extents Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 12/16] xfs: Introduce error injection to reduce maximum inode fork extent count Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 13/16] xfs: Remove duplicate assert statement in xfs_bmap_btalloc() Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 14/16] xfs: Compute bmap extent alignments in a separate function Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 15/16] xfs: Process allocated extent " Chandan Babu R
2021-01-10 16:07 ` [PATCH V14 16/16] xfs: Introduce error injection to allocate only minlen size extents for files Chandan Babu R
2022-05-23 11:15 ` [PATCH V14 00/16] Bail out if transaction can cause extent count to overflow Amir Goldstein
2022-05-23 15:50 ` Chandan Babu R [this message]
2022-05-23 19:06 ` Amir Goldstein
2022-05-25 5:49 ` Amir Goldstein
2022-05-23 22:43 ` Dave Chinner
2022-05-24 5:36 ` Amir Goldstein
2022-05-24 16:05 ` Amir Goldstein
2022-05-25 8:21 ` Dave Chinner
2022-05-25 7:33 ` Dave Chinner
2022-05-25 7:48 ` Amir Goldstein
2022-05-25 8:38 ` Dave Chinner
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=878rqs2pg9.fsf@debian-BULLSEYE-live-builder-AMD64 \
--to=chandan.babu@oracle.com \
--cc=allison.henderson@oracle.com \
--cc=amir73il@gmail.com \
--cc=chandanrlinux@gmail.com \
--cc=darrick.wong@oracle.com \
--cc=djwong@kernel.org \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
--cc=mcgrof@kernel.org \
--cc=tytso@mit.edu \
/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