[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <71088008-c105-4eb9-9199-882091eafe07@gmx.com>
Date: Mon, 23 Sep 2024 16:58:34 +0930
From: Qu Wenruo <quwenruo.btrfs@....com>
To: Johannes Thumshirn <jth@...nel.org>, Chris Mason <clm@...com>,
Josef Bacik <josef@...icpanda.com>, David Sterba <dsterba@...e.com>,
"open list:BTRFS FILE SYSTEM" <linux-btrfs@...r.kernel.org>,
open list <linux-kernel@...r.kernel.org>
Cc: Qu Wenruo <wqu@...e.com>, Naohiro Aota <naohiro.aota@....com>,
Johannes Thumshirn <johannes.thumshirn@....com>
Subject: Re: [PATCH] btrfs: also add stripe entries for NOCOW writes
在 2024/9/23 16:15, Johannes Thumshirn 写道:
> From: Johannes Thumshirn <johannes.thumshirn@....com>
>
> NOCOW writes do not generate stripe_extent entries in the RAID stripe
> tree, as the RAID stripe-tree feature initially was designed with a
> zoned filesystem in mind and on a zoned filesystem, we do not allow NOCOW
> writes. But the RAID stripe-tree feature is independent from the zoned
> feature, so we must also allow NOCOW writes for zoned filesystems.
>
> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@....com>
Sorry I'm going to repeat myself again, I still believe if we insert an
RST entry at falloc() time, it will be more consistent with the non-RST
code.
Yes, I known preallocated space will not need any read nor search RST
entry, and we just fill the page cache with zero at read time.
But the point of proper (not just dummy) RST entry for the whole
preallocated space is, we do not need to touch the RST entry anymore for
NOCOW/PREALLOCATED write at all.
This makes the RST NOCOW/PREALLOC writes behavior to align with the
non-RST code, which doesn't update any extent item, but only modify the
file extent for PREALLOC writes.
Thanks,
Qu
> ---
> fs/btrfs/inode.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index edac499fd83d..c6e4b58c334c 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -3111,6 +3111,11 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
> ret = btrfs_update_inode_fallback(trans, inode);
> if (ret) /* -ENOMEM or corruption */
> btrfs_abort_transaction(trans, ret);
> +
> + ret = btrfs_insert_raid_extent(trans, ordered_extent);
> + if (ret)
> + btrfs_abort_transaction(trans, ret);
> +
> goto out;
> }
>
Powered by blists - more mailing lists