Maybe little too long subject line. On Mon, Oct 25, 2021 at 07:58:26PM +0300, Konstantin Komarov wrote: > ntfs_init_acl sets mode. ntfs_init_acl calls ntfs_set_acl_ex. > ntfs_set_acl_ex must not change this mode. > Fixes xfstest generic/444 > Fixes: 83e8f5032e2d ("fs/ntfs3: Add attrib operations") Where does this commit id come from? Seems wrong to me. > > Signed-off-by: Konstantin Komarov <almaz.alexandrovich@xxxxxxxxxxxxxxxxxxxx> > --- > fs/ntfs3/xattr.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c > index 2143099cffdf..97b5f8417d85 100644 > --- a/fs/ntfs3/xattr.c > +++ b/fs/ntfs3/xattr.c > @@ -538,7 +538,7 @@ struct posix_acl *ntfs_get_acl(struct inode *inode, int type) > > static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns, > struct inode *inode, struct posix_acl *acl, > - int type) > + int type, int init_acl) Like Joe say. Bool here and use true/false > { > const char *name; > size_t size, name_len; > @@ -551,8 +551,9 @@ static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns, > > switch (type) { > case ACL_TYPE_ACCESS: > - if (acl) { > - umode_t mode = inode->i_mode; > + /* Do not change i_mode if we are in init_acl */ > + if (acl && !init_acl) { > + umode_t mode; > > err = posix_acl_update_mode(mnt_userns, inode, &mode, > &acl); > @@ -613,7 +614,7 @@ static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns, > int ntfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode, > struct posix_acl *acl, int type) > { > - return ntfs_set_acl_ex(mnt_userns, inode, acl, type); > + return ntfs_set_acl_ex(mnt_userns, inode, acl, type, 0); > } > > /* > @@ -633,7 +634,7 @@ int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *inode, > > if (default_acl) { > err = ntfs_set_acl_ex(mnt_userns, inode, default_acl, > - ACL_TYPE_DEFAULT); > + ACL_TYPE_DEFAULT, 1); > posix_acl_release(default_acl); > } else { > inode->i_default_acl = NULL; > @@ -644,7 +645,7 @@ int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *inode, > else { > if (!err) > err = ntfs_set_acl_ex(mnt_userns, inode, acl, > - ACL_TYPE_ACCESS); > + ACL_TYPE_ACCESS, 1); > posix_acl_release(acl); > } > > -- > 2.33.0 >