diff options
author | Christoph Hellwig <hch@lst.de> | 2011-07-23 11:37:31 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-25 14:30:23 -0400 |
commit | 4e34e719e457f2e031297175410fc0bd4016a085 (patch) | |
tree | ab969a371e0d2efc6bfbf503ca6cdfce3af3bf6c /Documentation | |
parent | edde854e8bb34a7f32fa993d721f1da0faf64165 (diff) |
fs: take the ACL checks to common code
Replace the ->check_acl method with a ->get_acl method that simply reads an
ACL from disk after having a cache miss. This means we can replace the ACL
checking boilerplate code with a single implementation in namei.c.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/filesystems/Locking | 4 | ||||
-rw-r--r-- | Documentation/filesystems/porting | 7 | ||||
-rw-r--r-- | Documentation/filesystems/vfs.txt | 2 |
3 files changed, 7 insertions, 6 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index ca7e25292542..7e4699146fe1 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -52,7 +52,7 @@ ata *); | |||
52 | void (*put_link) (struct dentry *, struct nameidata *, void *); | 52 | void (*put_link) (struct dentry *, struct nameidata *, void *); |
53 | void (*truncate) (struct inode *); | 53 | void (*truncate) (struct inode *); |
54 | int (*permission) (struct inode *, int, unsigned int); | 54 | int (*permission) (struct inode *, int, unsigned int); |
55 | int (*check_acl)(struct inode *, int); | 55 | int (*get_acl)(struct inode *, int); |
56 | int (*setattr) (struct dentry *, struct iattr *); | 56 | int (*setattr) (struct dentry *, struct iattr *); |
57 | int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); | 57 | int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); |
58 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 58 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
@@ -80,7 +80,7 @@ put_link: no | |||
80 | truncate: yes (see below) | 80 | truncate: yes (see below) |
81 | setattr: yes | 81 | setattr: yes |
82 | permission: no (may not block if called in rcu-walk mode) | 82 | permission: no (may not block if called in rcu-walk mode) |
83 | check_acl: no | 83 | get_acl: no |
84 | getattr: no | 84 | getattr: no |
85 | setxattr: yes | 85 | setxattr: yes |
86 | getxattr: no | 86 | getxattr: no |
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index 7f8861d341ea..b4a3d765ff9a 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
@@ -407,10 +407,11 @@ to some pointer to returning that pointer. On errors return ERR_PTR(...). | |||
407 | 407 | ||
408 | -- | 408 | -- |
409 | [mandatory] | 409 | [mandatory] |
410 | ->permission(), generic_permission() and ->check_acl() have lost flags | 410 | ->permission() and generic_permission()have lost flags |
411 | argument; instead of passing IPERM_FLAG_RCU we add MAY_NOT_BLOCK into mask. | 411 | argument; instead of passing IPERM_FLAG_RCU we add MAY_NOT_BLOCK into mask. |
412 | generic_permission() has also lost the check_acl argument; if you want | 412 | generic_permission() has also lost the check_acl argument; ACL checking |
413 | non-NULL to be used for that inode, put it into ->i_op->check_acl. | 413 | has been taken to VFS and filesystems need to provide a non-NULL ->i_op->get_acl |
414 | to read an ACL from disk. | ||
414 | 415 | ||
415 | -- | 416 | -- |
416 | [mandatory] | 417 | [mandatory] |
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index eff6617c9a0f..52d8fb81cfff 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -356,7 +356,7 @@ struct inode_operations { | |||
356 | void (*put_link) (struct dentry *, struct nameidata *, void *); | 356 | void (*put_link) (struct dentry *, struct nameidata *, void *); |
357 | void (*truncate) (struct inode *); | 357 | void (*truncate) (struct inode *); |
358 | int (*permission) (struct inode *, int); | 358 | int (*permission) (struct inode *, int); |
359 | int (*check_acl)(struct inode *, int); | 359 | int (*get_acl)(struct inode *, int); |
360 | int (*setattr) (struct dentry *, struct iattr *); | 360 | int (*setattr) (struct dentry *, struct iattr *); |
361 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); | 361 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); |
362 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 362 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |