cifs: take module reference when starting cifsd
cifsd can outlive the last cifs mount. We need to hold a module reference until it exits to prevent someone from unplugging the module until we're ready. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
Родитель
80909022ce
Коммит
0468a2cf91
|
@ -776,7 +776,7 @@ multi_t2_fnd:
|
|||
set_current_state(TASK_RUNNING);
|
||||
}
|
||||
|
||||
return 0;
|
||||
module_put_and_exit(0);
|
||||
}
|
||||
|
||||
/* extract the host portion of the UNC string */
|
||||
|
@ -2176,10 +2176,17 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||
so no need to spinlock this init of tcpStatus */
|
||||
srvTcp->tcpStatus = CifsNew;
|
||||
init_MUTEX(&srvTcp->tcpSem);
|
||||
|
||||
/*
|
||||
* since we're in a cifs function already, we know that
|
||||
* this will succeed. No need for try_module_get().
|
||||
*/
|
||||
__module_get(THIS_MODULE);
|
||||
srvTcp->tsk = kthread_run((void *)(void *)cifs_demultiplex_thread, srvTcp, "cifsd");
|
||||
if (IS_ERR(srvTcp->tsk)) {
|
||||
rc = PTR_ERR(srvTcp->tsk);
|
||||
cERROR(1, ("error %d create cifsd thread", rc));
|
||||
module_put(THIS_MODULE);
|
||||
srvTcp->tsk = NULL;
|
||||
sock_release(csocket);
|
||||
kfree(srvTcp->hostname);
|
||||
|
|
Загрузка…
Ссылка в новой задаче