Commit 42580f7e authored by Ziye Yang's avatar Ziye Yang Committed by Tomasz Zawadzki
Browse files

lib/nbd: Set the O_NONBLOCK flag for kernel_sp_fd



Change-Id: I656be9023d7e0ccd86d1c8fbac3e2848ce61a772
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5733


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatar <dongx.yi@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent a1d4a714
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -968,10 +968,21 @@ nbd_enable_kernel(void *arg)
{
	struct spdk_nbd_start_ctx *ctx = arg;
	int rc;
	int flag;

	/* Declare device setup by this process */
	rc = ioctl(ctx->nbd->dev_fd, NBD_SET_SOCK, ctx->nbd->kernel_sp_fd);
	if (rc == -1) {

	if (!rc) {
		flag = fcntl(ctx->nbd->kernel_sp_fd, F_GETFL);
		rc = fcntl(ctx->nbd->kernel_sp_fd, F_SETFL, flag | O_NONBLOCK);
		if (rc < 0) {
			SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n",
				    ctx->nbd->kernel_sp_fd, spdk_strerror(errno));
		}
	}

	if (rc) {
		if (errno == EBUSY && ctx->polling_count-- > 0) {
			if (ctx->poller == NULL) {
				ctx->poller = SPDK_POLLER_REGISTER(nbd_enable_kernel, ctx,