1
Add a struct vfsmount parameter to vfs_setxattr()
3
Signed-off-by: Tony Jones <tonyj@suse.de>
4
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
7
===================================================================
10
@@ -396,7 +396,8 @@ static ssize_t nfsd_getxattr(struct dent
12
#if defined(CONFIG_NFSD_V4)
14
-set_nfsv4_acl_one(struct dentry *dentry, struct posix_acl *pacl, char *key)
15
+set_nfsv4_acl_one(struct dentry *dentry, struct vfsmount *mnt,
16
+ struct posix_acl *pacl, char *key)
20
@@ -415,7 +416,7 @@ set_nfsv4_acl_one(struct dentry *dentry,
24
- error = vfs_setxattr(dentry, key, buf, len, 0);
25
+ error = vfs_setxattr(dentry, mnt, key, buf, len, 0);
29
@@ -428,6 +429,7 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
32
struct dentry *dentry;
33
+ struct vfsmount *mnt;
35
struct posix_acl *pacl = NULL, *dpacl = NULL;
36
unsigned int flags = 0;
37
@@ -438,6 +440,7 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
40
dentry = fhp->fh_dentry;
41
+ mnt = fhp->fh_export->ex_mnt;
42
inode = dentry->d_inode;
43
if (S_ISDIR(inode->i_mode))
45
@@ -449,12 +452,14 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
46
} else if (host_error < 0)
49
- host_error = set_nfsv4_acl_one(dentry, pacl, POSIX_ACL_XATTR_ACCESS);
50
+ host_error = set_nfsv4_acl_one(dentry, mnt, pacl,
51
+ POSIX_ACL_XATTR_ACCESS);
55
if (S_ISDIR(inode->i_mode)) {
56
- host_error = set_nfsv4_acl_one(dentry, dpacl, POSIX_ACL_XATTR_DEFAULT);
57
+ host_error = set_nfsv4_acl_one(dentry, mnt, dpacl,
58
+ POSIX_ACL_XATTR_DEFAULT);
62
@@ -1975,7 +1980,8 @@ nfsd_set_posix_acl(struct svc_fh *fhp, i
66
- error = vfs_setxattr(fhp->fh_dentry, name, value, size, 0);
67
+ error = vfs_setxattr(fhp->fh_dentry, fhp->fh_export->ex_mnt,
68
+ name, value, size,0);
70
if (!S_ISDIR(inode->i_mode) && type == ACL_TYPE_DEFAULT)
73
===================================================================
76
@@ -70,8 +70,8 @@ xattr_permission(struct inode *inode, co
80
-vfs_setxattr(struct dentry *dentry, char *name, void *value,
81
- size_t size, int flags)
82
+vfs_setxattr(struct dentry *dentry, struct vfsmount *mnt, char *name,
83
+ void *value, size_t size, int flags)
85
struct inode *inode = dentry->d_inode;
87
@@ -194,8 +194,8 @@ EXPORT_SYMBOL_GPL(vfs_removexattr);
88
* Extended attribute SET operations
91
-setxattr(struct dentry *d, char __user *name, void __user *value,
92
- size_t size, int flags)
93
+setxattr(struct dentry *dentry, struct vfsmount *mnt, char __user *name,
94
+ void __user *value, size_t size, int flags)
98
@@ -222,7 +222,7 @@ setxattr(struct dentry *d, char __user *
102
- error = vfs_setxattr(d, kname, kvalue, size, flags);
103
+ error = vfs_setxattr(dentry, mnt, kname, kvalue, size, flags);
107
@@ -237,7 +237,7 @@ sys_setxattr(char __user *path, char __u
108
error = user_path_walk(path, &nd);
111
- error = setxattr(nd.dentry, name, value, size, flags);
112
+ error = setxattr(nd.dentry, nd.mnt, name, value, size, flags);
116
@@ -252,7 +252,7 @@ sys_lsetxattr(char __user *path, char __
117
error = user_path_walk_link(path, &nd);
120
- error = setxattr(nd.dentry, name, value, size, flags);
121
+ error = setxattr(nd.dentry, nd.mnt, name, value, size, flags);
125
@@ -270,7 +270,7 @@ sys_fsetxattr(int fd, char __user *name,
127
dentry = f->f_path.dentry;
128
audit_inode(NULL, dentry->d_inode);
129
- error = setxattr(dentry, name, value, size, flags);
130
+ error = setxattr(dentry, f->f_vfsmnt, name, value, size, flags);
134
Index: b/include/linux/xattr.h
135
===================================================================
136
--- a/include/linux/xattr.h
137
+++ b/include/linux/xattr.h
138
@@ -48,7 +48,8 @@ struct xattr_handler {
140
ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t);
141
ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
142
-int vfs_setxattr(struct dentry *, char *, void *, size_t, int);
143
+int vfs_setxattr(struct dentry *, struct vfsmount *, char *, void *, size_t,
145
int vfs_removexattr(struct dentry *, char *);
147
ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size);