All of lore.kernel.org
 help / color / mirror / Atom feed
From: Allison Collins <allison.henderson@oracle.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH v5 12/14] xfsprogs: Check for -ENOATTR or -EEXIST
Date: Wed, 11 Dec 2019 21:18:01 -0700	[thread overview]
Message-ID: <20191212041803.14018-13-allison.henderson@oracle.com> (raw)
In-Reply-To: <20191212041803.14018-1-allison.henderson@oracle.com>

Delayed operations cannot return error codes.  So we must check for
these conditions first before starting set or remove operations

Signed-off-by: Allison Collins <allison.henderson@oracle.com>
---
 libxfs/xfs_attr.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/libxfs/xfs_attr.c b/libxfs/xfs_attr.c
index 289fee2..357824c 100644
--- a/libxfs/xfs_attr.c
+++ b/libxfs/xfs_attr.c
@@ -445,6 +445,18 @@ xfs_attr_set(
 		goto out_trans_cancel;
 
 	xfs_trans_ijoin(args.trans, dp, 0);
+
+	error = xfs_has_attr(&args);
+	if (error == -EEXIST) {
+		if (name->type & ATTR_CREATE)
+			goto out_trans_cancel;
+		else
+			name->type |= ATTR_REPLACE;
+	}
+
+	if (error == -ENOATTR && (name->type & ATTR_REPLACE))
+		goto out_trans_cancel;
+
 	error = xfs_attr_set_args(&args);
 	if (error)
 		goto out_trans_cancel;
@@ -533,6 +545,10 @@ xfs_attr_remove(
 	 */
 	xfs_trans_ijoin(args.trans, dp, 0);
 
+	error = xfs_has_attr(&args);
+	if (error != -EEXIST)
+		goto out;
+
 	error = xfs_attr_remove_args(&args);
 	if (error)
 		goto out;
-- 
2.7.4


  parent reply	other threads:[~2019-12-12  4:18 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-12  4:17 [PATCH v5 00/14] xfsprogs: Delayed Ready Attributes Allison Collins
2019-12-12  4:17 ` [PATCH v5 01/14] xfsprogs: Remove all strlen in all xfs_attr_* functions for attr names Allison Collins
2019-12-12  4:17 ` [PATCH v5 02/14] xfsprogs: Replace attribute parameters with struct xfs_name Allison Collins
2019-12-12  4:17 ` [PATCH v5 03/14] xfsprogs: Embed struct xfs_name in xfs_da_args Allison Collins
2019-12-12  4:17 ` [PATCH v5 04/14] xfsprogs: Add xfs_has_attr and subroutines Allison Collins
2019-12-12  4:17 ` [PATCH v5 05/14] xfsprogs: Factor out new helper functions xfs_attr_rmtval_set Allison Collins
2019-12-12  4:17 ` [PATCH v5 06/14] xfsprogs: Factor up trans handling in xfs_attr3_leaf_flipflags Allison Collins
2019-12-12  4:17 ` [PATCH v5 07/14] xfsprogs: Factor out xfs_attr_leaf_addname helper Allison Collins
2019-12-12  4:17 ` [PATCH v5 08/14] xfsprogs: Factor up xfs_attr_try_sf_addname Allison Collins
2019-12-12  4:17 ` [PATCH v5 09/14] xfsprogs: Factor up trans roll from xfs_attr3_leaf_setflag Allison Collins
2019-12-12  4:17 ` [PATCH v5 10/14] xfsprogs: Factor out xfs_attr_rmtval_invalidate Allison Collins
2019-12-12  4:18 ` [PATCH v5 11/14] xfsprogs: Factor up trans roll in xfs_attr3_leaf_clearflag Allison Collins
2019-12-12  4:18 ` Allison Collins [this message]
2019-12-12  4:18 ` [PATCH v5 13/14] xfsprogs: Add delay ready attr remove routines Allison Collins
2019-12-12  4:18 ` [PATCH v5 14/14] xfsprogs: Add delay ready attr set routines Allison Collins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191212041803.14018-13-allison.henderson@oracle.com \
    --to=allison.henderson@oracle.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.