*/
/* recall_lock protects the del_recall_lru */
-static DEFINE_SPINLOCK(recall_lock);
+static spinlock_t recall_lock = SPIN_LOCK_UNLOCKED;
static struct list_head del_recall_lru;
static void
dprintk("NFSD: move_to_confirm nfs4_client %p\n", clp);
list_del_init(&clp->cl_strhash);
- list_move(&clp->cl_idhash, &conf_id_hashtbl[idhashval]);
+ list_del_init(&clp->cl_idhash);
+ list_add(&clp->cl_idhash, &conf_id_hashtbl[idhashval]);
strhashval = clientstr_hashval(clp->cl_recdir);
list_add(&clp->cl_strhash, &conf_str_hashtbl[strhashval]);
renew_client(clp);
return NULL;
}
-static int access_valid(u32 x)
-{
- return (x > 0 && x < 4);
-}
-
-static int deny_valid(u32 x)
-{
- return (x >= 0 && x < 5);
-}
+#define TEST_ACCESS(x) ((x > 0 || x < 4)?1:0)
+#define TEST_DENY(x) ((x >= 0 || x < 5)?1:0)
static void
set_access(unsigned int *access, unsigned long bmap) {
int status;
status = nfserr_inval;
- if (!access_valid(open->op_share_access)
- || !deny_valid(open->op_share_deny))
+ if (!TEST_ACCESS(open->op_share_access) || !TEST_DENY(open->op_share_deny))
goto out;
/*
* Lookup file; if found, lookup stateid and check open request,
} else {
/* Stateid was not found, this is a new OPEN */
int flags = 0;
- if (open->op_share_access & NFS4_SHARE_ACCESS_READ)
- flags |= MAY_READ;
if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE)
- flags |= MAY_WRITE;
+ flags = MAY_WRITE;
+ else
+ flags = MAY_READ;
status = nfs4_new_open(rqstp, &stp, dp, current_fh, flags);
if (status)
goto out;
if (!stateid->si_fileid) { /* delegation stateid */
if(!(dp = find_delegation_stateid(ino, stateid))) {
dprintk("NFSD: delegation stateid not found\n");
+ if (nfs4_in_grace())
+ status = nfserr_grace;
goto out;
}
stidp = &dp->dl_stateid;
} else { /* open or lock stateid */
if (!(stp = find_stateid(stateid, flags))) {
dprintk("NFSD: open or lock stateid not found\n");
+ if (nfs4_in_grace())
+ status = nfserr_grace;
goto out;
}
if ((flags & CHECK_FH) && nfs4_check_fh(current_fh, stp))
(int)current_fh->fh_dentry->d_name.len,
current_fh->fh_dentry->d_name.name);
- status = fh_verify(rqstp, current_fh, S_IFREG, 0);
- if (status)
- return status;
+ if ((status = fh_verify(rqstp, current_fh, S_IFREG, 0)))
+ goto out;
nfs4_lock_state();
(int)current_fh->fh_dentry->d_name.len,
current_fh->fh_dentry->d_name.name);
- if (!access_valid(od->od_share_access)
- || !deny_valid(od->od_share_deny))
+ if (!TEST_ACCESS(od->od_share_access) || !TEST_DENY(od->od_share_deny))
return nfserr_inval;
nfs4_lock_state();