|
@@ -320,6 +320,11 @@ static void hvs_close_connection(struct vmbus_channel *chan)
|
|
|
lock_sock(sk);
|
|
lock_sock(sk);
|
|
|
hvs_do_close_lock_held(vsock_sk(sk), true);
|
|
hvs_do_close_lock_held(vsock_sk(sk), true);
|
|
|
release_sock(sk);
|
|
release_sock(sk);
|
|
|
|
|
+
|
|
|
|
|
+ /* Release the refcnt for the channel that's opened in
|
|
|
|
|
+ * hvs_open_connection().
|
|
|
|
|
+ */
|
|
|
|
|
+ sock_put(sk);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void hvs_open_connection(struct vmbus_channel *chan)
|
|
static void hvs_open_connection(struct vmbus_channel *chan)
|
|
@@ -388,6 +393,9 @@ static void hvs_open_connection(struct vmbus_channel *chan)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
set_per_channel_state(chan, conn_from_host ? new : sk);
|
|
set_per_channel_state(chan, conn_from_host ? new : sk);
|
|
|
|
|
+
|
|
|
|
|
+ /* This reference will be dropped by hvs_close_connection(). */
|
|
|
|
|
+ sock_hold(conn_from_host ? new : sk);
|
|
|
vmbus_set_chn_rescind_callback(chan, hvs_close_connection);
|
|
vmbus_set_chn_rescind_callback(chan, hvs_close_connection);
|
|
|
|
|
|
|
|
/* Set the pending send size to max packet size to always get
|
|
/* Set the pending send size to max packet size to always get
|