[CIFS] Do not allow signals in cifs_demultiplex_thread
Switch from send_sig to force_sig and do not allow signal for this background thread (the signal is needed to wakeup the thread when blocked in the network stack). Signed-off-by: Jeff Layton <jlayton@readhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
@@ -348,7 +348,6 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
|
|||||||
int isMultiRsp;
|
int isMultiRsp;
|
||||||
int reconnect;
|
int reconnect;
|
||||||
|
|
||||||
allow_signal(SIGKILL);
|
|
||||||
current->flags |= PF_MEMALLOC;
|
current->flags |= PF_MEMALLOC;
|
||||||
server->tsk = current; /* save process info to wake at shutdown */
|
server->tsk = current; /* save process info to wake at shutdown */
|
||||||
cFYI(1, ("Demultiplex PID: %d", current->pid));
|
cFYI(1, ("Demultiplex PID: %d", current->pid));
|
||||||
@@ -2089,7 +2088,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||||||
always wake up processes blocked in
|
always wake up processes blocked in
|
||||||
tcp in recv_mesg then we could remove the
|
tcp in recv_mesg then we could remove the
|
||||||
send_sig call */
|
send_sig call */
|
||||||
send_sig(SIGKILL,srvTcp->tsk,1);
|
force_sig(SIGKILL,srvTcp->tsk);
|
||||||
tsk = srvTcp->tsk;
|
tsk = srvTcp->tsk;
|
||||||
if(tsk)
|
if(tsk)
|
||||||
kthread_stop(tsk);
|
kthread_stop(tsk);
|
||||||
@@ -2106,9 +2105,11 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||||||
temp_rc = CIFSSMBLogoff(xid, pSesInfo);
|
temp_rc = CIFSSMBLogoff(xid, pSesInfo);
|
||||||
/* if the socketUseCount is now zero */
|
/* if the socketUseCount is now zero */
|
||||||
if ((temp_rc == -ESHUTDOWN) &&
|
if ((temp_rc == -ESHUTDOWN) &&
|
||||||
(pSesInfo->server) && (pSesInfo->server->tsk)) {
|
(pSesInfo->server) &&
|
||||||
|
(pSesInfo->server->tsk)) {
|
||||||
struct task_struct *tsk;
|
struct task_struct *tsk;
|
||||||
send_sig(SIGKILL,pSesInfo->server->tsk,1);
|
force_sig(SIGKILL,
|
||||||
|
pSesInfo->server->tsk);
|
||||||
tsk = pSesInfo->server->tsk;
|
tsk = pSesInfo->server->tsk;
|
||||||
if (tsk)
|
if (tsk)
|
||||||
kthread_stop(tsk);
|
kthread_stop(tsk);
|
||||||
@@ -3364,9 +3365,9 @@ cifs_umount(struct super_block *sb, struct cifs_sb_info *cifs_sb)
|
|||||||
FreeXid(xid);
|
FreeXid(xid);
|
||||||
return 0;
|
return 0;
|
||||||
} else if (rc == -ESHUTDOWN) {
|
} else if (rc == -ESHUTDOWN) {
|
||||||
cFYI(1,("Waking up socket by sending it signal"));
|
cFYI(1,("Waking up socket by sending signal"));
|
||||||
if (cifsd_task) {
|
if (cifsd_task) {
|
||||||
send_sig(SIGKILL,cifsd_task,1);
|
force_sig(SIGKILL,cifsd_task);
|
||||||
kthread_stop(cifsd_task);
|
kthread_stop(cifsd_task);
|
||||||
}
|
}
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
Reference in New Issue
Block a user