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: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
2dc03b7f00
commit
f4af6e2abc
1 changed files with 7 additions and 5 deletions
|
@ -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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue