diff options
| author | Trond Myklebust <[email protected]> | 2011-08-02 18:46:29 +0000 |
|---|---|---|
| committer | Trond Myklebust <[email protected]> | 2011-08-04 15:55:35 +0000 |
| commit | 55a673990ec04cf63005318bcf08c2b0046e5778 (patch) | |
| tree | 71e4fb3292060553063042c6190031d104d9c1f5 /lib/debugobjects.c | |
| parent | pnfs-obj: Fix the comp_index != 0 case (diff) | |
| download | kernel-55a673990ec04cf63005318bcf08c2b0046e5778.tar.gz kernel-55a673990ec04cf63005318bcf08c2b0046e5778.zip | |
NFSv4.1: Fix the callback 'highest_used_slotid' behaviour
Currently, there is no guarantee that we will call nfs4_cb_take_slot() even
though nfs4_callback_compound() will consistently call
nfs4_cb_free_slot() provided the cb_process_state has set the 'clp' field.
The result is that we can trigger the BUG_ON() upon the next call to
nfs4_cb_take_slot().
This patch fixes the above problem by using the slot id that was taken in
the CB_SEQUENCE operation as a flag for whether or not we need to call
nfs4_cb_free_slot().
It also fixes an atomicity problem: we need to set tbl->highest_used_slotid
atomically with the check for NFS4_SESSION_DRAINING, otherwise we end up
racing with the various tests in nfs4_begin_drain_session().
Cc: [email protected] [2.6.38+]
Signed-off-by: Trond Myklebust <[email protected]>
Diffstat (limited to 'lib/debugobjects.c')
0 files changed, 0 insertions, 0 deletions
