Commit dfe6f14a authored by Stefan Metzmacher's avatar Stefan Metzmacher Committed by Steve French
Browse files

smb: client: only use a single wait_queue to monitor smbdirect connection status



There's no need for separate conn_wait and disconn_wait queues.

This will simplify the move to common code, the server code
already a single wait_queue for this.

Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: default avatarStefan Metzmacher <metze@samba.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 550a194c
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -205,7 +205,7 @@ static int smbd_conn_upcall(
	case RDMA_CM_EVENT_ESTABLISHED:
		log_rdma_event(INFO, "connected event=%s\n", event_name);
		sc->status = SMBDIRECT_SOCKET_CONNECTED;
		wake_up_interruptible(&info->conn_wait);
		wake_up_interruptible(&info->status_wait);
		break;

	case RDMA_CM_EVENT_CONNECT_ERROR:
@@ -213,7 +213,7 @@ static int smbd_conn_upcall(
	case RDMA_CM_EVENT_REJECTED:
		log_rdma_event(ERR, "connecting failed event=%s\n", event_name);
		sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
		wake_up_interruptible(&info->conn_wait);
		wake_up_interruptible(&info->status_wait);
		break;

	case RDMA_CM_EVENT_DEVICE_REMOVAL:
@@ -222,12 +222,12 @@ static int smbd_conn_upcall(
		if (sc->status == SMBDIRECT_SOCKET_NEGOTIATE_FAILED) {
			log_rdma_event(ERR, "event=%s during negotiation\n", event_name);
			sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
			wake_up(&info->conn_wait);
			wake_up(&info->status_wait);
			break;
		}

		sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
		wake_up_interruptible(&info->disconn_wait);
		wake_up_interruptible(&info->status_wait);
		wake_up_interruptible(&sc->recv_io.reassembly.wait_queue);
		wake_up_interruptible_all(&info->wait_send_queue);
		break;
@@ -1325,7 +1325,7 @@ void smbd_destroy(struct TCP_Server_Info *server)
		rdma_disconnect(sc->rdma.cm_id);
		log_rdma_event(INFO, "wait for transport being disconnected\n");
		wait_event_interruptible(
			info->disconn_wait,
			info->status_wait,
			sc->status == SMBDIRECT_SOCKET_DISCONNECTED);
	}

@@ -1650,8 +1650,7 @@ static struct smbd_connection *_smbd_get_connection(
	log_rdma_event(INFO, "connecting to IP %pI4 port %d\n",
		&addr_in->sin_addr, port);

	init_waitqueue_head(&info->conn_wait);
	init_waitqueue_head(&info->disconn_wait);
	init_waitqueue_head(&info->status_wait);
	init_waitqueue_head(&sc->recv_io.reassembly.wait_queue);
	rc = rdma_connect(sc->rdma.cm_id, &conn_param);
	if (rc) {
@@ -1660,7 +1659,7 @@ static struct smbd_connection *_smbd_get_connection(
	}

	wait_event_interruptible_timeout(
		info->conn_wait,
		info->status_wait,
		sc->status != SMBDIRECT_SOCKET_CONNECTING,
		msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT));

@@ -1717,7 +1716,7 @@ static struct smbd_connection *_smbd_get_connection(
	destroy_caches_and_workqueue(info);
	sc->status = SMBDIRECT_SOCKET_NEGOTIATE_FAILED;
	rdma_disconnect(sc->rdma.cm_id);
	wait_event(info->conn_wait,
	wait_event(info->status_wait,
		sc->status == SMBDIRECT_SOCKET_DISCONNECTED);

allocate_cache_failed:
+1 −2
Original line number Diff line number Diff line
@@ -47,8 +47,7 @@ struct smbd_connection {

	int ri_rc;
	struct completion ri_done;
	wait_queue_head_t conn_wait;
	wait_queue_head_t disconn_wait;
	wait_queue_head_t status_wait;

	struct completion negotiate_completion;
	bool negotiate_done;