int coda_permission(struct inode *inode, int mask) { int error = 0; mask &= MAY_READ | MAY_WRITE | MAY_EXEC; if (!mask) return 0; if ((mask & MAY_EXEC) && !execute_ok(inode)) return -EACCES; lock_kernel(); if (coda_cache_check(inode, mask)) goto out; error = venus_access(inode->i_sb, coda_i2f(inode), mask); if (!error) coda_cache_enter(inode, mask); out: unlock_kernel(); return error; }
int coda_permission(struct inode *inode, int mask) { int error; if (mask & MAY_NOT_BLOCK) return -ECHILD; mask &= MAY_READ | MAY_WRITE | MAY_EXEC; if (!mask) return 0; if ((mask & MAY_EXEC) && !execute_ok(inode)) return -EACCES; if (coda_cache_check(inode, mask)) return 0; error = venus_access(inode->i_sb, coda_i2f(inode), mask); if (!error) coda_cache_enter(inode, mask); return error; }
int coda_permission(struct inode *inode, int mask) { int error; coda_vfs_stat.permission++; if ( mask == 0 ) return 0; if ( coda_access_cache ) { coda_permission_stat.count++; if ( coda_cache_check(inode, mask) ) { coda_permission_stat.hit_count++; return 0; } } CDEBUG(D_INODE, "mask is %o\n", mask); error = venus_access(inode->i_sb, coda_i2f(inode), mask); CDEBUG(D_INODE, "fid: %s, ino: %ld (mask: %o) error: %d\n", coda_i2s(inode), inode->i_ino, mask, error); if (!error) coda_cache_enter(inode, mask); return error; }
int coda_permission(struct inode *inode, int mask, struct nameidata *nd) { int error = 0; if (!mask) return 0; lock_kernel(); if (coda_cache_check(inode, mask)) goto out; error = venus_access(inode->i_sb, coda_i2f(inode), mask); if (!error) coda_cache_enter(inode, mask); out: unlock_kernel(); return error; }