@@ -182,6 +182,7 @@ struct TCP_Server_Info {
    struct mac_key mac_signing_key;
    char ntlmv2_hash[16];
    unsigned long lstrp; /* when we got last response from this server */
+ Â Â Â struct completion done;
 };
 /*
@@ -337,6 +337,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
    bool isMultiRsp;
    int reconnect;
+ Â Â Â init_completion(&server->done);
    current->flags |= PF_MEMALLOC;
    cFYI(1, ("Demultiplex PID: %d", task_pid_nr(current)));
@@ -747,7 +748,6 @@ multi_t2_fnd:
    kfree(server->hostname);
    task_to_wake = xchg(&server->tsk, NULL);
- Â Â Â kfree(server);
    length = atomic_dec_return(&tcpSesAllocCount);
    if (length  > 0)
@@ -764,6 +764,8 @@ multi_t2_fnd:
        set_current_state(TASK_RUNNING);
    }
+ Â Â Â complete_all(&server->done);
+
    module_put_and_exit(0);
 }
@@ -1418,6 +1420,10 @@ cifs_put_tcp_session(struct TCP_Server_Info *server)
    task = xchg(&server->tsk, NULL);
    if (task)
        force_sig(SIGKILL, task);
+
+ Â Â Â wait_for_completion_interruptible(&server->done);
+
+ Â Â Â kfree(server);
 }
 static struct TCP_Server_Info *