diff options
Diffstat (limited to 'fs/cifs/connect.c')
-rw-r--r-- | fs/cifs/connect.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 216fb625843f..f4e92661b223 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -2069,8 +2069,15 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, | |||
2069 | srvTcp->tcpStatus = CifsExiting; | 2069 | srvTcp->tcpStatus = CifsExiting; |
2070 | spin_unlock(&GlobalMid_Lock); | 2070 | spin_unlock(&GlobalMid_Lock); |
2071 | if (srvTcp->tsk) { | 2071 | if (srvTcp->tsk) { |
2072 | struct task_struct *tsk; | ||
2073 | /* If we could verify that kthread_stop would | ||
2074 | always wake up processes blocked in | ||
2075 | tcp in recv_mesg then we could remove the | ||
2076 | send_sig call */ | ||
2072 | send_sig(SIGKILL,srvTcp->tsk,1); | 2077 | send_sig(SIGKILL,srvTcp->tsk,1); |
2073 | kthread_stop(srvTcp->tsk); | 2078 | tsk = srvTcp->tsk; |
2079 | if(tsk) | ||
2080 | kthread_stop(tsk); | ||
2074 | } | 2081 | } |
2075 | } | 2082 | } |
2076 | /* If find_unc succeeded then rc == 0 so we can not end */ | 2083 | /* If find_unc succeeded then rc == 0 so we can not end */ |
@@ -2085,8 +2092,11 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, | |||
2085 | /* if the socketUseCount is now zero */ | 2092 | /* if the socketUseCount is now zero */ |
2086 | if ((temp_rc == -ESHUTDOWN) && | 2093 | if ((temp_rc == -ESHUTDOWN) && |
2087 | (pSesInfo->server) && (pSesInfo->server->tsk)) { | 2094 | (pSesInfo->server) && (pSesInfo->server->tsk)) { |
2095 | struct task_struct *tsk; | ||
2088 | send_sig(SIGKILL,pSesInfo->server->tsk,1); | 2096 | send_sig(SIGKILL,pSesInfo->server->tsk,1); |
2089 | kthread_stop(pSesInfo->server->tsk); | 2097 | tsk = pSesInfo->server->tsk; |
2098 | if (tsk) | ||
2099 | kthread_stop(tsk); | ||
2090 | } | 2100 | } |
2091 | } else | 2101 | } else |
2092 | cFYI(1, ("No session or bad tcon")); | 2102 | cFYI(1, ("No session or bad tcon")); |
@@ -3334,7 +3344,7 @@ cifs_umount(struct super_block *sb, struct cifs_sb_info *cifs_sb) | |||
3334 | return 0; | 3344 | return 0; |
3335 | } else if (rc == -ESHUTDOWN) { | 3345 | } else if (rc == -ESHUTDOWN) { |
3336 | cFYI(1,("Waking up socket by sending it signal")); | 3346 | cFYI(1,("Waking up socket by sending it signal")); |
3337 | if(cifsd_task) { | 3347 | if (cifsd_task) { |
3338 | send_sig(SIGKILL,cifsd_task,1); | 3348 | send_sig(SIGKILL,cifsd_task,1); |
3339 | kthread_stop(cifsd_task); | 3349 | kthread_stop(cifsd_task); |
3340 | } | 3350 | } |