@@ -136,6 +136,16 @@ xattr_permission(struct inode *inode, const char *name, int mask)
136
136
return inode_permission (inode , mask );
137
137
}
138
138
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
+
139
149
/**
140
150
* __vfs_setxattr_noperm - perform setxattr operation without performing
141
151
* permission checks.
@@ -163,7 +173,7 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
163
173
if (issec )
164
174
inode -> i_flags &= ~S_NOSEC ;
165
175
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 );
167
177
if (!error ) {
168
178
fsnotify_xattr (dentry );
169
179
security_inode_post_setxattr (dentry , name , value ,
@@ -274,6 +284,16 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
274
284
return error ;
275
285
}
276
286
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
+
277
297
ssize_t
278
298
vfs_getxattr (struct dentry * dentry , const char * name , void * value , size_t size )
279
299
{
@@ -301,13 +321,7 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
301
321
return ret ;
302
322
}
303
323
nolsm :
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 );
311
325
}
312
326
EXPORT_SYMBOL_GPL (vfs_getxattr );
313
327
@@ -332,13 +346,21 @@ vfs_listxattr(struct dentry *d, char *list, size_t size)
332
346
EXPORT_SYMBOL_GPL (vfs_listxattr );
333
347
334
348
int
335
- vfs_removexattr (struct dentry * dentry , const char * name )
349
+ __vfs_removexattr (struct dentry * dentry , const char * name )
336
350
{
337
351
struct inode * inode = dentry -> d_inode ;
338
- int error ;
339
352
340
353
if (!inode -> i_op -> removexattr )
341
354
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 ;
342
364
343
365
error = xattr_permission (inode , name , MAY_WRITE );
344
366
if (error )
@@ -349,7 +371,7 @@ vfs_removexattr(struct dentry *dentry, const char *name)
349
371
if (error )
350
372
goto out ;
351
373
352
- error = inode -> i_op -> removexattr (dentry , name );
374
+ error = __vfs_removexattr (dentry , name );
353
375
354
376
if (!error ) {
355
377
fsnotify_xattr (dentry );
0 commit comments