Commit f4af6e2a authored by Trond Myklebust's avatar Trond Myklebust

NFSv4.1: Clean up nfs4_free_slot

Change the argument to take the pointer to the slot, instead of
just the slotid.

We know that the new value of highest_used_slot must be less than
the current value. No need to scan the whole table.
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 2dc03b7f
...@@ -412,16 +412,18 @@ static void renew_lease(const struct nfs_server *server, unsigned long timestamp ...@@ -412,16 +412,18 @@ static void renew_lease(const struct nfs_server *server, unsigned long timestamp
* Must be called while holding tbl->slot_tbl_lock * Must be called while holding tbl->slot_tbl_lock
*/ */
static void static void
nfs4_free_slot(struct nfs4_slot_table *tbl, u32 slotid) nfs4_free_slot(struct nfs4_slot_table *tbl, struct nfs4_slot *slot)
{ {
u32 slotid = slot->slot_nr;
/* clear used bit in bitmap */ /* clear used bit in bitmap */
__clear_bit(slotid, tbl->used_slots); __clear_bit(slotid, tbl->used_slots);
/* update highest_used_slotid when it is freed */ /* update highest_used_slotid when it is freed */
if (slotid == tbl->highest_used_slotid) { if (slotid == tbl->highest_used_slotid) {
slotid = find_last_bit(tbl->used_slots, tbl->max_slots); u32 new_max = find_last_bit(tbl->used_slots, slotid);
if (slotid < tbl->max_slots) if (new_max < slotid)
tbl->highest_used_slotid = slotid; tbl->highest_used_slotid = new_max;
else else
tbl->highest_used_slotid = NFS4_NO_SLOT; tbl->highest_used_slotid = NFS4_NO_SLOT;
} }
...@@ -480,7 +482,7 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res) ...@@ -480,7 +482,7 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
session = tbl->session; session = tbl->session;
spin_lock(&tbl->slot_tbl_lock); spin_lock(&tbl->slot_tbl_lock);
nfs4_free_slot(tbl, res->sr_slot - tbl->slots); nfs4_free_slot(tbl, res->sr_slot);
nfs4_check_drain_fc_complete(session); nfs4_check_drain_fc_complete(session);
spin_unlock(&tbl->slot_tbl_lock); spin_unlock(&tbl->slot_tbl_lock);
res->sr_slot = NULL; res->sr_slot = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment