summaryrefslogtreecommitdiff
path: root/fs/xfs/xfs_attr_item.c
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2023-11-30 21:45:28 +0300
committerDarrick J. Wong <djwong@kernel.org>2023-12-07 05:45:15 +0300
commit3dd75c8db1c1675a26d3e228bab349c1fc065867 (patch)
tree902c260865c8e85da5a52179ae7b073616b8db0f /fs/xfs/xfs_attr_item.c
parent172538beba82e7b65d3d7c84cb558f287381cd7a (diff)
downloadlinux-3dd75c8db1c1675a26d3e228bab349c1fc065867.tar.xz
xfs: hoist intent done flag setting to ->finish_item callsite
Each log intent item's ->finish_item call chain inevitably includes some code to set the dirty flag of the transaction. If there's an associated log intent done item, it also sets the item's dirty flag and the transaction's INTENT_DONE flag. This is repeated throughout the codebase. Reduce the LOC by moving all that to xfs_defer_finish_one. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/xfs_attr_item.c')
-rw-r--r--fs/xfs/xfs_attr_item.c30
1 files changed, 4 insertions, 26 deletions
diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c
index d19a385f9289..e7acbb736bee 100644
--- a/fs/xfs/xfs_attr_item.c
+++ b/fs/xfs/xfs_attr_item.c
@@ -324,39 +324,17 @@ xfs_xattri_finish_update(
struct xfs_da_args *args = attr->xattri_da_args;
int error;
- if (XFS_TEST_ERROR(false, args->dp->i_mount, XFS_ERRTAG_LARP)) {
- error = -EIO;
- goto out;
- }
+ if (XFS_TEST_ERROR(false, args->dp->i_mount, XFS_ERRTAG_LARP))
+ return -EIO;
/* If an attr removal is trivially complete, we're done. */
if (attr->xattri_op_flags == XFS_ATTRI_OP_FLAGS_REMOVE &&
- !xfs_inode_hasattr(args->dp)) {
- error = 0;
- goto out;
- }
+ !xfs_inode_hasattr(args->dp))
+ return 0;
error = xfs_attr_set_iter(attr);
if (!error && attr->xattri_dela_state != XFS_DAS_DONE)
error = -EAGAIN;
-out:
- /*
- * Mark the transaction dirty, even on error. This ensures the
- * transaction is aborted, which:
- *
- * 1.) releases the ATTRI and frees the ATTRD
- * 2.) shuts down the filesystem
- */
- args->trans->t_flags |= XFS_TRANS_DIRTY;
-
- /*
- * attr intent/done items are null when logged attributes are disabled
- */
- if (attrdp) {
- args->trans->t_flags |= XFS_TRANS_HAS_INTENT_DONE;
- set_bit(XFS_LI_DIRTY, &attrdp->attrd_item.li_flags);
- }
-
return error;
}