All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v5 6/9] btrfs: start transaction in btrfs_set_acl
Date: Fri,  1 Mar 2019 12:34:52 +0800	[thread overview]
Message-ID: <1551414895-22925-7-git-send-email-anand.jain@oracle.com> (raw)
In-Reply-To: <1551414895-22925-1-git-send-email-anand.jain@oracle.com>

The main motivation is to avoid NULL for the trans argument reaching
btrfs_set_xattr(). This patch does the following in btrfs_set_acl().
  Create transaction and handle the inode changes update, (copies code
    from btrfs_setxattr() as in the original, which needs a fix).
  Rename __btrfs_set_acl to do_set_acl as this is a helper function.
  Fix a c-code style, expand function declaration to max length 80 char.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
v5: change log update. Use BUG_ON instead of ASSERT.
v4: born
 fs/btrfs/acl.c | 36 ++++++++++++++++++++++++++----------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
index 5810463dc6d2..2b9c3394fc34 100644
--- a/fs/btrfs/acl.c
+++ b/fs/btrfs/acl.c
@@ -11,10 +11,12 @@
 #include <linux/sched.h>
 #include <linux/sched/mm.h>
 #include <linux/slab.h>
+#include <linux/iversion.h>
 
 #include "ctree.h"
 #include "btrfs_inode.h"
 #include "xattr.h"
+#include "transaction.h"
 
 struct posix_acl *btrfs_get_acl(struct inode *inode, int type)
 {
@@ -52,8 +54,8 @@ struct posix_acl *btrfs_get_acl(struct inode *inode, int type)
 	return acl;
 }
 
-static int __btrfs_set_acl(struct btrfs_trans_handle *trans,
-			 struct inode *inode, struct posix_acl *acl, int type)
+static int do_set_acl(struct btrfs_trans_handle *trans, struct inode *inode,
+		      struct posix_acl *acl, int type)
 {
 	int ret, size = 0;
 	const char *name;
@@ -107,20 +109,36 @@ int btrfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 {
 	int ret;
 	umode_t old_mode = inode->i_mode;
+	struct btrfs_trans_handle *trans;
+	struct btrfs_root *root = BTRFS_I(inode)->root;
 
 	if (type == ACL_TYPE_ACCESS && acl) {
 		ret = posix_acl_update_mode(inode, &inode->i_mode, &acl);
 		if (ret)
 			return ret;
 	}
-	ret = __btrfs_set_acl(NULL, inode, acl, type);
-	if (ret)
+
+	trans = btrfs_start_transaction(root, 2);
+	if (IS_ERR(trans))
+		return PTR_ERR(trans);
+
+	ret = do_set_acl(trans, inode, acl, type);
+	if (ret) {
 		inode->i_mode = old_mode;
+	} else {
+		inode_inc_iversion(inode);
+		inode->i_ctime = current_time(inode);
+		set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
+		ret = btrfs_update_inode(trans, root, inode);
+		BUG_ON(ret);
+	}
+
+	btrfs_end_transaction(trans);
 	return ret;
 }
 
-int btrfs_init_acl(struct btrfs_trans_handle *trans,
-		   struct inode *inode, struct inode *dir)
+int btrfs_init_acl(struct btrfs_trans_handle *trans, struct inode *inode,
+		   struct inode *dir)
 {
 	struct posix_acl *default_acl, *acl;
 	int ret = 0;
@@ -134,15 +152,13 @@ int btrfs_init_acl(struct btrfs_trans_handle *trans,
 		return ret;
 
 	if (default_acl) {
-		ret = __btrfs_set_acl(trans, inode, default_acl,
-				      ACL_TYPE_DEFAULT);
+		ret = do_set_acl(trans, inode, default_acl, ACL_TYPE_DEFAULT);
 		posix_acl_release(default_acl);
 	}
 
 	if (acl) {
 		if (!ret)
-			ret = __btrfs_set_acl(trans, inode, acl,
-					      ACL_TYPE_ACCESS);
+			ret = do_set_acl(trans, inode, acl, ACL_TYPE_ACCESS);
 		posix_acl_release(acl);
 	}
 
-- 
1.8.3.1


  parent reply	other threads:[~2019-03-01  4:35 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-01  4:34 [PATCH v5 0/9] Misc props.c cleanups Anand Jain
2019-03-01  4:34 ` [PATCH v5 1/9] btrfs: kill __btrfs_set_prop() Anand Jain
2019-03-01  4:34 ` [PATCH v5 2/9] btrfs: drop redundant forward declaration in props.c Anand Jain
2019-03-01  4:34 ` [PATCH v5 3/9] btrfs: rename fs_info argument to fs_private Anand Jain
2019-03-01  4:34 ` [PATCH v5 4/9] btrfs: refactor btrfs_set_prop add btrfs_set_prop_trans Anand Jain
2019-03-08 14:49   ` David Sterba
2019-03-01  4:34 ` [PATCH v5 5/9] btrfs: start transaction in btrfs_set_prop_trans Anand Jain
2019-03-01  4:34 ` Anand Jain [this message]
2019-03-08 14:52   ` [PATCH v5 6/9] btrfs: start transaction in btrfs_set_acl David Sterba
2019-03-01  4:34 ` [PATCH v5 7/9] btrfs: start transaction in btrfs_xattr_handler_set Anand Jain
2019-03-01  4:34 ` [PATCH v5 8/9] btrfs: btrfs_setxattr argument trans is never NULL Anand Jain
2019-03-01  4:34 ` [PATCH v5 9/9] btrfs: kill btrfs_setxattr Anand Jain
2019-03-08 14:56   ` David Sterba
2019-03-09  1:18     ` Anand Jain
2019-03-08 15:01 ` [PATCH v5 0/9] Misc props.c cleanups David Sterba
2019-03-09  0:04   ` Anand Jain
2019-03-11 14:41     ` David Sterba
2019-03-12 11:12       ` Anand Jain
2019-03-12 17:22         ` David Sterba

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=1551414895-22925-7-git-send-email-anand.jain@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=linux-btrfs@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.