* [PATCH 1/4] fs/ntfs3: Keep preallocated only if option prealloc enabled
2021-10-22 15:53 [PATCH 0/4] fs/ntfs3: Various fixes for xattr and files Konstantin Komarov
@ 2021-10-22 15:54 ` Konstantin Komarov
2021-10-23 9:55 ` Kari Argillander
2021-10-22 15:55 ` [PATCH 2/4] fs/ntfs3: Restore ntfs_xattr_get_acl and ntfs_xattr_set_acl functions Konstantin Komarov
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Konstantin Komarov @ 2021-10-22 15:54 UTC (permalink / raw)
To: ntfs3; +Cc: linux-kernel, linux-fsdevel
If size of file was reduced, we still kept allocated blocks.
This commit makes ntfs3 work as other fs like btrfs.
https://bugzilla.kernel.org/show_bug.cgi?id=214719
Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")
Reported-by: Ganapathi Kamath
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
fs/ntfs3/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
index 43b1451bff53..3ac0482c6880 100644
--- a/fs/ntfs3/file.c
+++ b/fs/ntfs3/file.c
@@ -494,7 +494,7 @@ static int ntfs_truncate(struct inode *inode, loff_t new_size)
down_write(&ni->file.run_lock);
err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run, new_size,
- &new_valid, true, NULL);
+ &new_valid, ni->mi.sbi->options->prealloc, NULL);
up_write(&ni->file.run_lock);
if (new_valid < ni->i_valid)
--
2.33.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] fs/ntfs3: Keep preallocated only if option prealloc enabled
2021-10-22 15:54 ` [PATCH 1/4] fs/ntfs3: Keep preallocated only if option prealloc enabled Konstantin Komarov
@ 2021-10-23 9:55 ` Kari Argillander
[not found] ` <DM6PR04MB49385E765EF33EF4E0B5FF32DA829@DM6PR04MB4938.namprd04.prod.outlook.com>
0 siblings, 1 reply; 10+ messages in thread
From: Kari Argillander @ 2021-10-23 9:55 UTC (permalink / raw)
To: Konstantin Komarov, hgkamath; +Cc: ntfs3, linux-kernel, linux-fsdevel
On Fri, Oct 22, 2021 at 06:54:31PM +0300, Konstantin Komarov wrote:
> If size of file was reduced, we still kept allocated blocks.
> This commit makes ntfs3 work as other fs like btrfs.
> https://bugzilla.kernel.org/show_bug.cgi?id=214719
Link: https://bugzilla.kernel.org/show_bug.cgi?id=214719
> Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")
>
> Reported-by: Ganapathi Kamath
Add <hgkamath@hotmail.com>
I also added to loop here. Ganapathi can you test if this patch fix your
problem?
> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
> ---
> fs/ntfs3/file.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
> index 43b1451bff53..3ac0482c6880 100644
> --- a/fs/ntfs3/file.c
> +++ b/fs/ntfs3/file.c
> @@ -494,7 +494,7 @@ static int ntfs_truncate(struct inode *inode, loff_t new_size)
>
> down_write(&ni->file.run_lock);
> err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run, new_size,
> - &new_valid, true, NULL);
> + &new_valid, ni->mi.sbi->options->prealloc, NULL);
> up_write(&ni->file.run_lock);
>
> if (new_valid < ni->i_valid)
> --
> 2.33.0
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/4] fs/ntfs3: Restore ntfs_xattr_get_acl and ntfs_xattr_set_acl functions
2021-10-22 15:53 [PATCH 0/4] fs/ntfs3: Various fixes for xattr and files Konstantin Komarov
2021-10-22 15:54 ` [PATCH 1/4] fs/ntfs3: Keep preallocated only if option prealloc enabled Konstantin Komarov
@ 2021-10-22 15:55 ` Konstantin Komarov
2021-10-23 9:34 ` Kari Argillander
2021-10-22 15:55 ` [PATCH 3/4] fs/ntfs3: Optimize locking in ntfs_save_wsl_perm Konstantin Komarov
2021-10-22 15:56 ` [PATCH 4/4] fs/ntfs3: Update i_ctime when xattr is added Konstantin Komarov
3 siblings, 1 reply; 10+ messages in thread
From: Konstantin Komarov @ 2021-10-22 15:55 UTC (permalink / raw)
To: ntfs3; +Cc: linux-kernel, linux-fsdevel
Apparently we need to maintain these functions with
ntfs_get_acl_ex and ntfs_set_acl_ex.
This commit fixes xfstest generic/099
Fixes: 95dd8b2c1ed0 ("fs/ntfs3: Remove unnecessary functions")
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
fs/ntfs3/xattr.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 95 insertions(+), 1 deletion(-)
diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
index 2143099cffdf..62605781790b 100644
--- a/fs/ntfs3/xattr.c
+++ b/fs/ntfs3/xattr.c
@@ -112,7 +112,7 @@ static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea,
return -ENOMEM;
if (!size) {
- ;
+ /* EA info persists, but xattr is empty. Looks like EA problem. */
} else if (attr_ea->non_res) {
struct runs_tree run;
@@ -616,6 +616,67 @@ int ntfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode,
return ntfs_set_acl_ex(mnt_userns, inode, acl, type);
}
+static int ntfs_xattr_get_acl(struct user_namespace *mnt_userns,
+ struct inode *inode, int type, void *buffer,
+ size_t size)
+{
+ struct posix_acl *acl;
+ int err;
+
+ if (!(inode->i_sb->s_flags & SB_POSIXACL)) {
+ ntfs_inode_warn(inode, "add mount option \"acl\" to use acl");
+ return -EOPNOTSUPP;
+ }
+
+ acl = ntfs_get_acl(inode, type, false);
+ if (IS_ERR(acl))
+ return PTR_ERR(acl);
+
+ if (!acl)
+ return -ENODATA;
+
+ err = posix_acl_to_xattr(mnt_userns, acl, buffer, size);
+ posix_acl_release(acl);
+
+ return err;
+}
+
+static int ntfs_xattr_set_acl(struct user_namespace *mnt_userns,
+ struct inode *inode, int type, const void *value,
+ size_t size)
+{
+ struct posix_acl *acl;
+ int err;
+
+ if (!(inode->i_sb->s_flags & SB_POSIXACL)) {
+ ntfs_inode_warn(inode, "add mount option \"acl\" to use acl");
+ return -EOPNOTSUPP;
+ }
+
+ if (!inode_owner_or_capable(mnt_userns, inode))
+ return -EPERM;
+
+ if (!value) {
+ acl = NULL;
+ } else {
+ acl = posix_acl_from_xattr(mnt_userns, value, size);
+ if (IS_ERR(acl))
+ return PTR_ERR(acl);
+
+ if (acl) {
+ err = posix_acl_valid(mnt_userns, acl);
+ if (err)
+ goto release_and_out;
+ }
+ }
+
+ err = ntfs_set_acl(mnt_userns, inode, acl, type);
+
+release_and_out:
+ posix_acl_release(acl);
+ return err;
+}
+
/*
* ntfs_init_acl - Initialize the ACLs of a new inode.
*
@@ -782,6 +843,23 @@ static int ntfs_getxattr(const struct xattr_handler *handler, struct dentry *de,
goto out;
}
+#ifdef CONFIG_NTFS3_FS_POSIX_ACL
+ if ((name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1 &&
+ !memcmp(name, XATTR_NAME_POSIX_ACL_ACCESS,
+ sizeof(XATTR_NAME_POSIX_ACL_ACCESS))) ||
+ (name_len == sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1 &&
+ !memcmp(name, XATTR_NAME_POSIX_ACL_DEFAULT,
+ sizeof(XATTR_NAME_POSIX_ACL_DEFAULT)))) {
+ /* TODO: init_user_ns? */
+ err = ntfs_xattr_get_acl(
+ &init_user_ns, inode,
+ name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1
+ ? ACL_TYPE_ACCESS
+ : ACL_TYPE_DEFAULT,
+ buffer, size);
+ goto out;
+ }
+#endif
/* Deal with NTFS extended attribute. */
err = ntfs_get_ea(inode, name, name_len, buffer, size, NULL);
@@ -894,6 +972,22 @@ static noinline int ntfs_setxattr(const struct xattr_handler *handler,
goto out;
}
+#ifdef CONFIG_NTFS3_FS_POSIX_ACL
+ if ((name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1 &&
+ !memcmp(name, XATTR_NAME_POSIX_ACL_ACCESS,
+ sizeof(XATTR_NAME_POSIX_ACL_ACCESS))) ||
+ (name_len == sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1 &&
+ !memcmp(name, XATTR_NAME_POSIX_ACL_DEFAULT,
+ sizeof(XATTR_NAME_POSIX_ACL_DEFAULT)))) {
+ err = ntfs_xattr_set_acl(
+ mnt_userns, inode,
+ name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1
+ ? ACL_TYPE_ACCESS
+ : ACL_TYPE_DEFAULT,
+ value, size);
+ goto out;
+ }
+#endif
/* Deal with NTFS extended attribute. */
err = ntfs_set_ea(inode, name, name_len, value, size, flags);
--
2.33.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] fs/ntfs3: Restore ntfs_xattr_get_acl and ntfs_xattr_set_acl functions
2021-10-22 15:55 ` [PATCH 2/4] fs/ntfs3: Restore ntfs_xattr_get_acl and ntfs_xattr_set_acl functions Konstantin Komarov
@ 2021-10-23 9:34 ` Kari Argillander
0 siblings, 0 replies; 10+ messages in thread
From: Kari Argillander @ 2021-10-23 9:34 UTC (permalink / raw)
To: Konstantin Komarov; +Cc: ntfs3, linux-kernel, linux-fsdevel
On Fri, Oct 22, 2021 at 06:55:09PM +0300, Konstantin Komarov wrote:
> Apparently we need to maintain these functions with
> ntfs_get_acl_ex and ntfs_set_acl_ex.
> This commit fixes xfstest generic/099
> Fixes: 95dd8b2c1ed0 ("fs/ntfs3: Remove unnecessary functions")
I get build error with patch 1&2 applied.
fs/ntfs3/xattr.c: In function ‘ntfs_xattr_get_acl’:
fs/ntfs3/xattr.c:631:8: error: too many arguments to function ‘ntfs_get_acl’
631 | acl = ntfs_get_acl(inode, type, false);
| ^~~~~~~~~~~~
fs/ntfs3/xattr.c:533:19: note: declared here
533 | struct posix_acl *ntfs_get_acl(struct inode *inode, int type)
>
> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
> ---
> fs/ntfs3/xattr.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 95 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
> index 2143099cffdf..62605781790b 100644
> --- a/fs/ntfs3/xattr.c
> +++ b/fs/ntfs3/xattr.c
> @@ -112,7 +112,7 @@ static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea,
> return -ENOMEM;
>
> if (!size) {
> - ;
> + /* EA info persists, but xattr is empty. Looks like EA problem. */
> } else if (attr_ea->non_res) {
> struct runs_tree run;
>
> @@ -616,6 +616,67 @@ int ntfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode,
> return ntfs_set_acl_ex(mnt_userns, inode, acl, type);
> }
>
> +static int ntfs_xattr_get_acl(struct user_namespace *mnt_userns,
> + struct inode *inode, int type, void *buffer,
> + size_t size)
> +{
> + struct posix_acl *acl;
> + int err;
> +
> + if (!(inode->i_sb->s_flags & SB_POSIXACL)) {
> + ntfs_inode_warn(inode, "add mount option \"acl\" to use acl");
> + return -EOPNOTSUPP;
> + }
> +
> + acl = ntfs_get_acl(inode, type, false);
> + if (IS_ERR(acl))
> + return PTR_ERR(acl);
> +
> + if (!acl)
> + return -ENODATA;
> +
> + err = posix_acl_to_xattr(mnt_userns, acl, buffer, size);
> + posix_acl_release(acl);
> +
> + return err;
> +}
> +
> +static int ntfs_xattr_set_acl(struct user_namespace *mnt_userns,
> + struct inode *inode, int type, const void *value,
> + size_t size)
> +{
> + struct posix_acl *acl;
> + int err;
> +
> + if (!(inode->i_sb->s_flags & SB_POSIXACL)) {
> + ntfs_inode_warn(inode, "add mount option \"acl\" to use acl");
> + return -EOPNOTSUPP;
> + }
> +
> + if (!inode_owner_or_capable(mnt_userns, inode))
> + return -EPERM;
> +
> + if (!value) {
> + acl = NULL;
> + } else {
> + acl = posix_acl_from_xattr(mnt_userns, value, size);
> + if (IS_ERR(acl))
> + return PTR_ERR(acl);
> +
> + if (acl) {
> + err = posix_acl_valid(mnt_userns, acl);
> + if (err)
> + goto release_and_out;
> + }
> + }
> +
> + err = ntfs_set_acl(mnt_userns, inode, acl, type);
> +
> +release_and_out:
> + posix_acl_release(acl);
> + return err;
> +}
> +
> /*
> * ntfs_init_acl - Initialize the ACLs of a new inode.
> *
> @@ -782,6 +843,23 @@ static int ntfs_getxattr(const struct xattr_handler *handler, struct dentry *de,
> goto out;
> }
>
> +#ifdef CONFIG_NTFS3_FS_POSIX_ACL
> + if ((name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1 &&
> + !memcmp(name, XATTR_NAME_POSIX_ACL_ACCESS,
> + sizeof(XATTR_NAME_POSIX_ACL_ACCESS))) ||
> + (name_len == sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1 &&
> + !memcmp(name, XATTR_NAME_POSIX_ACL_DEFAULT,
> + sizeof(XATTR_NAME_POSIX_ACL_DEFAULT)))) {
> + /* TODO: init_user_ns? */
> + err = ntfs_xattr_get_acl(
> + &init_user_ns, inode,
> + name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1
> + ? ACL_TYPE_ACCESS
> + : ACL_TYPE_DEFAULT,
> + buffer, size);
> + goto out;
> + }
> +#endif
> /* Deal with NTFS extended attribute. */
> err = ntfs_get_ea(inode, name, name_len, buffer, size, NULL);
>
> @@ -894,6 +972,22 @@ static noinline int ntfs_setxattr(const struct xattr_handler *handler,
> goto out;
> }
>
> +#ifdef CONFIG_NTFS3_FS_POSIX_ACL
> + if ((name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1 &&
> + !memcmp(name, XATTR_NAME_POSIX_ACL_ACCESS,
> + sizeof(XATTR_NAME_POSIX_ACL_ACCESS))) ||
> + (name_len == sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1 &&
> + !memcmp(name, XATTR_NAME_POSIX_ACL_DEFAULT,
> + sizeof(XATTR_NAME_POSIX_ACL_DEFAULT)))) {
> + err = ntfs_xattr_set_acl(
> + mnt_userns, inode,
> + name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1
> + ? ACL_TYPE_ACCESS
> + : ACL_TYPE_DEFAULT,
> + value, size);
> + goto out;
> + }
> +#endif
> /* Deal with NTFS extended attribute. */
> err = ntfs_set_ea(inode, name, name_len, value, size, flags);
>
> --
> 2.33.0
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/4] fs/ntfs3: Optimize locking in ntfs_save_wsl_perm
2021-10-22 15:53 [PATCH 0/4] fs/ntfs3: Various fixes for xattr and files Konstantin Komarov
2021-10-22 15:54 ` [PATCH 1/4] fs/ntfs3: Keep preallocated only if option prealloc enabled Konstantin Komarov
2021-10-22 15:55 ` [PATCH 2/4] fs/ntfs3: Restore ntfs_xattr_get_acl and ntfs_xattr_set_acl functions Konstantin Komarov
@ 2021-10-22 15:55 ` Konstantin Komarov
2021-10-22 16:22 ` Joe Perches
2021-10-22 15:56 ` [PATCH 4/4] fs/ntfs3: Update i_ctime when xattr is added Konstantin Komarov
3 siblings, 1 reply; 10+ messages in thread
From: Konstantin Komarov @ 2021-10-22 15:55 UTC (permalink / raw)
To: ntfs3; +Cc: linux-kernel, linux-fsdevel
Right now in ntfs_save_wsl_perm we lock/unlock 4 times.
This commit fixes this situation.
We add "locked" argument to ntfs_set_ea.
Suggested-by: Kari Argillander <kari.argillander@gmail.com>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
fs/ntfs3/xattr.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
index 62605781790b..bc3144608ce1 100644
--- a/fs/ntfs3/xattr.c
+++ b/fs/ntfs3/xattr.c
@@ -259,7 +259,7 @@ static int ntfs_get_ea(struct inode *inode, const char *name, size_t name_len,
static noinline int ntfs_set_ea(struct inode *inode, const char *name,
size_t name_len, const void *value,
- size_t val_size, int flags)
+ size_t val_size, int flags, bool locked)
{
struct ntfs_inode *ni = ntfs_i(inode);
struct ntfs_sb_info *sbi = ni->mi.sbi;
@@ -278,7 +278,8 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name,
u64 new_sz;
void *p;
- ni_lock(ni);
+ if (!locked)
+ ni_lock(ni);
run_init(&ea_run);
@@ -467,7 +468,8 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name,
mark_inode_dirty(&ni->vfs_inode);
out:
- ni_unlock(ni);
+ if (!locked)
+ ni_unlock(ni);
run_close(&ea_run);
kfree(ea_all);
@@ -595,7 +597,7 @@ static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns,
flags = 0;
}
- err = ntfs_set_ea(inode, name, name_len, value, size, flags);
+ err = ntfs_set_ea(inode, name, name_len, value, size, flags, 0);
if (err == -ENODATA && !size)
err = 0; /* Removing non existed xattr. */
if (!err)
@@ -989,7 +991,7 @@ static noinline int ntfs_setxattr(const struct xattr_handler *handler,
}
#endif
/* Deal with NTFS extended attribute. */
- err = ntfs_set_ea(inode, name, name_len, value, size, flags);
+ err = ntfs_set_ea(inode, name, name_len, value, size, flags, 0);
out:
return err;
@@ -1004,35 +1006,37 @@ int ntfs_save_wsl_perm(struct inode *inode)
{
int err;
__le32 value;
+ struct ntfs_inode *ni = ntfs_i(inode);
- /* TODO: refactor this, so we don't lock 4 times in ntfs_set_ea */
+ ni_lock(ni);
value = cpu_to_le32(i_uid_read(inode));
err = ntfs_set_ea(inode, "$LXUID", sizeof("$LXUID") - 1, &value,
- sizeof(value), 0);
+ sizeof(value), 0, true); /* true == already locked. */
if (err)
goto out;
value = cpu_to_le32(i_gid_read(inode));
err = ntfs_set_ea(inode, "$LXGID", sizeof("$LXGID") - 1, &value,
- sizeof(value), 0);
+ sizeof(value), 0, true);
if (err)
goto out;
value = cpu_to_le32(inode->i_mode);
err = ntfs_set_ea(inode, "$LXMOD", sizeof("$LXMOD") - 1, &value,
- sizeof(value), 0);
+ sizeof(value), 0, true);
if (err)
goto out;
if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
value = cpu_to_le32(inode->i_rdev);
err = ntfs_set_ea(inode, "$LXDEV", sizeof("$LXDEV") - 1, &value,
- sizeof(value), 0);
+ sizeof(value), 0, true);
if (err)
goto out;
}
out:
+ ni_unlock(ni);
/* In case of error should we delete all WSL xattr? */
return err;
}
--
2.33.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] fs/ntfs3: Optimize locking in ntfs_save_wsl_perm
2021-10-22 15:55 ` [PATCH 3/4] fs/ntfs3: Optimize locking in ntfs_save_wsl_perm Konstantin Komarov
@ 2021-10-22 16:22 ` Joe Perches
0 siblings, 0 replies; 10+ messages in thread
From: Joe Perches @ 2021-10-22 16:22 UTC (permalink / raw)
To: Konstantin Komarov, ntfs3; +Cc: linux-kernel, linux-fsdevel
On Fri, 2021-10-22 at 18:55 +0300, Konstantin Komarov wrote:
> Right now in ntfs_save_wsl_perm we lock/unlock 4 times.
> This commit fixes this situation.
> We add "locked" argument to ntfs_set_ea.
[]
> diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
[]
> @@ -259,7 +259,7 @@ static int ntfs_get_ea(struct inode *inode, const char *name, size_t name_len,
>
> static noinline int ntfs_set_ea(struct inode *inode, const char *name,
> size_t name_len, const void *value,
> - size_t val_size, int flags)
> + size_t val_size, int flags, bool locked)
[]
> @@ -595,7 +597,7 @@ static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns,
> flags = 0;
> }
>
> - err = ntfs_set_ea(inode, name, name_len, value, size, flags);
> + err = ntfs_set_ea(inode, name, name_len, value, size, flags, 0);
generally is nicer to use true/false for bool rather than true/0
> err = ntfs_set_ea(inode, "$LXGID", sizeof("$LXGID") - 1, &value,
> - sizeof(value), 0);
> + sizeof(value), 0, true);
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/4] fs/ntfs3: Update i_ctime when xattr is added
2021-10-22 15:53 [PATCH 0/4] fs/ntfs3: Various fixes for xattr and files Konstantin Komarov
` (2 preceding siblings ...)
2021-10-22 15:55 ` [PATCH 3/4] fs/ntfs3: Optimize locking in ntfs_save_wsl_perm Konstantin Komarov
@ 2021-10-22 15:56 ` Konstantin Komarov
2021-10-23 9:40 ` Kari Argillander
3 siblings, 1 reply; 10+ messages in thread
From: Konstantin Komarov @ 2021-10-22 15:56 UTC (permalink / raw)
To: ntfs3; +Cc: linux-kernel, linux-fsdevel
Ctime wasn't updated after setfacl command.
This commit fixes xfstest generic/307
Fixes: be71b5cba2e6 ("fs/ntfs3: Add attrib operations")
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
fs/ntfs3/xattr.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
index bc3144608ce1..702775a559f5 100644
--- a/fs/ntfs3/xattr.c
+++ b/fs/ntfs3/xattr.c
@@ -994,6 +994,9 @@ static noinline int ntfs_setxattr(const struct xattr_handler *handler,
err = ntfs_set_ea(inode, name, name_len, value, size, flags, 0);
out:
+ inode->i_ctime = current_time(inode);
+ mark_inode_dirty(inode);
+
return err;
}
--
2.33.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] fs/ntfs3: Update i_ctime when xattr is added
2021-10-22 15:56 ` [PATCH 4/4] fs/ntfs3: Update i_ctime when xattr is added Konstantin Komarov
@ 2021-10-23 9:40 ` Kari Argillander
0 siblings, 0 replies; 10+ messages in thread
From: Kari Argillander @ 2021-10-23 9:40 UTC (permalink / raw)
To: Konstantin Komarov; +Cc: ntfs3, linux-kernel, linux-fsdevel
On Fri, Oct 22, 2021 at 06:56:07PM +0300, Konstantin Komarov wrote:
> Ctime wasn't updated after setfacl command.
> This commit fixes xfstest generic/307
> Fixes: be71b5cba2e6 ("fs/ntfs3: Add attrib operations")
Because this is fix I would suggest you make this patch 3/4. Usually
fixes should be first so it is easier for stable team to pick them with
confident.
>
> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
> ---
> fs/ntfs3/xattr.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
> index bc3144608ce1..702775a559f5 100644
> --- a/fs/ntfs3/xattr.c
> +++ b/fs/ntfs3/xattr.c
> @@ -994,6 +994,9 @@ static noinline int ntfs_setxattr(const struct xattr_handler *handler,
> err = ntfs_set_ea(inode, name, name_len, value, size, flags, 0);
>
> out:
> + inode->i_ctime = current_time(inode);
> + mark_inode_dirty(inode);
> +
> return err;
> }
>
> --
> 2.33.0
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread