Commit 17499e33 authored by Eric W. Biederman's avatar Eric W. Biederman

coda: Cache permisions in struct coda_inode_info in a kuid_t.

- Change c_uid in struct coda_indoe_info from a vuid_t to a kuid_t.
- Initialize c_uid to GLOBAL_ROOT_UID instead of 0.
- Use uid_eq to compare cached kuids.

Cc: Jan Harkes <jaharkes@cs.cmu.edu>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent d83f5901
...@@ -33,7 +33,7 @@ void coda_cache_enter(struct inode *inode, int mask) ...@@ -33,7 +33,7 @@ void coda_cache_enter(struct inode *inode, int mask)
spin_lock(&cii->c_lock); spin_lock(&cii->c_lock);
cii->c_cached_epoch = atomic_read(&permission_epoch); cii->c_cached_epoch = atomic_read(&permission_epoch);
if (cii->c_uid != current_fsuid()) { if (!uid_eq(cii->c_uid, current_fsuid())) {
cii->c_uid = current_fsuid(); cii->c_uid = current_fsuid();
cii->c_cached_perm = mask; cii->c_cached_perm = mask;
} else } else
...@@ -65,7 +65,7 @@ int coda_cache_check(struct inode *inode, int mask) ...@@ -65,7 +65,7 @@ int coda_cache_check(struct inode *inode, int mask)
spin_lock(&cii->c_lock); spin_lock(&cii->c_lock);
hit = (mask & cii->c_cached_perm) == mask && hit = (mask & cii->c_cached_perm) == mask &&
cii->c_uid == current_fsuid() && uid_eq(cii->c_uid, current_fsuid()) &&
cii->c_cached_epoch == atomic_read(&permission_epoch); cii->c_cached_epoch == atomic_read(&permission_epoch);
spin_unlock(&cii->c_lock); spin_unlock(&cii->c_lock);
......
...@@ -25,7 +25,7 @@ struct coda_inode_info { ...@@ -25,7 +25,7 @@ struct coda_inode_info {
u_short c_flags; /* flags (see below) */ u_short c_flags; /* flags (see below) */
unsigned int c_mapcount; /* nr of times this inode is mapped */ unsigned int c_mapcount; /* nr of times this inode is mapped */
unsigned int c_cached_epoch; /* epoch for cached permissions */ unsigned int c_cached_epoch; /* epoch for cached permissions */
vuid_t c_uid; /* fsuid for cached permissions */ kuid_t c_uid; /* fsuid for cached permissions */
unsigned int c_cached_perm; /* cached access permissions */ unsigned int c_cached_perm; /* cached access permissions */
spinlock_t c_lock; spinlock_t c_lock;
struct inode vfs_inode; struct inode vfs_inode;
......
...@@ -49,7 +49,7 @@ static struct inode *coda_alloc_inode(struct super_block *sb) ...@@ -49,7 +49,7 @@ static struct inode *coda_alloc_inode(struct super_block *sb)
return NULL; return NULL;
memset(&ei->c_fid, 0, sizeof(struct CodaFid)); memset(&ei->c_fid, 0, sizeof(struct CodaFid));
ei->c_flags = 0; ei->c_flags = 0;
ei->c_uid = 0; ei->c_uid = GLOBAL_ROOT_UID;
ei->c_cached_perm = 0; ei->c_cached_perm = 0;
spin_lock_init(&ei->c_lock); spin_lock_init(&ei->c_lock);
return &ei->vfs_inode; return &ei->vfs_inode;
......
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