Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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;