diff --git a/fs/attr.c b/fs/attr.c index b92f2be05a66..b4bbdbd4c8ca 100644 --- a/fs/attr.c +++ b/fs/attr.c @@ -220,7 +220,7 @@ EXPORT_SYMBOL(setattr_copy); * the file open for write, as there can be no conflicting delegation in * that case. */ -int notify_change2(struct vfsmount *mnt, struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode) +int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode) { struct inode *inode = dentry->d_inode; umode_t mode = inode->i_mode; @@ -332,9 +332,7 @@ int notify_change2(struct vfsmount *mnt, struct dentry * dentry, struct iattr * if (error) return error; - if (mnt && inode->i_op->setattr2) - error = inode->i_op->setattr2(mnt, dentry, attr); - else if (inode->i_op->setattr) + if (inode->i_op->setattr) error = inode->i_op->setattr(dentry, attr); else error = simple_setattr(dentry, attr); @@ -347,10 +345,4 @@ int notify_change2(struct vfsmount *mnt, struct dentry * dentry, struct iattr * return error; } -EXPORT_SYMBOL_GPL(notify_change2); - -int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode) -{ - return notify_change2(NULL, dentry, attr, delegated_inode); -} EXPORT_SYMBOL(notify_change); diff --git a/fs/coredump.c b/fs/coredump.c index e69e1421f834..5c0375e7440f 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -777,7 +777,7 @@ void do_coredump(const kernel_siginfo_t *siginfo) goto close_fail; if (!(cprm.file->f_mode & FMODE_CAN_WRITE)) goto close_fail; - if (do_truncate2(cprm.file->f_path.mnt, cprm.file->f_path.dentry, 0, 0, cprm.file)) + if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file)) goto close_fail; } diff --git a/fs/inode.c b/fs/inode.c index 64d502af7549..dc5de2ea5e7f 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -1819,7 +1819,7 @@ int dentry_needs_remove_privs(struct dentry *dentry) return mask; } -static int __remove_privs(struct vfsmount *mnt, struct dentry *dentry, int kill) +static int __remove_privs(struct dentry *dentry, int kill) { struct iattr newattrs; @@ -1828,7 +1828,7 @@ static int __remove_privs(struct vfsmount *mnt, struct dentry *dentry, int kill) * Note we call this on write, so notify_change will not * encounter any conflicting delegations: */ - return notify_change2(mnt, dentry, &newattrs, NULL); + return notify_change(dentry, &newattrs, NULL); } /* @@ -1855,7 +1855,7 @@ int file_remove_privs(struct file *file) if (kill < 0) return kill; if (kill) - error = __remove_privs(file->f_path.mnt, dentry, kill); + error = __remove_privs(dentry, kill); if (!error) inode_has_no_xattr(inode); diff --git a/fs/namei.c b/fs/namei.c index 51c1c04397f6..8a57cfd687e2 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3080,7 +3080,7 @@ static int handle_truncate(struct file *filp) if (!error) error = security_path_truncate(path); if (!error) { - error = do_truncate2(path->mnt, path->dentry, 0, + error = do_truncate(path->dentry, 0, ATTR_MTIME|ATTR_CTIME|ATTR_OPEN, filp); } diff --git a/fs/open.c b/fs/open.c index db4f254309a9..dcbd01611237 100644 --- a/fs/open.c +++ b/fs/open.c @@ -35,8 +35,8 @@ #include "internal.h" -int do_truncate2(struct vfsmount *mnt, struct dentry *dentry, loff_t length, - unsigned int time_attrs, struct file *filp) +int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, + struct file *filp) { int ret; struct iattr newattrs; @@ -61,24 +61,17 @@ int do_truncate2(struct vfsmount *mnt, struct dentry *dentry, loff_t length, inode_lock(dentry->d_inode); /* Note any delegations or leases have already been broken: */ - ret = notify_change2(mnt, dentry, &newattrs, NULL); + ret = notify_change(dentry, &newattrs, NULL); inode_unlock(dentry->d_inode); return ret; } -int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, - struct file *filp) -{ - return do_truncate2(NULL, dentry, length, time_attrs, filp); -} long vfs_truncate(const struct path *path, loff_t length) { struct inode *inode; - struct vfsmount *mnt; long error; inode = path->dentry->d_inode; - mnt = path->mnt; /* For directories it's -EISDIR, for other non-regulars - -EINVAL */ if (S_ISDIR(inode->i_mode)) @@ -114,7 +107,7 @@ long vfs_truncate(const struct path *path, loff_t length) if (!error) error = security_path_truncate(path); if (!error) - error = do_truncate2(mnt, path->dentry, length, 0, NULL); + error = do_truncate(path->dentry, length, 0, NULL); put_write_and_out: put_write_access(inode); @@ -163,7 +156,6 @@ long do_sys_ftruncate(unsigned int fd, loff_t length, int small) { struct inode *inode; struct dentry *dentry; - struct vfsmount *mnt; struct fd f; int error; @@ -180,7 +172,6 @@ long do_sys_ftruncate(unsigned int fd, loff_t length, int small) small = 0; dentry = f.file->f_path.dentry; - mnt = f.file->f_path.mnt; inode = dentry->d_inode; error = -EINVAL; if (!S_ISREG(inode->i_mode) || !(f.file->f_mode & FMODE_WRITE)) @@ -201,7 +192,7 @@ long do_sys_ftruncate(unsigned int fd, loff_t length, int small) if (!error) error = security_path_truncate(&f.file->f_path); if (!error) - error = do_truncate2(mnt, dentry, length, ATTR_MTIME|ATTR_CTIME, f.file); + error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, f.file); sb_end_write(inode->i_sb); out_putf: fdput(f); @@ -567,7 +558,7 @@ static int chmod_common(const struct path *path, umode_t mode) goto out_unlock; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; - error = notify_change2(path->mnt, path->dentry, &newattrs, &delegated_inode); + error = notify_change(path->dentry, &newattrs, &delegated_inode); out_unlock: inode_unlock(inode); if (delegated_inode) { @@ -658,7 +649,7 @@ static int chown_common(const struct path *path, uid_t user, gid_t group) inode_lock(inode); error = security_path_chown(path, uid, gid); if (!error) - error = notify_change2(path->mnt, path->dentry, &newattrs, &delegated_inode); + error = notify_change(path->dentry, &newattrs, &delegated_inode); inode_unlock(inode); if (delegated_inode) { error = break_deleg_wait(&delegated_inode); diff --git a/fs/utimes.c b/fs/utimes.c index 283793da6dbd..090739322463 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -57,7 +57,7 @@ static int utimes_common(const struct path *path, struct timespec64 *times) } retry_deleg: inode_lock(inode); - error = notify_change2(path->mnt, path->dentry, &newattrs, &delegated_inode); + error = notify_change(path->dentry, &newattrs, &delegated_inode); inode_unlock(inode); if (delegated_inode) { error = break_deleg_wait(&delegated_inode); diff --git a/include/linux/fs.h b/include/linux/fs.h index 3aa50d57e189..064a3c955cad 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1928,8 +1928,7 @@ struct inode_operations { int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int); int (*setattr) (struct dentry *, struct iattr *); - int (*setattr2) (struct vfsmount *, struct dentry *, struct iattr *); - int (*getattr) (const struct path *, struct kstat *, u32, unsigned int); + int (*getattr) (const struct path *, struct kstat *, u32, unsigned int); ssize_t (*listxattr) (struct dentry *, char *, size_t); int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); @@ -2597,8 +2596,6 @@ static_assert(offsetof(struct filename, iname) % sizeof(long) == 0); extern long vfs_truncate(const struct path *, loff_t); extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs, struct file *filp); -extern int do_truncate2(struct vfsmount *, struct dentry *, loff_t start, - unsigned int time_attrs, struct file *filp); extern int vfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len); extern long do_sys_open(int dfd, const char __user *filename, int flags, @@ -2946,7 +2943,6 @@ extern void emergency_remount(void); extern sector_t bmap(struct inode *, sector_t); #endif extern int notify_change(struct dentry *, struct iattr *, struct inode **); -extern int notify_change2(struct vfsmount *, struct dentry *, struct iattr *, struct inode **); extern int inode_permission(struct inode *, int); extern int generic_permission(struct inode *, int); extern int __check_sticky(struct inode *dir, struct inode *inode);