Skip to content

Commit

Permalink
ext[234]: move over to 'check_acl' permission model
Browse files Browse the repository at this point in the history
Don't implement per-filesystem 'extX_permission()' functions that have
to be called for every path component operation, and instead just expose
the actual ACL checking so that the VFS layer can now do it for us.

Reviewed-by: James Morris <jmorris@namei.org>
Acked-by: Serge Hallyn <serue@us.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
torvalds committed Sep 8, 2009
1 parent 6d848a4 commit 1d5ccd1
Show file tree
Hide file tree
Showing 12 changed files with 18 additions and 36 deletions.
8 changes: 1 addition & 7 deletions fs/ext2/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ ext2_set_acl(struct inode *inode, int type, struct posix_acl *acl)
return error;
}

static int
int
ext2_check_acl(struct inode *inode, int mask)
{
struct posix_acl *acl = ext2_get_acl(inode, ACL_TYPE_ACCESS);
Expand All @@ -246,12 +246,6 @@ ext2_check_acl(struct inode *inode, int mask)
return -EAGAIN;
}

int
ext2_permission(struct inode *inode, int mask)
{
return generic_permission(inode, mask, ext2_check_acl);
}

/*
* Initialize the ACLs of a new inode. Called from ext2_new_inode.
*
Expand Down
4 changes: 2 additions & 2 deletions fs/ext2/acl.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ static inline int ext2_acl_count(size_t size)
#ifdef CONFIG_EXT2_FS_POSIX_ACL

/* acl.c */
extern int ext2_permission (struct inode *, int);
extern int ext2_check_acl (struct inode *, int);
extern int ext2_acl_chmod (struct inode *);
extern int ext2_init_acl (struct inode *, struct inode *);

#else
#include <linux/sched.h>
#define ext2_permission NULL
#define ext2_check_acl NULL
#define ext2_get_acl NULL
#define ext2_set_acl NULL

Expand Down
2 changes: 1 addition & 1 deletion fs/ext2/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,6 @@ const struct inode_operations ext2_file_inode_operations = {
.removexattr = generic_removexattr,
#endif
.setattr = ext2_setattr,
.permission = ext2_permission,
.check_acl = ext2_check_acl,
.fiemap = ext2_fiemap,
};
4 changes: 2 additions & 2 deletions fs/ext2/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ const struct inode_operations ext2_dir_inode_operations = {
.removexattr = generic_removexattr,
#endif
.setattr = ext2_setattr,
.permission = ext2_permission,
.check_acl = ext2_check_acl,
};

const struct inode_operations ext2_special_inode_operations = {
Expand All @@ -411,5 +411,5 @@ const struct inode_operations ext2_special_inode_operations = {
.removexattr = generic_removexattr,
#endif
.setattr = ext2_setattr,
.permission = ext2_permission,
.check_acl = ext2_check_acl,
};
8 changes: 1 addition & 7 deletions fs/ext3/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ ext3_set_acl(handle_t *handle, struct inode *inode, int type,
return error;
}

static int
int
ext3_check_acl(struct inode *inode, int mask)
{
struct posix_acl *acl = ext3_get_acl(inode, ACL_TYPE_ACCESS);
Expand All @@ -254,12 +254,6 @@ ext3_check_acl(struct inode *inode, int mask)
return -EAGAIN;
}

int
ext3_permission(struct inode *inode, int mask)
{
return generic_permission(inode, mask, ext3_check_acl);
}

/*
* Initialize the ACLs of a new inode. Called from ext3_new_inode.
*
Expand Down
4 changes: 2 additions & 2 deletions fs/ext3/acl.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ static inline int ext3_acl_count(size_t size)
#ifdef CONFIG_EXT3_FS_POSIX_ACL

/* acl.c */
extern int ext3_permission (struct inode *, int);
extern int ext3_check_acl (struct inode *, int);
extern int ext3_acl_chmod (struct inode *);
extern int ext3_init_acl (handle_t *, struct inode *, struct inode *);

#else /* CONFIG_EXT3_FS_POSIX_ACL */
#include <linux/sched.h>
#define ext3_permission NULL
#define ext3_check_acl NULL

static inline int
ext3_acl_chmod(struct inode *inode)
Expand Down
2 changes: 1 addition & 1 deletion fs/ext3/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ const struct inode_operations ext3_file_inode_operations = {
.listxattr = ext3_listxattr,
.removexattr = generic_removexattr,
#endif
.permission = ext3_permission,
.check_acl = ext3_check_acl,
.fiemap = ext3_fiemap,
};

4 changes: 2 additions & 2 deletions fs/ext3/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -2445,7 +2445,7 @@ const struct inode_operations ext3_dir_inode_operations = {
.listxattr = ext3_listxattr,
.removexattr = generic_removexattr,
#endif
.permission = ext3_permission,
.check_acl = ext3_check_acl,
};

const struct inode_operations ext3_special_inode_operations = {
Expand All @@ -2456,5 +2456,5 @@ const struct inode_operations ext3_special_inode_operations = {
.listxattr = ext3_listxattr,
.removexattr = generic_removexattr,
#endif
.permission = ext3_permission,
.check_acl = ext3_check_acl,
};
8 changes: 1 addition & 7 deletions fs/ext4/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type,
return error;
}

static int
int
ext4_check_acl(struct inode *inode, int mask)
{
struct posix_acl *acl = ext4_get_acl(inode, ACL_TYPE_ACCESS);
Expand All @@ -252,12 +252,6 @@ ext4_check_acl(struct inode *inode, int mask)
return -EAGAIN;
}

int
ext4_permission(struct inode *inode, int mask)
{
return generic_permission(inode, mask, ext4_check_acl);
}

/*
* Initialize the ACLs of a new inode. Called from ext4_new_inode.
*
Expand Down
4 changes: 2 additions & 2 deletions fs/ext4/acl.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ static inline int ext4_acl_count(size_t size)
#ifdef CONFIG_EXT4_FS_POSIX_ACL

/* acl.c */
extern int ext4_permission(struct inode *, int);
extern int ext4_check_acl(struct inode *, int);
extern int ext4_acl_chmod(struct inode *);
extern int ext4_init_acl(handle_t *, struct inode *, struct inode *);

#else /* CONFIG_EXT4_FS_POSIX_ACL */
#include <linux/sched.h>
#define ext4_permission NULL
#define ext4_check_acl NULL

static inline int
ext4_acl_chmod(struct inode *inode)
Expand Down
2 changes: 1 addition & 1 deletion fs/ext4/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ const struct inode_operations ext4_file_inode_operations = {
.listxattr = ext4_listxattr,
.removexattr = generic_removexattr,
#endif
.permission = ext4_permission,
.check_acl = ext4_check_acl,
.fallocate = ext4_fallocate,
.fiemap = ext4_fiemap,
};
Expand Down
4 changes: 2 additions & 2 deletions fs/ext4/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -2536,7 +2536,7 @@ const struct inode_operations ext4_dir_inode_operations = {
.listxattr = ext4_listxattr,
.removexattr = generic_removexattr,
#endif
.permission = ext4_permission,
.check_acl = ext4_check_acl,
.fiemap = ext4_fiemap,
};

Expand All @@ -2548,5 +2548,5 @@ const struct inode_operations ext4_special_inode_operations = {
.listxattr = ext4_listxattr,
.removexattr = generic_removexattr,
#endif
.permission = ext4_permission,
.check_acl = ext4_check_acl,
};

0 comments on commit 1d5ccd1

Please sign in to comment.