Re: [PATCH v22 04/16] xfs: Return from xfs_attr_set_iter if there are no more rmtblks to process

Darrick J. Wong
2021-07-27T23:30:23Z

On Mon, Jul 26, 2021 at 11:20:41PM -0700, Allison Henderson wrote:
> During an attr rename operation, blocks are saved for later removal
> as rmtblkno2. The rmtblkno is used in the case of needing to alloc
> more blocks if not enough were available. However, in the case
> that neither rmtblkno or rmtblkno2 are set, we can return as soon
> as xfs_attr_node_addname completes, rather than rolling the transaction
> with an -EAGAIN return. This extra loop does not hurt anything right
> now, but it will be a problem later when we get into log items because
> we end up with an empty log transaction. So, add a simple check to
> cut out the unneeded iteration.
>
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>

Looks good,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> ---
> fs/xfs/libxfs/xfs_attr.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> index d9d7d51..5040fc1 100644
> --- a/fs/xfs/libxfs/xfs_attr.c
> +++ b/fs/xfs/libxfs/xfs_attr.c
> @@ -409,6 +409,13 @@ xfs_attr_set_iter(
> if (error)
> return error;
>
> + /*
> + * If addname was successful, and we dont need to alloc
> + * or remove anymore blks, we're done.
> + */
> + if (!args->rmtblkno && !args->rmtblkno2)
> + return 0;
> +
> dac->dela_state = XFS_DAS_FOUND_NBLK;
> }
> return -EAGAIN;
> --
> 2.7.4
>