server->ssocket->flags);
                sock_release(server->ssocket);
                server->ssocket = NULL;
-               put_net(cifs_net_ns(server));
        }
        server->sequence_number = 0;
        server->session_estab = false;
                /*
                 * Grab netns reference for the socket.
                 *
-                * This reference will be released in several situations:
-                * - In the failure path before the cifsd thread is started.
-                * - In the all place where server->socket is released, it is
-                *   also set to NULL.
-                * - Ultimately in clean_demultiplex_info(), during the final
-                *   teardown.
+                * It'll be released here, on error, or in clean_demultiplex_info() upon server
+                * teardown.
                 */
                get_net(net);
 
        }
 
        rc = bind_socket(server);
-       if (rc < 0)
+       if (rc < 0) {
+               put_net(cifs_net_ns(server));
                return rc;
+       }
 
        /*
         * Eventually check for other socket options to change from
            (server->rfc1001_sessinit == -1 && sport == htons(RFC1001_PORT)))
                rc = ip_rfc1001_connect(server);
 
+       if (rc < 0)
+               put_net(cifs_net_ns(server));
+
        return rc;
 }