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

xfs: Factor out xfs_attr_rmtval_invalidate

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.
Signed-off-by: default avatarAllison Collins <allison.henderson@oracle.com>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChandan Rajendra <chandanrlinux@gmail.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Acked-by: default avatarDave Chinner <dchinner@redhat.com>
parent 0949d317
...@@ -634,15 +634,12 @@ xfs_attr_rmtval_set( ...@@ -634,15 +634,12 @@ xfs_attr_rmtval_set(
* out-of-line buffer that it is stored on. * out-of-line buffer that it is stored on.
*/ */
int int
xfs_attr_rmtval_remove( xfs_attr_rmtval_invalidate(
struct xfs_da_args *args) struct xfs_da_args *args)
{ {
xfs_dablk_t lblkno; xfs_dablk_t lblkno;
int blkcnt; int blkcnt;
int error; int error;
int done;
trace_xfs_attr_rmtval_remove(args);
/* /*
* Roll through the "value", invalidating the attribute value's blocks. * Roll through the "value", invalidating the attribute value's blocks.
...@@ -670,13 +667,32 @@ xfs_attr_rmtval_remove( ...@@ -670,13 +667,32 @@ xfs_attr_rmtval_remove(
lblkno += map.br_blockcount; lblkno += map.br_blockcount;
blkcnt -= 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. * Keep de-allocating extents until the remote-value region is gone.
*/ */
lblkno = args->rmtblkno; lblkno = args->rmtblkno;
blkcnt = args->rmtblkcnt; blkcnt = args->rmtblkcnt;
done = 0;
while (!done) { while (!done) {
error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt,
XFS_BMAPI_ATTRFORK, 1, &done); XFS_BMAPI_ATTRFORK, 1, &done);
......
...@@ -13,5 +13,5 @@ int xfs_attr_rmtval_set(struct xfs_da_args *args); ...@@ -13,5 +13,5 @@ int xfs_attr_rmtval_set(struct xfs_da_args *args);
int xfs_attr_rmtval_remove(struct xfs_da_args *args); 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);
#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