@@ -136,6 +136,16 @@ xattr_permission(struct inode *inode, const char *name, int mask)
136136 return inode_permission (inode , mask );
137137}
138138
139+ int
140+ __vfs_setxattr (struct dentry * dentry , struct inode * inode , const char * name ,
141+ const void * value , size_t size , int flags )
142+ {
143+ if (!inode -> i_op -> setxattr )
144+ return - EOPNOTSUPP ;
145+ return inode -> i_op -> setxattr (dentry , inode , name , value , size , flags );
146+ }
147+ EXPORT_SYMBOL (__vfs_setxattr );
148+
139149/**
140150 * __vfs_setxattr_noperm - perform setxattr operation without performing
141151 * permission checks.
@@ -163,7 +173,7 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
163173 if (issec )
164174 inode -> i_flags &= ~S_NOSEC ;
165175 if (inode -> i_op -> setxattr ) {
166- error = inode -> i_op -> setxattr (dentry , inode , name , value , size , flags );
176+ error = __vfs_setxattr (dentry , inode , name , value , size , flags );
167177 if (!error ) {
168178 fsnotify_xattr (dentry );
169179 security_inode_post_setxattr (dentry , name , value ,
@@ -274,6 +284,16 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
274284 return error ;
275285}
276286
287+ ssize_t
288+ __vfs_getxattr (struct dentry * dentry , struct inode * inode , const char * name ,
289+ void * value , size_t size )
290+ {
291+ if (!inode -> i_op -> getxattr )
292+ return - EOPNOTSUPP ;
293+ return inode -> i_op -> getxattr (dentry , inode , name , value , size );
294+ }
295+ EXPORT_SYMBOL (__vfs_getxattr );
296+
277297ssize_t
278298vfs_getxattr (struct dentry * dentry , const char * name , void * value , size_t size )
279299{
@@ -301,13 +321,7 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
301321 return ret ;
302322 }
303323nolsm :
304- if (inode -> i_op -> getxattr )
305- error = inode -> i_op -> getxattr (dentry , inode , name , value , size );
306- else
307- error = - EOPNOTSUPP ;
308-
309- return error ;
310-
324+ return __vfs_getxattr (dentry , inode , name , value , size );
311325}
312326EXPORT_SYMBOL_GPL (vfs_getxattr );
313327
@@ -332,13 +346,21 @@ vfs_listxattr(struct dentry *d, char *list, size_t size)
332346EXPORT_SYMBOL_GPL (vfs_listxattr );
333347
334348int
335- vfs_removexattr (struct dentry * dentry , const char * name )
349+ __vfs_removexattr (struct dentry * dentry , const char * name )
336350{
337351 struct inode * inode = dentry -> d_inode ;
338- int error ;
339352
340353 if (!inode -> i_op -> removexattr )
341354 return - EOPNOTSUPP ;
355+ return inode -> i_op -> removexattr (dentry , name );
356+ }
357+ EXPORT_SYMBOL (__vfs_removexattr );
358+
359+ int
360+ vfs_removexattr (struct dentry * dentry , const char * name )
361+ {
362+ struct inode * inode = dentry -> d_inode ;
363+ int error ;
342364
343365 error = xattr_permission (inode , name , MAY_WRITE );
344366 if (error )
@@ -349,7 +371,7 @@ vfs_removexattr(struct dentry *dentry, const char *name)
349371 if (error )
350372 goto out ;
351373
352- error = inode -> i_op -> removexattr (dentry , name );
374+ error = __vfs_removexattr (dentry , name );
353375
354376 if (!error ) {
355377 fsnotify_xattr (dentry );
0 commit comments