Commit 8b8e0cc0 authored by Allison Collins's avatar Allison Collins Committed by Darrick J. Wong

xfs: Refactor xfs_attr_rmtval_remove

Refactor xfs_attr_rmtval_remove to add helper function
__xfs_attr_rmtval_remove. We will use this later when we introduce
delayed attributes.  This function will eventually replace
xfs_attr_rmtval_remove
Signed-off-by: default avatarAllison Collins <allison.henderson@oracle.com>
Reviewed-by: default avatarChandan Rajendra <chandanrlinux@gmail.com>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Acked-by: default avatarDave Chinner <dchinner@redhat.com>
parent 1fc618d7
...@@ -678,10 +678,8 @@ int ...@@ -678,10 +678,8 @@ int
xfs_attr_rmtval_remove( xfs_attr_rmtval_remove(
struct xfs_da_args *args) struct xfs_da_args *args)
{ {
xfs_dablk_t lblkno; int error;
int blkcnt; int retval;
int error = 0;
int done = 0;
trace_xfs_attr_rmtval_remove(args); trace_xfs_attr_rmtval_remove(args);
...@@ -691,16 +689,10 @@ xfs_attr_rmtval_remove( ...@@ -691,16 +689,10 @@ xfs_attr_rmtval_remove(
/* /*
* Keep de-allocating extents until the remote-value region is gone. * Keep de-allocating extents until the remote-value region is gone.
*/ */
lblkno = args->rmtblkno; do {
blkcnt = args->rmtblkcnt; retval = __xfs_attr_rmtval_remove(args);
while (!done) { if (retval && retval != -EAGAIN)
error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, return retval;
XFS_BMAPI_ATTRFORK, 1, &done);
if (error)
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
/* /*
* Close out trans and start the next one in the chain. * Close out trans and start the next one in the chain.
...@@ -708,6 +700,36 @@ xfs_attr_rmtval_remove( ...@@ -708,6 +700,36 @@ xfs_attr_rmtval_remove(
error = xfs_trans_roll_inode(&args->trans, args->dp); error = xfs_trans_roll_inode(&args->trans, args->dp);
if (error) if (error)
return error; return error;
} } while (retval == -EAGAIN);
return 0; return 0;
} }
/*
* Remove the value associated with an attribute by deleting the out-of-line
* buffer that it is stored on. Returns EAGAIN for the caller to refresh the
* transaction and re-call the function
*/
int
__xfs_attr_rmtval_remove(
struct xfs_da_args *args)
{
int error, done;
/*
* Unmap value blocks for this attr.
*/
error = xfs_bunmapi(args->trans, args->dp, args->rmtblkno,
args->rmtblkcnt, XFS_BMAPI_ATTRFORK, 1, &done);
if (error)
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
if (!done)
return -EAGAIN;
return error;
}
...@@ -14,4 +14,5 @@ int xfs_attr_rmtval_remove(struct xfs_da_args *args); ...@@ -14,4 +14,5 @@ int xfs_attr_rmtval_remove(struct xfs_da_args *args);
int xfs_attr_rmtval_stale(struct xfs_inode *ip, struct xfs_bmbt_irec *map, int xfs_attr_rmtval_stale(struct xfs_inode *ip, struct xfs_bmbt_irec *map,
xfs_buf_flags_t incore_flags); xfs_buf_flags_t incore_flags);
int xfs_attr_rmtval_invalidate(struct xfs_da_args *args); int xfs_attr_rmtval_invalidate(struct xfs_da_args *args);
int __xfs_attr_rmtval_remove(struct xfs_da_args *args);
#endif /* __XFS_ATTR_REMOTE_H__ */ #endif /* __XFS_ATTR_REMOTE_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment