]> www.infradead.org Git - users/hch/misc.git/commitdiff
Revert "fs: make vfs_fileattr_[get|set] return -EOPNOTSUPP"
authorAndrey Albershteyn <aalbersh@redhat.com>
Wed, 8 Oct 2025 12:44:17 +0000 (14:44 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 10 Oct 2025 11:44:03 +0000 (13:44 +0200)
This reverts commit 474b155adf3927d2c944423045757b54aa1ca4de.

This patch caused regression in ioctl_setflags(). Underlying filesystems
use EOPNOTSUPP to indicate that flag is not supported. This error is
also gets converted in ioctl_setflags(). Therefore, for unsupported
flags error changed from EOPNOSUPP to ENOIOCTLCMD.

Link: https://lore.kernel.org/linux-xfs/a622643f-1585-40b0-9441-cf7ece176e83@kernel.org/
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/file_attr.c
fs/fuse/ioctl.c
fs/overlayfs/copy_up.c
fs/overlayfs/inode.c

index 12424d4945d0a35641f7828a6a1fd6d0e2302935..460b2dd21a85281bdfa5fda96c1a21441e8ab191 100644 (file)
@@ -84,7 +84,7 @@ int vfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
        int error;
 
        if (!inode->i_op->fileattr_get)
-               return -EOPNOTSUPP;
+               return -ENOIOCTLCMD;
 
        error = security_inode_file_getattr(dentry, fa);
        if (error)
@@ -270,7 +270,7 @@ int vfs_fileattr_set(struct mnt_idmap *idmap, struct dentry *dentry,
        int err;
 
        if (!inode->i_op->fileattr_set)
-               return -EOPNOTSUPP;
+               return -ENOIOCTLCMD;
 
        if (!inode_owner_or_capable(idmap, inode))
                return -EPERM;
@@ -312,8 +312,6 @@ int ioctl_getflags(struct file *file, unsigned int __user *argp)
        int err;
 
        err = vfs_fileattr_get(file->f_path.dentry, &fa);
-       if (err == -EOPNOTSUPP)
-               err = -ENOIOCTLCMD;
        if (!err)
                err = put_user(fa.flags, argp);
        return err;
@@ -335,8 +333,6 @@ int ioctl_setflags(struct file *file, unsigned int __user *argp)
                        fileattr_fill_flags(&fa, flags);
                        err = vfs_fileattr_set(idmap, dentry, &fa);
                        mnt_drop_write_file(file);
-                       if (err == -EOPNOTSUPP)
-                               err = -ENOIOCTLCMD;
                }
        }
        return err;
@@ -349,8 +345,6 @@ int ioctl_fsgetxattr(struct file *file, void __user *argp)
        int err;
 
        err = vfs_fileattr_get(file->f_path.dentry, &fa);
-       if (err == -EOPNOTSUPP)
-               err = -ENOIOCTLCMD;
        if (!err)
                err = copy_fsxattr_to_user(&fa, argp);
 
@@ -371,8 +365,6 @@ int ioctl_fssetxattr(struct file *file, void __user *argp)
                if (!err) {
                        err = vfs_fileattr_set(idmap, dentry, &fa);
                        mnt_drop_write_file(file);
-                       if (err == -EOPNOTSUPP)
-                               err = -ENOIOCTLCMD;
                }
        }
        return err;
index 57032eadca6c276bd9af8ce7107bc83c39b1473e..fdc175e93f74743eb4d2e5a4bc688df1c62e64c4 100644 (file)
@@ -536,8 +536,6 @@ int fuse_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
 cleanup:
        fuse_priv_ioctl_cleanup(inode, ff);
 
-       if (err == -ENOTTY)
-               err = -EOPNOTSUPP;
        return err;
 }
 
@@ -574,7 +572,5 @@ int fuse_fileattr_set(struct mnt_idmap *idmap,
 cleanup:
        fuse_priv_ioctl_cleanup(inode, ff);
 
-       if (err == -ENOTTY)
-               err = -EOPNOTSUPP;
        return err;
 }
index aac7e34f56c1fc5d581b5fb22c26c5f599eb2caa..604a82acd1645491473dbd48f48013f63f2b37dc 100644 (file)
@@ -178,7 +178,7 @@ static int ovl_copy_fileattr(struct inode *inode, const struct path *old,
        err = ovl_real_fileattr_get(old, &oldfa);
        if (err) {
                /* Ntfs-3g returns -EINVAL for "no fileattr support" */
-               if (err == -EOPNOTSUPP || err == -EINVAL)
+               if (err == -ENOTTY || err == -EINVAL)
                        return 0;
                pr_warn("failed to retrieve lower fileattr (%pd2, err=%i)\n",
                        old->dentry, err);
index aaa4cf579561299c50046f5ded03d93f056c370c..e11f310ce092adc871506b7632b3b22efaa38873 100644 (file)
@@ -720,7 +720,10 @@ int ovl_real_fileattr_get(const struct path *realpath, struct file_kattr *fa)
        if (err)
                return err;
 
-       return vfs_fileattr_get(realpath->dentry, fa);
+       err = vfs_fileattr_get(realpath->dentry, fa);
+       if (err == -ENOIOCTLCMD)
+               err = -ENOTTY;
+       return err;
 }
 
 int ovl_fileattr_get(struct dentry *dentry, struct file_kattr *fa)