OSDN Git Service

coda: Cache permisions in struct coda_inode_info in a kuid_t.
authorEric W. Biederman <ebiederm@xmission.com>
Thu, 31 Jan 2013 03:36:06 +0000 (19:36 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 13 Feb 2013 14:00:54 +0000 (06:00 -0800)
- 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>
fs/coda/cache.c
fs/coda/coda_fs_i.h
fs/coda/inode.c

index 958ae0e..1da168c 100644 (file)
@@ -33,7 +33,7 @@ void coda_cache_enter(struct inode *inode, int mask)
 
        spin_lock(&cii->c_lock);
        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_cached_perm = mask;
         } else
@@ -65,7 +65,7 @@ int coda_cache_check(struct inode *inode, int mask)
        
        spin_lock(&cii->c_lock);
        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);
        spin_unlock(&cii->c_lock);
 
index b24fdfd..c640752 100644 (file)
@@ -25,7 +25,7 @@ struct coda_inode_info {
        u_short            c_flags;     /* flags (see below) */
        unsigned int       c_mapcount;  /* nr of times this inode is mapped */
        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 */
        spinlock_t         c_lock;
        struct inode       vfs_inode;
index 77bbaf4..cf674e9 100644 (file)
@@ -49,7 +49,7 @@ static struct inode *coda_alloc_inode(struct super_block *sb)
                return NULL;
        memset(&ei->c_fid, 0, sizeof(struct CodaFid));
        ei->c_flags = 0;
-       ei->c_uid = 0;
+       ei->c_uid = GLOBAL_ROOT_UID;
        ei->c_cached_perm = 0;
        spin_lock_init(&ei->c_lock);
        return &ei->vfs_inode;