Commit 7a77b15d authored by Al Viro's avatar Al Viro

switch reiserfs to usual conventions for caching ACLs

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e68888bc
...@@ -530,8 +530,8 @@ static void init_once(void *foo) ...@@ -530,8 +530,8 @@ static void init_once(void *foo)
INIT_LIST_HEAD(&ei->i_prealloc_list); INIT_LIST_HEAD(&ei->i_prealloc_list);
inode_init_once(&ei->vfs_inode); inode_init_once(&ei->vfs_inode);
#ifdef CONFIG_REISERFS_FS_POSIX_ACL #ifdef CONFIG_REISERFS_FS_POSIX_ACL
ei->i_acl_access = NULL; ei->i_acl_access = ACL_NOT_CACHED;
ei->i_acl_default = NULL; ei->i_acl_default = ACL_NOT_CACHED;
#endif #endif
} }
...@@ -586,14 +586,14 @@ static void reiserfs_clear_inode(struct inode *inode) ...@@ -586,14 +586,14 @@ static void reiserfs_clear_inode(struct inode *inode)
struct posix_acl *acl; struct posix_acl *acl;
acl = REISERFS_I(inode)->i_acl_access; acl = REISERFS_I(inode)->i_acl_access;
if (acl && !IS_ERR(acl)) if (acl && acl != ACL_NOT_CACHED)
posix_acl_release(acl); posix_acl_release(acl);
REISERFS_I(inode)->i_acl_access = NULL; REISERFS_I(inode)->i_acl_access = ACL_NOT_CACHED;
acl = REISERFS_I(inode)->i_acl_default; acl = REISERFS_I(inode)->i_acl_default;
if (acl && !IS_ERR(acl)) if (acl && acl != ACL_NOT_CACHED)
posix_acl_release(acl); posix_acl_release(acl);
REISERFS_I(inode)->i_acl_default = NULL; REISERFS_I(inode)->i_acl_default = ACL_NOT_CACHED;
} }
#else #else
#define reiserfs_clear_inode NULL #define reiserfs_clear_inode NULL
......
...@@ -192,19 +192,19 @@ static inline void iset_acl(struct inode *inode, struct posix_acl **i_acl, ...@@ -192,19 +192,19 @@ static inline void iset_acl(struct inode *inode, struct posix_acl **i_acl,
struct posix_acl *acl) struct posix_acl *acl)
{ {
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);
if (*i_acl != ERR_PTR(-ENODATA)) if (*i_acl != ACL_NOT_CACHED)
posix_acl_release(*i_acl); posix_acl_release(*i_acl);
*i_acl = acl ? posix_acl_dup(acl) : ERR_PTR(-ENODATA); *i_acl = posix_acl_dup(acl);
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
} }
static inline struct posix_acl *iget_acl(struct inode *inode, static inline struct posix_acl *iget_acl(struct inode *inode,
struct posix_acl **i_acl) struct posix_acl **i_acl)
{ {
struct posix_acl *acl = ERR_PTR(-ENODATA); struct posix_acl *acl = ACL_NOT_CACHED;
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);
if (*i_acl != ERR_PTR(-ENODATA)) if (*i_acl != ACL_NOT_CACHED)
acl = posix_acl_dup(*i_acl); acl = posix_acl_dup(*i_acl);
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
...@@ -239,15 +239,13 @@ struct posix_acl *reiserfs_get_acl(struct inode *inode, int type) ...@@ -239,15 +239,13 @@ struct posix_acl *reiserfs_get_acl(struct inode *inode, int type)
} }
acl = iget_acl(inode, p_acl); acl = iget_acl(inode, p_acl);
if (acl && !IS_ERR(acl)) if (acl != ACL_NOT_CACHED)
return acl; return acl;
else if (PTR_ERR(acl) == -ENODATA)
return NULL;
size = reiserfs_xattr_get(inode, name, NULL, 0); size = reiserfs_xattr_get(inode, name, NULL, 0);
if (size < 0) { if (size < 0) {
if (size == -ENODATA || size == -ENOSYS) { if (size == -ENODATA || size == -ENOSYS) {
*p_acl = ERR_PTR(-ENODATA); *p_acl = NULL;
return NULL; return NULL;
} }
return ERR_PTR(size); return ERR_PTR(size);
...@@ -262,7 +260,7 @@ struct posix_acl *reiserfs_get_acl(struct inode *inode, int type) ...@@ -262,7 +260,7 @@ struct posix_acl *reiserfs_get_acl(struct inode *inode, int type)
/* This shouldn't actually happen as it should have /* This shouldn't actually happen as it should have
been caught above.. but just in case */ been caught above.. but just in case */
acl = NULL; acl = NULL;
*p_acl = ERR_PTR(-ENODATA); *p_acl = acl;
} else if (retval < 0) { } else if (retval < 0) {
acl = ERR_PTR(retval); acl = ERR_PTR(retval);
} else { } else {
...@@ -379,11 +377,8 @@ reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, ...@@ -379,11 +377,8 @@ reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th,
} }
acl = reiserfs_get_acl(dir, ACL_TYPE_DEFAULT); acl = reiserfs_get_acl(dir, ACL_TYPE_DEFAULT);
if (IS_ERR(acl)) { if (IS_ERR(acl))
if (PTR_ERR(acl) == -ENODATA)
goto apply_umask;
return PTR_ERR(acl); return PTR_ERR(acl);
}
if (acl) { if (acl) {
struct posix_acl *acl_copy; struct posix_acl *acl_copy;
......
...@@ -58,12 +58,12 @@ extern struct xattr_handler reiserfs_posix_acl_access_handler; ...@@ -58,12 +58,12 @@ extern struct xattr_handler reiserfs_posix_acl_access_handler;
static inline void reiserfs_init_acl_access(struct inode *inode) static inline void reiserfs_init_acl_access(struct inode *inode)
{ {
REISERFS_I(inode)->i_acl_access = NULL; REISERFS_I(inode)->i_acl_access = ACL_NOT_CACHED;
} }
static inline void reiserfs_init_acl_default(struct inode *inode) static inline void reiserfs_init_acl_default(struct inode *inode)
{ {
REISERFS_I(inode)->i_acl_default = NULL; REISERFS_I(inode)->i_acl_default = ACL_NOT_CACHED;
} }
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment