linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: stable@vger.kernel.org
Cc: linux-xfs@vger.kernel.org, Dave Chinner <dchinner@redhat.com>,
	"Darrick J . Wong" <darrick.wong@oracle.com>
Subject: [PATCH 12/16] xfs: don't change inode mode if ACL update fails
Date: Thu, 19 Oct 2017 16:22:55 +0200	[thread overview]
Message-ID: <20171019142259.20082-13-hch@lst.de> (raw)
In-Reply-To: <20171019142259.20082-1-hch@lst.de>

From: Dave Chinner <dchinner@redhat.com>

commit 67f2ffe31d1a683170c2ba0ecc643e42a5fdd397 upstream.

If we get ENOSPC half way through setting the ACL, the inode mode
can still be changed even though the ACL does not exist. Reorder the
operation to only change the mode of the inode if the ACL is set
correctly.

Whilst this does not fix the problem with crash consistency (that requires
attribute addition to be a deferred op) it does prevent ENOSPC and other
non-fatal errors setting an xattr to be handled sanely.

This fixes xfstests generic/449.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 fs/xfs/xfs_acl.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c
index 7034e17535de..3354140de07e 100644
--- a/fs/xfs/xfs_acl.c
+++ b/fs/xfs/xfs_acl.c
@@ -247,6 +247,8 @@ xfs_set_mode(struct inode *inode, umode_t mode)
 int
 xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 {
+	umode_t mode;
+	bool set_mode = false;
 	int error = 0;
 
 	if (!acl)
@@ -257,16 +259,24 @@ xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 		return error;
 
 	if (type == ACL_TYPE_ACCESS) {
-		umode_t mode;
-
 		error = posix_acl_update_mode(inode, &mode, &acl);
 		if (error)
 			return error;
-		error = xfs_set_mode(inode, mode);
-		if (error)
-			return error;
+		set_mode = true;
 	}
 
  set_acl:
-	return __xfs_set_acl(inode, acl, type);
+	error =  __xfs_set_acl(inode, acl, type);
+	if (error)
+		return error;
+
+	/*
+	 * We set the mode after successfully updating the ACL xattr because the
+	 * xattr update can fail at ENOSPC and we don't want to change the mode
+	 * if the ACL update hasn't been applied.
+	 */
+	if (set_mode)
+		error = xfs_set_mode(inode, mode);
+
+	return error;
 }
-- 
2.14.2


  parent reply	other threads:[~2017-10-19 14:23 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-19 14:22 4.9-stable updates for XFS Christoph Hellwig
2017-10-19 14:22 ` [PATCH 01/16] xfs: don't unconditionally clear the reflink flag on zero-block files Christoph Hellwig
2017-10-19 14:22 ` [PATCH 02/16] xfs: evict CoW fork extents when performing finsert/fcollapse Christoph Hellwig
2017-10-19 14:22 ` [PATCH 03/16] fs/xfs: Use %pS printk format for direct addresses Christoph Hellwig
2017-10-19 14:22 ` [PATCH 04/16] xfs: report zeroed or not correctly in xfs_zero_range() Christoph Hellwig
2017-10-19 14:22 ` [PATCH 05/16] xfs: update i_size after unwritten conversion in dio completion Christoph Hellwig
2017-10-19 14:22 ` [PATCH 06/16] xfs: perag initialization should only touch m_ag_max_usable for AG 0 Christoph Hellwig
2017-10-19 14:22 ` [PATCH 07/16] xfs: Capture state of the right inode in xfs_iflush_done Christoph Hellwig
2017-10-19 14:22 ` [PATCH 08/16] xfs: always swap the cow forks when swapping extents Christoph Hellwig
2017-10-19 14:22 ` [PATCH 09/16] xfs: handle racy AIO in xfs_reflink_end_cow Christoph Hellwig
2017-10-19 14:22 ` [PATCH 10/16] xfs: Don't log uninitialised fields in inode structures Christoph Hellwig
2017-10-19 14:22 ` [PATCH 11/16] xfs: move more RT specific code under CONFIG_XFS_RT Christoph Hellwig
2017-10-19 14:22 ` Christoph Hellwig [this message]
2017-10-19 14:22 ` [PATCH 13/16] xfs: reinit btree pointer on attr tree inactivation walk Christoph Hellwig
2017-10-19 14:22 ` [PATCH 14/16] xfs: handle error if xfs_btree_get_bufs fails Christoph Hellwig
2017-10-19 14:22 ` [PATCH 15/16] xfs: cancel dirty pages on invalidation Christoph Hellwig
2017-10-19 14:22 ` [PATCH 16/16] xfs: trim writepage mapping to within eof Christoph Hellwig
2017-10-24 12:54 ` 4.9-stable updates for XFS Greg KH

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=20171019142259.20082-13-hch@lst.de \
    --to=hch@lst.de \
    --cc=darrick.wong@oracle.com \
    --cc=dchinner@redhat.com \
    --cc=linux-xfs@vger.kernel.org \
    --cc=stable@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).