+++ /dev/null
-From: Tony Jones <tonyj@suse.de>
-Subject: Add a struct vfsmount parameter to vfs_unlink()
-
-The vfsmount will be passed down to the LSM hook so that LSMs can compute
-pathnames.
-
-Signed-off-by: Tony Jones <tonyj@suse.de>
-Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
-Signed-off-by: John Johansen <jjohansen@suse.de>
-
----
- fs/ecryptfs/inode.c | 3 ++-
- fs/namei.c | 4 ++--
- fs/nfsd/nfs4recover.c | 2 +-
- fs/nfsd/vfs.c | 2 +-
- include/linux/fs.h | 2 +-
- ipc/mqueue.c | 2 +-
- 6 files changed, 8 insertions(+), 7 deletions(-)
-
---- a/fs/ecryptfs/inode.c
-+++ b/fs/ecryptfs/inode.c
-@@ -445,11 +445,12 @@ static int ecryptfs_unlink(struct inode
- {
- int rc = 0;
- struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
-+ struct vfsmount *lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
- struct inode *lower_dir_inode = ecryptfs_inode_to_lower(dir);
- struct dentry *lower_dir_dentry;
-
- lower_dir_dentry = lock_parent(lower_dentry);
-- rc = vfs_unlink(lower_dir_inode, lower_dentry);
-+ rc = vfs_unlink(lower_dir_inode, lower_dentry, lower_mnt);
- if (rc) {
- printk(KERN_ERR "Error in vfs_unlink; rc = [%d]\n", rc);
- goto out_unlock;
---- a/fs/namei.c
-+++ b/fs/namei.c
-@@ -2248,7 +2248,7 @@ SYSCALL_DEFINE1(rmdir, const char __user
- return do_rmdir(AT_FDCWD, pathname);
- }
-
--int vfs_unlink(struct inode *dir, struct dentry *dentry)
-+int vfs_unlink(struct inode *dir, struct dentry *dentry, struct vfsmount *mnt)
- {
- int error = may_delete(dir, dentry, 0);
-
-@@ -2313,7 +2313,7 @@ static long do_unlinkat(int dfd, const c
- error = mnt_want_write(nd.path.mnt);
- if (error)
- goto exit2;
-- error = vfs_unlink(nd.path.dentry->d_inode, dentry);
-+ error = vfs_unlink(nd.path.dentry->d_inode, dentry, nd.path.mnt);
- mnt_drop_write(nd.path.mnt);
- exit2:
- dput(dentry);
---- a/fs/nfsd/nfs4recover.c
-+++ b/fs/nfsd/nfs4recover.c
-@@ -264,7 +264,7 @@ nfsd4_remove_clid_file(struct dentry *di
- return -EINVAL;
- }
- mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT);
-- status = vfs_unlink(dir->d_inode, dentry);
-+ status = vfs_unlink(dir->d_inode, dentry, rec_dir.path.mnt);
- mutex_unlock(&dir->d_inode->i_mutex);
- return status;
- }
---- a/fs/nfsd/vfs.c
-+++ b/fs/nfsd/vfs.c
-@@ -1832,7 +1832,7 @@ nfsd_unlink(struct svc_rqst *rqstp, stru
- host_err = -EPERM;
- } else
- #endif
-- host_err = vfs_unlink(dirp, rdentry);
-+ host_err = vfs_unlink(dirp, rdentry, exp->ex_path.mnt);
- } else { /* It's RMDIR */
- host_err = vfs_rmdir(dirp, rdentry, exp->ex_path.mnt);
- }
---- a/include/linux/fs.h
-+++ b/include/linux/fs.h
-@@ -1183,7 +1183,7 @@ extern int vfs_mknod(struct inode *, str
- extern int vfs_symlink(struct inode *, struct dentry *, struct vfsmount *, const char *);
- extern int vfs_link(struct dentry *, struct vfsmount *, struct inode *, struct dentry *, struct vfsmount *);
- extern int vfs_rmdir(struct inode *, struct dentry *, struct vfsmount *);
--extern int vfs_unlink(struct inode *, struct dentry *);
-+extern int vfs_unlink(struct inode *, struct dentry *, struct vfsmount *);
- extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
-
- /*
---- a/ipc/mqueue.c
-+++ b/ipc/mqueue.c
-@@ -746,7 +746,7 @@ SYSCALL_DEFINE1(mq_unlink, const char __
- err = mnt_want_write(mqueue_mnt);
- if (err)
- goto out_err;
-- err = vfs_unlink(dentry->d_parent->d_inode, dentry);
-+ err = vfs_unlink(dentry->d_parent->d_inode, dentry, mqueue_mnt);
- mnt_drop_write(mqueue_mnt);
- out_err:
- dput(dentry);