Skip to content

Commit

Permalink
NFSv4.1: Clean up nfs41_sequence_done
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Trond Myklebust committed Jan 29, 2014
1 parent cab92c1 commit a13ce7c
Showing 1 changed file with 8 additions and 11 deletions.
19 changes: 8 additions & 11 deletions fs/nfs/nfs4proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -559,15 +559,10 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
{
struct nfs4_session *session;
struct nfs4_slot_table *tbl;
struct nfs4_slot *slot = res->sr_slot;
bool send_new_highest_used_slotid = false;

if (!res->sr_slot) {
/* 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;
tbl = slot->table;
session = tbl->session;

spin_lock(&tbl->slot_tbl_lock);
Expand All @@ -577,11 +572,11 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
if (tbl->highest_used_slotid > tbl->target_highest_slotid)
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;
goto out_unlock;
}
nfs4_free_slot(tbl, res->sr_slot);
nfs4_free_slot(tbl, slot);

if (tbl->highest_used_slotid != NFS4_NO_SLOT)
send_new_highest_used_slotid = false;
Expand All @@ -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)
{
struct nfs4_session *session;
struct nfs4_slot *slot;
struct nfs4_slot *slot = res->sr_slot;
struct nfs_client *clp;
bool interrupted = false;
int ret = 1;

if (slot == NULL)
goto out_noaction;
/* don't increment the sequence number if the task wasn't sent */
if (!RPC_WAS_SENT(task))
goto out;

slot = res->sr_slot;
session = slot->table->session;

if (slot->interrupted) {
Expand Down Expand Up @@ -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. */
dprintk("%s: Error %d free the slot \n", __func__, res->sr_status);
nfs41_sequence_free_slot(res);
out_noaction:
return ret;
retry_nowait:
if (rpc_restart_call_prepare(task)) {
Expand Down

0 comments on commit a13ce7c

Please sign in to comment.