• Andy Adamson's avatar
    nfs41: free slot · e2c4ab3c
    Andy Adamson authored
    Free a slot in the slot table.
    
    Mark the slot as free in the bitmap-based allocation table
    by clearing a bit corresponding to the slotid.
    
    Update lowest_free_slotid if freed slotid is lower than that.
    Update highest_used_slotid.  In the case the freed slotid
    equals the highest_used_slotid, scan downwards for the next
    highest used slotid using the optimized fls* functions.
    
    Finally, wake up thread waiting on slot_tbl_waitq for a free slot
    to become available.
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: free slot use slotid]
    Signed-off-by: default avatarAndy Adamson <andros@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: use find_first_zero_bit for nfs4_find_slot]
        While at it, obliterate lowest_free_slotid and fix-up related comments.
        As per review comment 21/85.
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: use __clear_bit for nfs4_free_slot]
        While at it, fix-up function comment.
        Part of review comment 22/85.
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: use find_last_bit in nfs4_free_slot to determine highest used slot.]
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: rpc_sleep_on slot_tbl_waitq must be called under slot_tbl_lock]
        Otherwise there's a race (we've hit) with nfs4_free_slot where
        nfs41_setup_sequence sees a full slot table, unlocks slot_tbl_lock,
        nfs4_free_slots happen concurrently and call rpc_wake_up_next
        where there's nobody to wake up yet, context goes back to
        nfs41_setup_sequence which goes to sleep when the slot table
        is actually empty now and there's no-one to wake it up anymore.
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    e2c4ab3c
nfs4proc.c 109 KB