All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Javier Tia <javier@peridio.com>
Cc: Carlos Maiolino <cem@kernel.org>,
	Dave Chinner <dchinner@redhat.com>,
	Allison Henderson <allison.henderson@oracle.com>,
	Andrey Albershteyn <aalbersh@kernel.org>,
	linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	stable@vger.kernel.org
Subject: Re: [PATCH v2 5/6] xfs: initialise args->total for parent pointer updates
Date: Mon, 10 Aug 2026 11:08:02 -0700	[thread overview]
Message-ID: <20260810180802.GS3556460@frogsfrogsfrogs> (raw)
In-Reply-To: <20260810164312.960721-13-floss@jetm.me>

On Mon, Aug 10, 2026 at 10:43:18AM -0600, Javier Tia wrote:
> xfs_parent_da_args_init() builds an xfs_da_args from a zeroed
> xfs_parent_args (kmem_cache_zalloc), leaving args->total == 0.
> xfs_da_grow_inode_int() treats that field as a running block reservation
> and subtracts from it; because it is an xfs_extlen_t (uint32_t), the
> first attr-fork growth wraps it to ~0U.  That defeats the free-space
> check in xfs_alloc_space_available(), and when it coincides with an AG
> that has exactly zero available blocks the allocation is clamped to
> maxlen 0 and returns -ENOSPC, which xfs_defer_finish_noroll() escalates
> to a filesystem shutdown.
> 
> Set args->total the way the log recovery path does
> (xfs_attri_recover_work(), xfs_attr_item.c:706), in the add and replace
> paths that can grow the fork.  Removals and lookups never grow it, so
> they leave the field alone, matching that switch.
> 
> Fixes: b7c62d90c12c ("xfs: parent pointer attribute creation")
> Cc: <stable@vger.kernel.org> # v6.10
> Signed-off-by: Javier Tia <floss@jetm.me>

Much improved, thanks for the corrections.
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

(As a future note: please send new revisions of patchsets as a new
thread, not a continuation of the previous revision.)

--D

> ---
>  fs/xfs/libxfs/xfs_parent.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_parent.c b/fs/xfs/libxfs/xfs_parent.c
> index 3509cc4b2175..312f33086d53 100644
> --- a/fs/xfs/libxfs/xfs_parent.c
> +++ b/fs/xfs/libxfs/xfs_parent.c
> @@ -194,7 +194,7 @@ xfs_parent_addname(
>  	const struct xfs_name	*parent_name,
>  	struct xfs_inode	*child)
>  {
> -	int			error;
> +	int			error, local;
>  
>  	error = xfs_parent_iread_extents(tp, child);
>  	if (error)
> @@ -204,6 +204,10 @@ xfs_parent_addname(
>  	xfs_parent_da_args_init(&ppargs->args, tp, &ppargs->rec, child,
>  			child->i_ino, parent_name);
>  
> +	/* Growing the attr fork needs a real reservation in args->total. */
> +	ppargs->args.total = xfs_attr_calc_size(&ppargs->args, &local);
> +	ASSERT(local);
> +
>  	return xfs_attr_setname(&ppargs->args, 0);
>  }
>  
> @@ -240,7 +244,7 @@ xfs_parent_replacename(
>  	const struct xfs_name	*new_name,
>  	struct xfs_inode	*child)
>  {
> -	int			error;
> +	int			error, local;
>  
>  	error = xfs_parent_iread_extents(tp, child);
>  	if (error)
> @@ -250,6 +254,10 @@ xfs_parent_replacename(
>  	xfs_parent_da_args_init(&ppargs->args, tp, &ppargs->rec, child,
>  			child->i_ino, old_name);
>  
> +	/* Growing the attr fork needs a real reservation in args->total. */
> +	ppargs->args.total = xfs_attr_calc_size(&ppargs->args, &local);
> +	ASSERT(local);
> +
>  	xfs_inode_to_parent_rec(&ppargs->new_rec, new_dp);
>  
>  	ppargs->args.new_name = new_name->name;
> -- 
> Javier Tia
> 
> 

  reply	other threads:[~2026-08-10 18:08 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-08 23:40 [PATCH 0/5] xfs: fix filesystem shutdown from parent pointer reservation underflow Javier Tia
2026-08-08 23:40 ` [PATCH 1/5] xfs: initialise error in xfs_defer_finish_one() Javier Tia
2026-08-09 18:48   ` Darrick J. Wong
2026-08-08 23:40 ` [PATCH 2/5] xfs: give the deferred barrier op type a name Javier Tia
2026-08-09 18:49   ` Darrick J. Wong
2026-08-08 23:40 ` [PATCH 3/5] xfs: report the error that made deferred work shut down the fs Javier Tia
2026-08-08 23:40 ` [PATCH 4/5] xfs: correct the parent pointer space reservation comment Javier Tia
2026-08-09 18:55   ` Darrick J. Wong
2026-08-08 23:40 ` [PATCH 5/5] xfs: initialise args->total for parent pointer updates Javier Tia
2026-08-09 19:02   ` Darrick J. Wong
2026-08-10 16:43 ` [PATCH v2 0/6] xfs: fix filesystem shutdown from parent pointer reservation underflow Javier Tia
2026-08-10 16:43   ` [PATCH v2 1/6] xfs: initialise error in xfs_defer_finish_one() Javier Tia
2026-08-10 16:43   ` [PATCH v2 2/6] xfs: give the deferred barrier op type a name Javier Tia
2026-08-10 16:43   ` [PATCH v2 3/6] xfs: report the error that made deferred work shut down the fs Javier Tia
2026-08-10 18:47     ` Darrick J. Wong
2026-08-10 16:43   ` [PATCH v2 4/6] xfs: correct the parent pointer space reservation comment Javier Tia
2026-08-10 16:43   ` [PATCH v2 5/6] xfs: initialise args->total for parent pointer updates Javier Tia
2026-08-10 18:08     ` Darrick J. Wong [this message]
2026-08-10 18:39       ` Javier Tia
2026-08-10 18:47         ` Darrick J. Wong
2026-08-10 16:43   ` [PATCH v2 6/6] xfs: assert the reservation covers each da fork growth Javier Tia
2026-08-10 18:07     ` Darrick J. Wong

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=20260810180802.GS3556460@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=aalbersh@kernel.org \
    --cc=allison.henderson@oracle.com \
    --cc=cem@kernel.org \
    --cc=dchinner@redhat.com \
    --cc=javier@peridio.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=stable@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.