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>
这个提交包含在:
@@ -156,7 +156,7 @@ static void *jffs2_acl_to_medium(const struct posix_acl *acl, size_t *size)
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
static struct posix_acl *jffs2_get_acl(struct inode *inode, int type)
|
||||
struct posix_acl *jffs2_get_acl(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl *acl;
|
||||
char *value = NULL;
|
||||
@@ -259,22 +259,6 @@ static int jffs2_set_acl(struct inode *inode, int type, struct posix_acl *acl)
|
||||
return rc;
|
||||
}
|
||||
|
||||
int jffs2_check_acl(struct inode *inode, int mask)
|
||||
{
|
||||
struct posix_acl *acl;
|
||||
int rc;
|
||||
|
||||
acl = jffs2_get_acl(inode, ACL_TYPE_ACCESS);
|
||||
if (IS_ERR(acl))
|
||||
return PTR_ERR(acl);
|
||||
if (acl) {
|
||||
rc = posix_acl_permission(inode, acl, mask);
|
||||
posix_acl_release(acl);
|
||||
return rc;
|
||||
}
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
int jffs2_init_acl_pre(struct inode *dir_i, struct inode *inode, mode_t *i_mode)
|
||||
{
|
||||
struct posix_acl *acl;
|
||||
|
@@ -26,7 +26,7 @@ struct jffs2_acl_header {
|
||||
|
||||
#ifdef CONFIG_JFFS2_FS_POSIX_ACL
|
||||
|
||||
extern int jffs2_check_acl(struct inode *, int);
|
||||
struct posix_acl *jffs2_get_acl(struct inode *inode, int type);
|
||||
extern int jffs2_acl_chmod(struct inode *);
|
||||
extern int jffs2_init_acl_pre(struct inode *, struct inode *, mode_t *);
|
||||
extern int jffs2_init_acl_post(struct inode *);
|
||||
@@ -36,7 +36,7 @@ extern const struct xattr_handler jffs2_acl_default_xattr_handler;
|
||||
|
||||
#else
|
||||
|
||||
#define jffs2_check_acl (NULL)
|
||||
#define jffs2_get_acl (NULL)
|
||||
#define jffs2_acl_chmod(inode) (0)
|
||||
#define jffs2_init_acl_pre(dir_i,inode,mode) (0)
|
||||
#define jffs2_init_acl_post(inode) (0)
|
||||
|
@@ -56,7 +56,7 @@ const struct inode_operations jffs2_dir_inode_operations =
|
||||
.rmdir = jffs2_rmdir,
|
||||
.mknod = jffs2_mknod,
|
||||
.rename = jffs2_rename,
|
||||
.check_acl = jffs2_check_acl,
|
||||
.get_acl = jffs2_get_acl,
|
||||
.setattr = jffs2_setattr,
|
||||
.setxattr = jffs2_setxattr,
|
||||
.getxattr = jffs2_getxattr,
|
||||
|
@@ -63,7 +63,7 @@ const struct file_operations jffs2_file_operations =
|
||||
|
||||
const struct inode_operations jffs2_file_inode_operations =
|
||||
{
|
||||
.check_acl = jffs2_check_acl,
|
||||
.get_acl = jffs2_get_acl,
|
||||
.setattr = jffs2_setattr,
|
||||
.setxattr = jffs2_setxattr,
|
||||
.getxattr = jffs2_getxattr,
|
||||
|
@@ -20,7 +20,7 @@ const struct inode_operations jffs2_symlink_inode_operations =
|
||||
{
|
||||
.readlink = generic_readlink,
|
||||
.follow_link = jffs2_follow_link,
|
||||
.check_acl = jffs2_check_acl,
|
||||
.get_acl = jffs2_get_acl,
|
||||
.setattr = jffs2_setattr,
|
||||
.setxattr = jffs2_setxattr,
|
||||
.getxattr = jffs2_getxattr,
|
||||
|
在新工单中引用
屏蔽一个用户