Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert "fs: make vfs_fileattr_[get|set] return -EOPNOTSUPP"

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>

authored by

Andrey Albershteyn and committed by
Christian Brauner
4dd5b5ac a779e27f

+7 -16
+2 -10
fs/file_attr.c
··· 84 84 int error; 85 85 86 86 if (!inode->i_op->fileattr_get) 87 - return -EOPNOTSUPP; 87 + return -ENOIOCTLCMD; 88 88 89 89 error = security_inode_file_getattr(dentry, fa); 90 90 if (error) ··· 270 270 int err; 271 271 272 272 if (!inode->i_op->fileattr_set) 273 - return -EOPNOTSUPP; 273 + return -ENOIOCTLCMD; 274 274 275 275 if (!inode_owner_or_capable(idmap, inode)) 276 276 return -EPERM; ··· 312 312 int err; 313 313 314 314 err = vfs_fileattr_get(file->f_path.dentry, &fa); 315 - if (err == -EOPNOTSUPP) 316 - err = -ENOIOCTLCMD; 317 315 if (!err) 318 316 err = put_user(fa.flags, argp); 319 317 return err; ··· 333 335 fileattr_fill_flags(&fa, flags); 334 336 err = vfs_fileattr_set(idmap, dentry, &fa); 335 337 mnt_drop_write_file(file); 336 - if (err == -EOPNOTSUPP) 337 - err = -ENOIOCTLCMD; 338 338 } 339 339 } 340 340 return err; ··· 345 349 int err; 346 350 347 351 err = vfs_fileattr_get(file->f_path.dentry, &fa); 348 - if (err == -EOPNOTSUPP) 349 - err = -ENOIOCTLCMD; 350 352 if (!err) 351 353 err = copy_fsxattr_to_user(&fa, argp); 352 354 ··· 365 371 if (!err) { 366 372 err = vfs_fileattr_set(idmap, dentry, &fa); 367 373 mnt_drop_write_file(file); 368 - if (err == -EOPNOTSUPP) 369 - err = -ENOIOCTLCMD; 370 374 } 371 375 } 372 376 return err;
-4
fs/fuse/ioctl.c
··· 536 536 cleanup: 537 537 fuse_priv_ioctl_cleanup(inode, ff); 538 538 539 - if (err == -ENOTTY) 540 - err = -EOPNOTSUPP; 541 539 return err; 542 540 } 543 541 ··· 572 574 cleanup: 573 575 fuse_priv_ioctl_cleanup(inode, ff); 574 576 575 - if (err == -ENOTTY) 576 - err = -EOPNOTSUPP; 577 577 return err; 578 578 }
+1 -1
fs/overlayfs/copy_up.c
··· 178 178 err = ovl_real_fileattr_get(old, &oldfa); 179 179 if (err) { 180 180 /* Ntfs-3g returns -EINVAL for "no fileattr support" */ 181 - if (err == -EOPNOTSUPP || err == -EINVAL) 181 + if (err == -ENOTTY || err == -EINVAL) 182 182 return 0; 183 183 pr_warn("failed to retrieve lower fileattr (%pd2, err=%i)\n", 184 184 old->dentry, err);
+4 -1
fs/overlayfs/inode.c
··· 720 720 if (err) 721 721 return err; 722 722 723 - return vfs_fileattr_get(realpath->dentry, fa); 723 + err = vfs_fileattr_get(realpath->dentry, fa); 724 + if (err == -ENOIOCTLCMD) 725 + err = -ENOTTY; 726 + return err; 724 727 } 725 728 726 729 int ovl_fileattr_get(struct dentry *dentry, struct file_kattr *fa)