diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-24 13:03:12 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-24 13:03:12 -0400 |
| commit | 936940a9c7e3d99b25859bf1ff140d8c2480183a (patch) | |
| tree | ddce374cdab91939fef576dbdd4c66d13a9c0299 /include | |
| parent | 09ce42d3167e3f20b501fa780c2415332330fac5 (diff) | |
| parent | 1cbd20d820c36f52543e3e4cd0067ebf52aa388f (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (23 commits)
switch xfs to generic acl caching helpers
helpers for acl caching + switch to those
switch shmem to inode->i_acl
switch reiserfs to inode->i_acl
switch reiserfs to usual conventions for caching ACLs
reiserfs: minimal fix for ACL caching
switch nilfs2 to inode->i_acl
switch btrfs to inode->i_acl
switch jffs2 to inode->i_acl
switch jfs to inode->i_acl
switch ext4 to inode->i_acl
switch ext3 to inode->i_acl
switch ext2 to inode->i_acl
add caching of ACLs in struct inode
fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls
cleanup __writeback_single_inode
... and the same for vfsmount id/mount group id
Make allocation of anon devices cheaper
update Documentation/filesystems/Locking
devpts: remove module-related code
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/ext3_fs_i.h | 4 | ||||
| -rw-r--r-- | include/linux/falloc.h | 21 | ||||
| -rw-r--r-- | include/linux/fs.h | 13 | ||||
| -rw-r--r-- | include/linux/posix_acl.h | 64 | ||||
| -rw-r--r-- | include/linux/reiserfs_acl.h | 17 | ||||
| -rw-r--r-- | include/linux/reiserfs_fs_i.h | 4 | ||||
| -rw-r--r-- | include/linux/shmem_fs.h | 8 |
7 files changed, 98 insertions, 33 deletions
diff --git a/include/linux/ext3_fs_i.h b/include/linux/ext3_fs_i.h index 7894dd0f3b77..ca1bfe90004f 100644 --- a/include/linux/ext3_fs_i.h +++ b/include/linux/ext3_fs_i.h | |||
| @@ -103,10 +103,6 @@ struct ext3_inode_info { | |||
| 103 | */ | 103 | */ |
| 104 | struct rw_semaphore xattr_sem; | 104 | struct rw_semaphore xattr_sem; |
| 105 | #endif | 105 | #endif |
| 106 | #ifdef CONFIG_EXT3_FS_POSIX_ACL | ||
| 107 | struct posix_acl *i_acl; | ||
| 108 | struct posix_acl *i_default_acl; | ||
| 109 | #endif | ||
| 110 | 106 | ||
| 111 | struct list_head i_orphan; /* unlinked but open inodes */ | 107 | struct list_head i_orphan; /* unlinked but open inodes */ |
| 112 | 108 | ||
diff --git a/include/linux/falloc.h b/include/linux/falloc.h index 8e912ab6a072..3c155107d61f 100644 --- a/include/linux/falloc.h +++ b/include/linux/falloc.h | |||
| @@ -3,4 +3,25 @@ | |||
| 3 | 3 | ||
| 4 | #define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */ | 4 | #define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */ |
| 5 | 5 | ||
| 6 | #ifdef __KERNEL__ | ||
| 7 | |||
| 8 | /* | ||
| 9 | * Space reservation ioctls and argument structure | ||
| 10 | * are designed to be compatible with the legacy XFS ioctls. | ||
| 11 | */ | ||
| 12 | struct space_resv { | ||
| 13 | __s16 l_type; | ||
| 14 | __s16 l_whence; | ||
| 15 | __s64 l_start; | ||
| 16 | __s64 l_len; /* len == 0 means until end of file */ | ||
| 17 | __s32 l_sysid; | ||
| 18 | __u32 l_pid; | ||
| 19 | __s32 l_pad[4]; /* reserved area */ | ||
| 20 | }; | ||
| 21 | |||
| 22 | #define FS_IOC_RESVSP _IOW('X', 40, struct space_resv) | ||
| 23 | #define FS_IOC_RESVSP64 _IOW('X', 42, struct space_resv) | ||
| 24 | |||
| 25 | #endif /* __KERNEL__ */ | ||
| 26 | |||
| 6 | #endif /* _FALLOC_H_ */ | 27 | #endif /* _FALLOC_H_ */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 1ff5e4e01952..0872372184fe 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -710,6 +710,9 @@ static inline int mapping_writably_mapped(struct address_space *mapping) | |||
| 710 | #define i_size_ordered_init(inode) do { } while (0) | 710 | #define i_size_ordered_init(inode) do { } while (0) |
| 711 | #endif | 711 | #endif |
| 712 | 712 | ||
| 713 | struct posix_acl; | ||
| 714 | #define ACL_NOT_CACHED ((void *)(-1)) | ||
| 715 | |||
| 713 | struct inode { | 716 | struct inode { |
| 714 | struct hlist_node i_hash; | 717 | struct hlist_node i_hash; |
| 715 | struct list_head i_list; | 718 | struct list_head i_list; |
| @@ -773,6 +776,10 @@ struct inode { | |||
| 773 | #ifdef CONFIG_SECURITY | 776 | #ifdef CONFIG_SECURITY |
| 774 | void *i_security; | 777 | void *i_security; |
| 775 | #endif | 778 | #endif |
| 779 | #ifdef CONFIG_FS_POSIX_ACL | ||
| 780 | struct posix_acl *i_acl; | ||
| 781 | struct posix_acl *i_default_acl; | ||
| 782 | #endif | ||
| 776 | void *i_private; /* fs or device private pointer */ | 783 | void *i_private; /* fs or device private pointer */ |
| 777 | }; | 784 | }; |
| 778 | 785 | ||
| @@ -1906,6 +1913,8 @@ static inline int break_lease(struct inode *inode, unsigned int mode) | |||
| 1906 | 1913 | ||
| 1907 | extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs, | 1914 | extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs, |
| 1908 | struct file *filp); | 1915 | struct file *filp); |
| 1916 | extern int do_fallocate(struct file *file, int mode, loff_t offset, | ||
| 1917 | loff_t len); | ||
| 1909 | extern long do_sys_open(int dfd, const char __user *filename, int flags, | 1918 | extern long do_sys_open(int dfd, const char __user *filename, int flags, |
| 1910 | int mode); | 1919 | int mode); |
| 1911 | extern struct file *filp_open(const char *, int, int); | 1920 | extern struct file *filp_open(const char *, int, int); |
| @@ -1914,6 +1923,10 @@ extern struct file * dentry_open(struct dentry *, struct vfsmount *, int, | |||
| 1914 | extern int filp_close(struct file *, fl_owner_t id); | 1923 | extern int filp_close(struct file *, fl_owner_t id); |
| 1915 | extern char * getname(const char __user *); | 1924 | extern char * getname(const char __user *); |
| 1916 | 1925 | ||
| 1926 | /* fs/ioctl.c */ | ||
| 1927 | |||
| 1928 | extern int ioctl_preallocate(struct file *filp, void __user *argp); | ||
| 1929 | |||
| 1917 | /* fs/dcache.c */ | 1930 | /* fs/dcache.c */ |
| 1918 | extern void __init vfs_caches_init_early(void); | 1931 | extern void __init vfs_caches_init_early(void); |
| 1919 | extern void __init vfs_caches_init(unsigned long); | 1932 | extern void __init vfs_caches_init(unsigned long); |
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h index 4bc241290c24..0cdba01b7756 100644 --- a/include/linux/posix_acl.h +++ b/include/linux/posix_acl.h | |||
| @@ -83,4 +83,68 @@ extern int posix_acl_chmod_masq(struct posix_acl *, mode_t); | |||
| 83 | extern struct posix_acl *get_posix_acl(struct inode *, int); | 83 | extern struct posix_acl *get_posix_acl(struct inode *, int); |
| 84 | extern int set_posix_acl(struct inode *, int, struct posix_acl *); | 84 | extern int set_posix_acl(struct inode *, int, struct posix_acl *); |
| 85 | 85 | ||
| 86 | static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | ||
| 87 | { | ||
| 88 | struct posix_acl **p, *acl; | ||
| 89 | switch (type) { | ||
| 90 | case ACL_TYPE_ACCESS: | ||
| 91 | p = &inode->i_acl; | ||
| 92 | break; | ||
| 93 | case ACL_TYPE_DEFAULT: | ||
| 94 | p = &inode->i_default_acl; | ||
| 95 | break; | ||
| 96 | default: | ||
| 97 | return ERR_PTR(-EINVAL); | ||
| 98 | } | ||
| 99 | acl = ACCESS_ONCE(*p); | ||
| 100 | if (acl) { | ||
| 101 | spin_lock(&inode->i_lock); | ||
| 102 | acl = *p; | ||
| 103 | if (acl != ACL_NOT_CACHED) | ||
| 104 | acl = posix_acl_dup(acl); | ||
| 105 | spin_unlock(&inode->i_lock); | ||
| 106 | } | ||
| 107 | return acl; | ||
| 108 | } | ||
| 109 | |||
| 110 | static inline void set_cached_acl(struct inode *inode, | ||
| 111 | int type, | ||
| 112 | struct posix_acl *acl) | ||
| 113 | { | ||
| 114 | struct posix_acl *old = NULL; | ||
| 115 | spin_lock(&inode->i_lock); | ||
| 116 | switch (type) { | ||
| 117 | case ACL_TYPE_ACCESS: | ||
| 118 | old = inode->i_acl; | ||
| 119 | inode->i_acl = posix_acl_dup(acl); | ||
| 120 | break; | ||
| 121 | case ACL_TYPE_DEFAULT: | ||
| 122 | old = inode->i_default_acl; | ||
| 123 | inode->i_default_acl = posix_acl_dup(acl); | ||
| 124 | break; | ||
| 125 | } | ||
| 126 | spin_unlock(&inode->i_lock); | ||
| 127 | if (old != ACL_NOT_CACHED) | ||
| 128 | posix_acl_release(old); | ||
| 129 | } | ||
| 130 | |||
| 131 | static inline void forget_cached_acl(struct inode *inode, int type) | ||
| 132 | { | ||
| 133 | struct posix_acl *old = NULL; | ||
| 134 | spin_lock(&inode->i_lock); | ||
| 135 | switch (type) { | ||
| 136 | case ACL_TYPE_ACCESS: | ||
| 137 | old = inode->i_acl; | ||
| 138 | inode->i_acl = ACL_NOT_CACHED; | ||
| 139 | break; | ||
| 140 | case ACL_TYPE_DEFAULT: | ||
| 141 | old = inode->i_default_acl; | ||
| 142 | inode->i_default_acl = ACL_NOT_CACHED; | ||
| 143 | break; | ||
| 144 | } | ||
| 145 | spin_unlock(&inode->i_lock); | ||
| 146 | if (old != ACL_NOT_CACHED) | ||
| 147 | posix_acl_release(old); | ||
| 148 | } | ||
| 149 | |||
| 86 | #endif /* __LINUX_POSIX_ACL_H */ | 150 | #endif /* __LINUX_POSIX_ACL_H */ |
diff --git a/include/linux/reiserfs_acl.h b/include/linux/reiserfs_acl.h index 8cc65757e47a..b4448853900e 100644 --- a/include/linux/reiserfs_acl.h +++ b/include/linux/reiserfs_acl.h | |||
| @@ -56,15 +56,6 @@ int reiserfs_cache_default_acl(struct inode *dir); | |||
| 56 | extern struct xattr_handler reiserfs_posix_acl_default_handler; | 56 | extern struct xattr_handler reiserfs_posix_acl_default_handler; |
| 57 | extern struct xattr_handler reiserfs_posix_acl_access_handler; | 57 | extern struct xattr_handler reiserfs_posix_acl_access_handler; |
| 58 | 58 | ||
| 59 | static inline void reiserfs_init_acl_access(struct inode *inode) | ||
| 60 | { | ||
| 61 | REISERFS_I(inode)->i_acl_access = NULL; | ||
| 62 | } | ||
| 63 | |||
| 64 | static inline void reiserfs_init_acl_default(struct inode *inode) | ||
| 65 | { | ||
| 66 | REISERFS_I(inode)->i_acl_default = NULL; | ||
| 67 | } | ||
| 68 | #else | 59 | #else |
| 69 | 60 | ||
| 70 | #define reiserfs_cache_default_acl(inode) 0 | 61 | #define reiserfs_cache_default_acl(inode) 0 |
| @@ -86,12 +77,4 @@ reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, | |||
| 86 | { | 77 | { |
| 87 | return 0; | 78 | return 0; |
| 88 | } | 79 | } |
| 89 | |||
| 90 | static inline void reiserfs_init_acl_access(struct inode *inode) | ||
| 91 | { | ||
| 92 | } | ||
| 93 | |||
| 94 | static inline void reiserfs_init_acl_default(struct inode *inode) | ||
| 95 | { | ||
| 96 | } | ||
| 97 | #endif | 80 | #endif |
diff --git a/include/linux/reiserfs_fs_i.h b/include/linux/reiserfs_fs_i.h index 76360b36ac33..89f4d3abbf5a 100644 --- a/include/linux/reiserfs_fs_i.h +++ b/include/linux/reiserfs_fs_i.h | |||
| @@ -54,10 +54,6 @@ struct reiserfs_inode_info { | |||
| 54 | unsigned int i_trans_id; | 54 | unsigned int i_trans_id; |
| 55 | struct reiserfs_journal_list *i_jl; | 55 | struct reiserfs_journal_list *i_jl; |
| 56 | struct mutex i_mmap; | 56 | struct mutex i_mmap; |
| 57 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL | ||
| 58 | struct posix_acl *i_acl_access; | ||
| 59 | struct posix_acl *i_acl_default; | ||
| 60 | #endif | ||
| 61 | #ifdef CONFIG_REISERFS_FS_XATTR | 57 | #ifdef CONFIG_REISERFS_FS_XATTR |
| 62 | struct rw_semaphore i_xattr_sem; | 58 | struct rw_semaphore i_xattr_sem; |
| 63 | #endif | 59 | #endif |
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index fd83f2584b15..abff6c9b413c 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
| @@ -19,10 +19,6 @@ struct shmem_inode_info { | |||
| 19 | swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* first blocks */ | 19 | swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* first blocks */ |
| 20 | struct list_head swaplist; /* chain of maybes on swap */ | 20 | struct list_head swaplist; /* chain of maybes on swap */ |
| 21 | struct inode vfs_inode; | 21 | struct inode vfs_inode; |
| 22 | #ifdef CONFIG_TMPFS_POSIX_ACL | ||
| 23 | struct posix_acl *i_acl; | ||
| 24 | struct posix_acl *i_default_acl; | ||
| 25 | #endif | ||
| 26 | }; | 22 | }; |
| 27 | 23 | ||
| 28 | struct shmem_sb_info { | 24 | struct shmem_sb_info { |
| @@ -45,7 +41,6 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | |||
| 45 | #ifdef CONFIG_TMPFS_POSIX_ACL | 41 | #ifdef CONFIG_TMPFS_POSIX_ACL |
| 46 | int shmem_permission(struct inode *, int); | 42 | int shmem_permission(struct inode *, int); |
| 47 | int shmem_acl_init(struct inode *, struct inode *); | 43 | int shmem_acl_init(struct inode *, struct inode *); |
| 48 | void shmem_acl_destroy_inode(struct inode *); | ||
| 49 | 44 | ||
| 50 | extern struct xattr_handler shmem_xattr_acl_access_handler; | 45 | extern struct xattr_handler shmem_xattr_acl_access_handler; |
| 51 | extern struct xattr_handler shmem_xattr_acl_default_handler; | 46 | extern struct xattr_handler shmem_xattr_acl_default_handler; |
| @@ -57,9 +52,6 @@ static inline int shmem_acl_init(struct inode *inode, struct inode *dir) | |||
| 57 | { | 52 | { |
| 58 | return 0; | 53 | return 0; |
| 59 | } | 54 | } |
| 60 | static inline void shmem_acl_destroy_inode(struct inode *inode) | ||
| 61 | { | ||
| 62 | } | ||
| 63 | #endif /* CONFIG_TMPFS_POSIX_ACL */ | 55 | #endif /* CONFIG_TMPFS_POSIX_ACL */ |
| 64 | 56 | ||
| 65 | #endif | 57 | #endif |
