summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorTrond Myklebust2011-08-02 20:46:29 +0200
committerTrond Myklebust2011-08-04 17:55:35 +0200
commit55a673990ec04cf63005318bcf08c2b0046e5778 (patch)
tree71e4fb3292060553063042c6190031d104d9c1f5 /virt
parentpnfs-obj: Fix the comp_index != 0 case (diff)
downloadkernel-qcow2-linux-55a673990ec04cf63005318bcf08c2b0046e5778.tar.gz
kernel-qcow2-linux-55a673990ec04cf63005318bcf08c2b0046e5778.tar.xz
kernel-qcow2-linux-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: stable@kernel.org [2.6.38+] Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'virt')
0 files changed, 0 insertions, 0 deletions