From 709c8632597c3276cd21324b0256628f1a7fd4df Mon Sep 17 00:00:00 2001 From: Dave Chinner Date: Wed, 11 May 2022 17:05:23 +1000 Subject: xfs: rework deferred attribute operation setup Logged attribute intents only have set and remove types - there is no separate intent type for a replace operation. We should have a separate type for a replace operation, as it needs to perform operations that neither SET or REMOVE can perform. Add this type to the intent items and rearrange the deferred operation setup to reflect the different operations we are performing. Signed-off-by: Dave Chinner Reviewed-by: Allison Henderson Reviewed-by: Darrick J. Wong Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_item.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'fs/xfs/xfs_attr_item.c') diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c index 96933a3c0dcd..ee8b140a2801 100644 --- a/fs/xfs/xfs_attr_item.c +++ b/fs/xfs/xfs_attr_item.c @@ -318,6 +318,7 @@ xfs_xattri_finish_update( switch (op) { case XFS_ATTR_OP_FLAGS_SET: + case XFS_ATTR_OP_FLAGS_REPLACE: error = xfs_attr_set_iter(attr); break; case XFS_ATTR_OP_FLAGS_REMOVE: @@ -507,8 +508,14 @@ xfs_attri_validate( return false; /* alfi_op_flags should be either a set or remove */ - if (op != XFS_ATTR_OP_FLAGS_SET && op != XFS_ATTR_OP_FLAGS_REMOVE) + switch (op) { + case XFS_ATTR_OP_FLAGS_SET: + case XFS_ATTR_OP_FLAGS_REPLACE: + case XFS_ATTR_OP_FLAGS_REMOVE: + break; + default: return false; + } if (attrp->alfi_value_len > XATTR_SIZE_MAX) return false; -- cgit v1.2.3