diff options
-rw-r--r-- | fs/nfs/nfs4proc.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index c1bc9cad5e85..a0f73e99ff3d 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -336,7 +336,6 @@ nfs4_free_slot(struct nfs4_slot_table *tbl, u8 free_slotid) | |||
336 | else | 336 | else |
337 | tbl->highest_used_slotid = -1; | 337 | tbl->highest_used_slotid = -1; |
338 | } | 338 | } |
339 | rpc_wake_up_next(&tbl->slot_tbl_waitq); | ||
340 | spin_unlock(&tbl->slot_tbl_lock); | 339 | spin_unlock(&tbl->slot_tbl_lock); |
341 | dprintk("%s: free_slotid %u highest_used_slotid %d\n", __func__, | 340 | dprintk("%s: free_slotid %u highest_used_slotid %d\n", __func__, |
342 | free_slotid, tbl->highest_used_slotid); | 341 | free_slotid, tbl->highest_used_slotid); |
@@ -353,14 +352,13 @@ void nfs41_sequence_free_slot(const struct nfs_client *clp, | |||
353 | } | 352 | } |
354 | tbl = &clp->cl_session->fc_slot_table; | 353 | tbl = &clp->cl_session->fc_slot_table; |
355 | if (res->sr_slotid == NFS4_MAX_SLOT_TABLE) { | 354 | if (res->sr_slotid == NFS4_MAX_SLOT_TABLE) { |
356 | dprintk("%s: No slot\n", __func__); | ||
357 | /* just wake up the next guy waiting since | 355 | /* just wake up the next guy waiting since |
358 | * we may have not consumed a slot after all */ | 356 | * we may have not consumed a slot after all */ |
359 | rpc_wake_up_next(&tbl->slot_tbl_waitq); | 357 | dprintk("%s: No slot\n", __func__); |
360 | return; | 358 | } else { |
359 | nfs4_free_slot(tbl, res->sr_slotid); | ||
360 | res->sr_slotid = NFS4_MAX_SLOT_TABLE; | ||
361 | } | 361 | } |
362 | nfs4_free_slot(tbl, res->sr_slotid); | ||
363 | res->sr_slotid = NFS4_MAX_SLOT_TABLE; | ||
364 | 362 | ||
365 | /* Signal state manager thread if session is drained */ | 363 | /* Signal state manager thread if session is drained */ |
366 | if (test_bit(NFS4CLNT_SESSION_DRAINING, &clp->cl_state)) { | 364 | if (test_bit(NFS4CLNT_SESSION_DRAINING, &clp->cl_state)) { |
@@ -370,6 +368,8 @@ void nfs41_sequence_free_slot(const struct nfs_client *clp, | |||
370 | complete(&clp->cl_session->complete); | 368 | complete(&clp->cl_session->complete); |
371 | } | 369 | } |
372 | spin_unlock(&tbl->slot_tbl_lock); | 370 | spin_unlock(&tbl->slot_tbl_lock); |
371 | } else { | ||
372 | rpc_wake_up_next(&tbl->slot_tbl_waitq); | ||
373 | } | 373 | } |
374 | } | 374 | } |
375 | 375 | ||
@@ -394,10 +394,10 @@ static void nfs41_sequence_done(struct nfs_client *clp, | |||
394 | if (res->sr_slotid == NFS4_MAX_SLOT_TABLE) | 394 | if (res->sr_slotid == NFS4_MAX_SLOT_TABLE) |
395 | goto out; | 395 | goto out; |
396 | 396 | ||
397 | tbl = &clp->cl_session->fc_slot_table; | 397 | /* Check the SEQUENCE operation status */ |
398 | slot = tbl->slots + res->sr_slotid; | ||
399 | |||
400 | if (res->sr_status == 0) { | 398 | if (res->sr_status == 0) { |
399 | tbl = &clp->cl_session->fc_slot_table; | ||
400 | slot = tbl->slots + res->sr_slotid; | ||
401 | /* Update the slot's sequence and clientid lease timer */ | 401 | /* Update the slot's sequence and clientid lease timer */ |
402 | ++slot->seq_nr; | 402 | ++slot->seq_nr; |
403 | timestamp = res->sr_renewal_time; | 403 | timestamp = res->sr_renewal_time; |