NFSv4.1: Clean up nfs41_sequence_done

Move the test for res->sr_slot == NULL out of the nfs41_sequence_free_slot
helper and into the main function for efficiency.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
Trond Myklebust 2014-01-29 12:24:03 -05:00
parent cab92c1982
commit a13ce7c629
1 changed files with 8 additions and 11 deletions

View File

@ -559,15 +559,10 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
{ {
struct nfs4_session *session; struct nfs4_session *session;
struct nfs4_slot_table *tbl; struct nfs4_slot_table *tbl;
struct nfs4_slot *slot = res->sr_slot;
bool send_new_highest_used_slotid = false; bool send_new_highest_used_slotid = false;
if (!res->sr_slot) { tbl = slot->table;
/* just wake up the next guy waiting since
* we may have not consumed a slot after all */
dprintk("%s: No slot\n", __func__);
return;
}
tbl = res->sr_slot->table;
session = tbl->session; session = tbl->session;
spin_lock(&tbl->slot_tbl_lock); spin_lock(&tbl->slot_tbl_lock);
@ -577,11 +572,11 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
if (tbl->highest_used_slotid > tbl->target_highest_slotid) if (tbl->highest_used_slotid > tbl->target_highest_slotid)
send_new_highest_used_slotid = true; send_new_highest_used_slotid = true;
if (nfs41_wake_and_assign_slot(tbl, res->sr_slot)) { if (nfs41_wake_and_assign_slot(tbl, slot)) {
send_new_highest_used_slotid = false; send_new_highest_used_slotid = false;
goto out_unlock; goto out_unlock;
} }
nfs4_free_slot(tbl, res->sr_slot); nfs4_free_slot(tbl, slot);
if (tbl->highest_used_slotid != NFS4_NO_SLOT) if (tbl->highest_used_slotid != NFS4_NO_SLOT)
send_new_highest_used_slotid = false; send_new_highest_used_slotid = false;
@ -595,16 +590,17 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *res) int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *res)
{ {
struct nfs4_session *session; struct nfs4_session *session;
struct nfs4_slot *slot; struct nfs4_slot *slot = res->sr_slot;
struct nfs_client *clp; struct nfs_client *clp;
bool interrupted = false; bool interrupted = false;
int ret = 1; int ret = 1;
if (slot == NULL)
goto out_noaction;
/* don't increment the sequence number if the task wasn't sent */ /* don't increment the sequence number if the task wasn't sent */
if (!RPC_WAS_SENT(task)) if (!RPC_WAS_SENT(task))
goto out; goto out;
slot = res->sr_slot;
session = slot->table->session; session = slot->table->session;
if (slot->interrupted) { if (slot->interrupted) {
@ -679,6 +675,7 @@ int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *res)
/* The session may be reset by one of the error handlers. */ /* The session may be reset by one of the error handlers. */
dprintk("%s: Error %d free the slot \n", __func__, res->sr_status); dprintk("%s: Error %d free the slot \n", __func__, res->sr_status);
nfs41_sequence_free_slot(res); nfs41_sequence_free_slot(res);
out_noaction:
return ret; return ret;
retry_nowait: retry_nowait:
if (rpc_restart_call_prepare(task)) { if (rpc_restart_call_prepare(task)) {