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: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
parent
d83f5901bc
commit
17499e3329
|
@ -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)
|
||||||
|
|
||||||
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 {
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue