|
@@ -382,16 +382,17 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
|
|
|
|
|
|
if (!(session->flags & (1 << CMTP_LOOPBACK))) {
|
|
|
err = cmtp_attach_device(session);
|
|
|
- if (err < 0)
|
|
|
- goto detach;
|
|
|
+ if (err < 0) {
|
|
|
+ atomic_inc(&session->terminate);
|
|
|
+ wake_up_process(session->task);
|
|
|
+ up_write(&cmtp_session_sem);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
up_write(&cmtp_session_sem);
|
|
|
return 0;
|
|
|
|
|
|
-detach:
|
|
|
- cmtp_detach_device(session);
|
|
|
-
|
|
|
unlink:
|
|
|
__cmtp_unlink_session(session);
|
|
|
|