diff options
Diffstat (limited to 'fs/reiserfs/xattr_acl.c')
-rw-r--r-- | fs/reiserfs/xattr_acl.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c index a1a7e3530e17..7b3aeb9327d3 100644 --- a/fs/reiserfs/xattr_acl.c +++ b/fs/reiserfs/xattr_acl.c | |||
@@ -192,19 +192,19 @@ static inline void iset_acl(struct inode *inode, struct posix_acl **i_acl, | |||
192 | struct posix_acl *acl) | 192 | struct posix_acl *acl) |
193 | { | 193 | { |
194 | spin_lock(&inode->i_lock); | 194 | spin_lock(&inode->i_lock); |
195 | if (*i_acl != ERR_PTR(-ENODATA)) | 195 | if (*i_acl != ACL_NOT_CACHED) |
196 | posix_acl_release(*i_acl); | 196 | posix_acl_release(*i_acl); |
197 | *i_acl = acl ? posix_acl_dup(acl) : ERR_PTR(-ENODATA); | 197 | *i_acl = posix_acl_dup(acl); |
198 | spin_unlock(&inode->i_lock); | 198 | spin_unlock(&inode->i_lock); |
199 | } | 199 | } |
200 | 200 | ||
201 | static inline struct posix_acl *iget_acl(struct inode *inode, | 201 | static inline struct posix_acl *iget_acl(struct inode *inode, |
202 | struct posix_acl **i_acl) | 202 | struct posix_acl **i_acl) |
203 | { | 203 | { |
204 | struct posix_acl *acl = ERR_PTR(-ENODATA); | 204 | struct posix_acl *acl = ACL_NOT_CACHED; |
205 | 205 | ||
206 | spin_lock(&inode->i_lock); | 206 | spin_lock(&inode->i_lock); |
207 | if (*i_acl != ERR_PTR(-ENODATA)) | 207 | if (*i_acl != ACL_NOT_CACHED) |
208 | acl = posix_acl_dup(*i_acl); | 208 | acl = posix_acl_dup(*i_acl); |
209 | spin_unlock(&inode->i_lock); | 209 | spin_unlock(&inode->i_lock); |
210 | 210 | ||
@@ -239,15 +239,13 @@ struct posix_acl *reiserfs_get_acl(struct inode *inode, int type) | |||
239 | } | 239 | } |
240 | 240 | ||
241 | acl = iget_acl(inode, p_acl); | 241 | acl = iget_acl(inode, p_acl); |
242 | if (acl && !IS_ERR(acl)) | 242 | if (acl != ACL_NOT_CACHED) |
243 | return acl; | 243 | return acl; |
244 | else if (PTR_ERR(acl) == -ENODATA) | ||
245 | return NULL; | ||
246 | 244 | ||
247 | size = reiserfs_xattr_get(inode, name, NULL, 0); | 245 | size = reiserfs_xattr_get(inode, name, NULL, 0); |
248 | if (size < 0) { | 246 | if (size < 0) { |
249 | if (size == -ENODATA || size == -ENOSYS) { | 247 | if (size == -ENODATA || size == -ENOSYS) { |
250 | *p_acl = ERR_PTR(-ENODATA); | 248 | *p_acl = NULL; |
251 | return NULL; | 249 | return NULL; |
252 | } | 250 | } |
253 | return ERR_PTR(size); | 251 | return ERR_PTR(size); |
@@ -262,7 +260,7 @@ struct posix_acl *reiserfs_get_acl(struct inode *inode, int type) | |||
262 | /* This shouldn't actually happen as it should have | 260 | /* This shouldn't actually happen as it should have |
263 | been caught above.. but just in case */ | 261 | been caught above.. but just in case */ |
264 | acl = NULL; | 262 | acl = NULL; |
265 | *p_acl = ERR_PTR(-ENODATA); | 263 | *p_acl = acl; |
266 | } else if (retval < 0) { | 264 | } else if (retval < 0) { |
267 | acl = ERR_PTR(retval); | 265 | acl = ERR_PTR(retval); |
268 | } else { | 266 | } else { |
@@ -379,11 +377,8 @@ reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, | |||
379 | } | 377 | } |
380 | 378 | ||
381 | acl = reiserfs_get_acl(dir, ACL_TYPE_DEFAULT); | 379 | acl = reiserfs_get_acl(dir, ACL_TYPE_DEFAULT); |
382 | if (IS_ERR(acl)) { | 380 | if (IS_ERR(acl)) |
383 | if (PTR_ERR(acl) == -ENODATA) | ||
384 | goto apply_umask; | ||
385 | return PTR_ERR(acl); | 381 | return PTR_ERR(acl); |
386 | } | ||
387 | 382 | ||
388 | if (acl) { | 383 | if (acl) { |
389 | struct posix_acl *acl_copy; | 384 | struct posix_acl *acl_copy; |