2020-07-17 02:46:11

by Gang He

[permalink] [raw]
Subject: [PATCH] ocfs2: fix remounting needed after setfacl command

When use setfacl command to change a file's acl, the user cannot
get the latest acl information from the file via getfacl command,
until remounting the file system.
e.g.
setfacl -m u:ivan:rw /ocfs2/ivan
getfacl /ocfs2/ivan
getfacl: Removing leading '/' from absolute path names
file: ocfs2/ivan
owner: root
group: root
user::rw-
group::r--
mask::r--
other::r--

The latest acl record("u:ivan:rw") cannot be returned via getfacl
command until remounting.

Signed-off-by: Gang He <[email protected]>
---
fs/ocfs2/acl.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
index bb981ec76456..7b07f5df3a29 100644
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -256,6 +256,8 @@ static int ocfs2_set_acl(handle_t *handle,
ret = ocfs2_xattr_set(inode, name_index, "", value, size, 0);

kfree(value);
+ if (!ret)
+ set_cached_acl(inode, type, acl);

return ret;
}
--
2.12.3


2020-07-20 01:17:26

by Joseph Qi

[permalink] [raw]
Subject: Re: [PATCH] ocfs2: fix remounting needed after setfacl command



On 2020/7/17 10:37, Gang He wrote:
> When use setfacl command to change a file's acl, the user cannot
> get the latest acl information from the file via getfacl command,
> until remounting the file system.
> e.g.
> setfacl -m u:ivan:rw /ocfs2/ivan
> getfacl /ocfs2/ivan
> getfacl: Removing leading '/' from absolute path names
> file: ocfs2/ivan
> owner: root
> group: root
> user::rw-
> group::r--
> mask::r--
> other::r--
>
> The latest acl record("u:ivan:rw") cannot be returned via getfacl
> command until remounting.
>
> Signed-off-by: Gang He <[email protected]>

Reviewed-by: Joseph Qi <[email protected]>
> ---
> fs/ocfs2/acl.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
> index bb981ec76456..7b07f5df3a29 100644
> --- a/fs/ocfs2/acl.c
> +++ b/fs/ocfs2/acl.c
> @@ -256,6 +256,8 @@ static int ocfs2_set_acl(handle_t *handle,
> ret = ocfs2_xattr_set(inode, name_index, "", value, size, 0);
>
> kfree(value);
> + if (!ret)
> + set_cached_acl(inode, type, acl);
>
> return ret;
> }
>