This function is similar to xfs_attr_rmtval_remove, but adapted to return. EAGAIN for new transactions. We will use this later when we introduce delayed attributes Signed-off-by: Allison Collins <allison.henderson@xxxxxxxxxx> --- fs/xfs/libxfs/xfs_attr_remote.c | 27 +++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_attr_remote.h | 1 + 2 files changed, 28 insertions(+) diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c index 9b4fa2a..f2ee0b8 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.c +++ b/fs/xfs/libxfs/xfs_attr_remote.c @@ -684,3 +684,30 @@ xfs_attr_rmtval_remove( } return 0; } + +/* + * Unmap value blocks for this attr. This is similar to + * xfs_attr_rmtval_remove, but adapted to to return EAGAIN for new transactions + */ +int +xfs_attr_rmtval_unmap( + struct xfs_da_args *args) +{ + int error, done; + + /* + * Unmap value blocks for this attr. This is similar to + * xfs_attr_rmtval_remove, but open coded here to return EAGAIN + * for new transactions + */ + error = xfs_bunmapi(args->trans, args->dp, + args->rmtblkno, args->rmtblkcnt, + XFS_BMAPI_ATTRFORK, 1, &done); + if (error) + return error; + + if (!done) + return -EAGAIN; + + return 0; +} diff --git a/fs/xfs/libxfs/xfs_attr_remote.h b/fs/xfs/libxfs/xfs_attr_remote.h index 85f2593..7ab3770 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.h +++ b/fs/xfs/libxfs/xfs_attr_remote.h @@ -12,4 +12,5 @@ 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_unmap(struct xfs_da_args *args); #endif /* __XFS_ATTR_REMOTE_H__ */ -- 2.7.4