File tree Expand file tree Collapse file tree 3 files changed +32
-21
lines changed Expand file tree Collapse file tree 3 files changed +32
-21
lines changed Original file line number Diff line number Diff line change @@ -235,27 +235,9 @@ static int check_acl(struct inode *inode, int mask)
235
235
return posix_acl_permission (inode , acl , mask & ~MAY_NOT_BLOCK );
236
236
}
237
237
238
- acl = get_cached_acl (inode , ACL_TYPE_ACCESS );
239
-
240
- /*
241
- * A filesystem can force a ACL callback by just never filling the
242
- * ACL cache. But normally you'd fill the cache either at inode
243
- * instantiation time, or on the first ->get_acl call.
244
- *
245
- * If the filesystem doesn't have a get_acl() function at all, we'll
246
- * just create the negative cache entry.
247
- */
248
- if (acl == ACL_NOT_CACHED ) {
249
- if (inode -> i_op -> get_acl ) {
250
- acl = inode -> i_op -> get_acl (inode , ACL_TYPE_ACCESS );
251
- if (IS_ERR (acl ))
252
- return PTR_ERR (acl );
253
- } else {
254
- set_cached_acl (inode , ACL_TYPE_ACCESS , NULL );
255
- return - EAGAIN ;
256
- }
257
- }
258
-
238
+ acl = get_acl (inode , ACL_TYPE_ACCESS );
239
+ if (IS_ERR (acl ))
240
+ return PTR_ERR (acl );
259
241
if (acl ) {
260
242
int error = posix_acl_permission (inode , acl , mask );
261
243
posix_acl_release (acl );
Original file line number Diff line number Diff line change @@ -26,6 +26,33 @@ EXPORT_SYMBOL(posix_acl_valid);
26
26
EXPORT_SYMBOL (posix_acl_equiv_mode );
27
27
EXPORT_SYMBOL (posix_acl_from_mode );
28
28
29
+ struct posix_acl * get_acl (struct inode * inode , int type )
30
+ {
31
+ struct posix_acl * acl ;
32
+
33
+ acl = get_cached_acl (inode , type );
34
+ if (acl != ACL_NOT_CACHED )
35
+ return acl ;
36
+
37
+ if (!IS_POSIXACL (inode ))
38
+ return NULL ;
39
+
40
+ /*
41
+ * A filesystem can force a ACL callback by just never filling the
42
+ * ACL cache. But normally you'd fill the cache either at inode
43
+ * instantiation time, or on the first ->get_acl call.
44
+ *
45
+ * If the filesystem doesn't have a get_acl() function at all, we'll
46
+ * just create the negative cache entry.
47
+ */
48
+ if (!inode -> i_op -> get_acl ) {
49
+ set_cached_acl (inode , type , NULL );
50
+ return NULL ;
51
+ }
52
+ return inode -> i_op -> get_acl (inode , type );
53
+ }
54
+ EXPORT_SYMBOL (get_acl );
55
+
29
56
/*
30
57
* Init a fresh posix_acl
31
58
*/
Original file line number Diff line number Diff line change @@ -175,4 +175,6 @@ static inline void cache_no_acl(struct inode *inode)
175
175
#endif
176
176
}
177
177
178
+ struct posix_acl * get_acl (struct inode * inode , int type );
179
+
178
180
#endif /* __LINUX_POSIX_ACL_H */
You can’t perform that action at this time.
0 commit comments