aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAndrew Morton <akpm@linux-foundation.org>2014-01-21 18:48:42 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-21 19:19:42 -0500
commit0afaa12047a45ebe651f29a3b4818e523f862c28 (patch)
treea5c38045bca3b7b852f76bf1107c004e58bdea98 /include
parent53a52f17d96c8d47c79a7dafa81426317e89c7c1 (diff)
posix_acl: uninlining
Uninline vast tracts of nested inline functions in include/linux/posix_acl.h. This reduces the text+data+bss size of x86_64 allyesconfig vmlinux by 8026 bytes. The patch also regularises the positioning of the EXPORT_SYMBOLs in posix_acl.c. Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: J. Bruce Fields <bfields@fieldses.org> Cc: Trond Myklebust <Trond.Myklebust@netapp.com> Tested-by: Benny Halevy <bhalevy@primarydata.com> Cc: Benny Halevy <bhalevy@panasas.com> Cc: Andreas Gruenbacher <agruen@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/posix_acl.h78
1 files changed, 6 insertions, 72 deletions
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h
index 7931efe71175..fb616942e4c7 100644
--- a/include/linux/posix_acl.h
+++ b/include/linux/posix_acl.h
@@ -94,78 +94,12 @@ extern int posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);
94extern struct posix_acl *get_posix_acl(struct inode *, int); 94extern struct posix_acl *get_posix_acl(struct inode *, int);
95extern int set_posix_acl(struct inode *, int, struct posix_acl *); 95extern int set_posix_acl(struct inode *, int, struct posix_acl *);
96 96
97#ifdef CONFIG_FS_POSIX_ACL 97struct posix_acl **acl_by_type(struct inode *inode, int type);
98static inline struct posix_acl **acl_by_type(struct inode *inode, int type) 98struct posix_acl *get_cached_acl(struct inode *inode, int type);
99{ 99struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type);
100 switch (type) { 100void set_cached_acl(struct inode *inode, int type, struct posix_acl *acl);
101 case ACL_TYPE_ACCESS: 101void forget_cached_acl(struct inode *inode, int type);
102 return &inode->i_acl; 102void forget_all_cached_acls(struct inode *inode);
103 case ACL_TYPE_DEFAULT:
104 return &inode->i_default_acl;
105 default:
106 BUG();
107 }
108}
109
110static inline struct posix_acl *get_cached_acl(struct inode *inode, int type)
111{
112 struct posix_acl **p = acl_by_type(inode, type);
113 struct posix_acl *acl = ACCESS_ONCE(*p);
114 if (acl) {
115 spin_lock(&inode->i_lock);
116 acl = *p;
117 if (acl != ACL_NOT_CACHED)
118 acl = posix_acl_dup(acl);
119 spin_unlock(&inode->i_lock);
120 }
121 return acl;
122}
123
124static inline struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type)
125{
126 return rcu_dereference(*acl_by_type(inode, type));
127}
128
129static inline void set_cached_acl(struct inode *inode,
130 int type,
131 struct posix_acl *acl)
132{
133 struct posix_acl **p = acl_by_type(inode, type);
134 struct posix_acl *old;
135 spin_lock(&inode->i_lock);
136 old = *p;
137 rcu_assign_pointer(*p, posix_acl_dup(acl));
138 spin_unlock(&inode->i_lock);
139 if (old != ACL_NOT_CACHED)
140 posix_acl_release(old);
141}
142
143static inline void forget_cached_acl(struct inode *inode, int type)
144{
145 struct posix_acl **p = acl_by_type(inode, type);
146 struct posix_acl *old;
147 spin_lock(&inode->i_lock);
148 old = *p;
149 *p = ACL_NOT_CACHED;
150 spin_unlock(&inode->i_lock);
151 if (old != ACL_NOT_CACHED)
152 posix_acl_release(old);
153}
154
155static inline void forget_all_cached_acls(struct inode *inode)
156{
157 struct posix_acl *old_access, *old_default;
158 spin_lock(&inode->i_lock);
159 old_access = inode->i_acl;
160 old_default = inode->i_default_acl;
161 inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
162 spin_unlock(&inode->i_lock);
163 if (old_access != ACL_NOT_CACHED)
164 posix_acl_release(old_access);
165 if (old_default != ACL_NOT_CACHED)
166 posix_acl_release(old_default);
167}
168#endif
169 103
170static inline void cache_no_acl(struct inode *inode) 104static inline void cache_no_acl(struct inode *inode)
171{ 105{