Re: [PATCH v4 12/17] xfs: Factor out xfs_attr_rmtval_invalidate

Allison Collins
2019-11-09T00:10:52Z

On 11/8/19 2:19 PM, Darrick J. Wong wrote:
> On Wed, Nov 06, 2019 at 06:27:56PM -0700, Allison Collins wrote:
>> Because new delayed attribute routines cannot roll
>> transactions, we carve off the parts of
>> xfs_attr_rmtval_remove that we can use. This will help to
>> reduce repetitive code later when we introduce delayed
>> attributes.
>
> Looks good.
> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
>
> --D
Ok, thank you!

Allison

>
>
>> Signed-off-by: Allison Collins <allison.henderson@oracle.com>
>> Reviewed-by: Brian Foster <bfoster@redhat.com>
>> ---
>> fs/xfs/libxfs/xfs_attr_remote.c | 30 +++++++++++++++++++++---------
>> fs/xfs/libxfs/xfs_attr_remote.h | 1 +
>> 2 files changed, 22 insertions(+), 9 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c
>> index db51388..1544138 100644
>> --- a/fs/xfs/libxfs/xfs_attr_remote.c
>> +++ b/fs/xfs/libxfs/xfs_attr_remote.c
>> @@ -588,21 +588,14 @@ xfs_attr_rmtval_set_value(
>> return 0;
>> }
>>
>> -/*
>> - * Remove the value associated with an attribute by deleting the
>> - * out-of-line buffer that it is stored on.
>> - */
>> int
>> -xfs_attr_rmtval_remove(
>> +xfs_attr_rmtval_invalidate(
>> struct xfs_da_args *args)
>> {
>> struct xfs_mount *mp = args->dp->i_mount;
>> xfs_dablk_t lblkno;
>> int blkcnt;
>> int error;
>> - int done;
>> -
>> - trace_xfs_attr_rmtval_remove(args);
>>
>> /*
>> * Roll through the "value", invalidating the attribute value's blocks.
>> @@ -644,13 +637,32 @@ xfs_attr_rmtval_remove(
>> lblkno += map.br_blockcount;
>> blkcnt -= map.br_blockcount;
>> }
>> + return 0;
>> +}
>>
>> +/*
>> + * Remove the value associated with an attribute by deleting the
>> + * out-of-line buffer that it is stored on.
>> + */
>> +int
>> +xfs_attr_rmtval_remove(
>> + struct xfs_da_args *args)
>> +{
>> + xfs_dablk_t lblkno;
>> + int blkcnt;
>> + int error = 0;
>> + int done = 0;
>> +
>> + trace_xfs_attr_rmtval_remove(args);
>> +
>> + error = xfs_attr_rmtval_invalidate(args);
>> + if (error)
>> + return error;
>> /*
>> * Keep de-allocating extents until the remote-value region is gone.
>> */
>> lblkno = args->rmtblkno;
>> blkcnt = args->rmtblkcnt;
>> - done = 0;
>> while (!done) {
>> error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt,
>> XFS_BMAPI_ATTRFORK, 1, &done);
>> diff --git a/fs/xfs/libxfs/xfs_attr_remote.h b/fs/xfs/libxfs/xfs_attr_remote.h
>> index cd7670d..b6fd35a 100644
>> --- a/fs/xfs/libxfs/xfs_attr_remote.h
>> +++ b/fs/xfs/libxfs/xfs_attr_remote.h
>> @@ -11,6 +11,7 @@ int xfs_attr3_rmt_blocks(struct xfs_mount *mp, int attrlen);
>> int xfs_attr_rmtval_get(struct xfs_da_args *args);
>> int xfs_attr_rmtval_set(struct xfs_da_args *args);
>> int xfs_attr_rmtval_remove(struct xfs_da_args *args);
>> +int xfs_attr_rmtval_invalidate(struct xfs_da_args *args);
>> int xfs_attr_rmtval_set_value(struct xfs_da_args *args);
>> int xfs_attr_rmt_find_hole(struct xfs_da_args *args);
>> #endif /* __XFS_ATTR_REMOTE_H__ */
>> --
>> 2.7.4
>>