mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 15:42:32 +00:00
SUNRPC: Fix up task signalling
The RPC_TASK_KILLED flag should really not be set from another context because it can clobber data in the struct task when task->tk_flags is changed non-atomically. Let's therefore swap out RPC_TASK_KILLED with an atomic flag, and add a function to set that flag and safely wake up the task. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
085b775580
commit
ae67bd3821
7 changed files with 40 additions and 26 deletions
|
@ -1032,7 +1032,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback
|
|||
* the submission code will error out, so we don't need to
|
||||
* handle that case here.
|
||||
*/
|
||||
if (task->tk_flags & RPC_TASK_KILLED)
|
||||
if (RPC_SIGNALLED(task))
|
||||
goto need_restart;
|
||||
|
||||
return true;
|
||||
|
@ -1081,7 +1081,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback
|
|||
dprintk("%s: freed slot, new seqid=%d\n", __func__,
|
||||
clp->cl_cb_session->se_cb_seq_nr);
|
||||
|
||||
if (task->tk_flags & RPC_TASK_KILLED)
|
||||
if (RPC_SIGNALLED(task))
|
||||
goto need_restart;
|
||||
out:
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue