Commit 96353bb1 authored by Xiaodong Liu's avatar Xiaodong Liu Committed by Jim Harris
Browse files

nbd: relocate 2 mop-up ioctls



If spdk_nbd_stop is called because of socket error,
ioctl of NBD_CLEAR_QUE and NBD_CLEAR_SOCK may be blocked
which will cause deadlock.
close(kernel_sp_fd/spdk_sp_fd) first, then nbd kernel
module will not block them .

Change-Id: I9527d74986cbd2b6188b9a91154de8b0b85d2836
Signed-off-by: default avatarXiaodong Liu <xiaodong.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/393581


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent f869082a
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -228,12 +228,6 @@ _nbd_stop(struct spdk_nbd_disk *nbd)
		spdk_bdev_close(nbd->bdev_desc);
	}

	if (nbd->dev_fd >= 0) {
		ioctl(nbd->dev_fd, NBD_CLEAR_QUE);
		ioctl(nbd->dev_fd, NBD_CLEAR_SOCK);
		close(nbd->dev_fd);
	}

	if (nbd->nbd_path) {
		free(nbd->nbd_path);
	}
@@ -246,6 +240,12 @@ _nbd_stop(struct spdk_nbd_disk *nbd)
		close(nbd->kernel_sp_fd);
	}

	if (nbd->dev_fd >= 0) {
		ioctl(nbd->dev_fd, NBD_CLEAR_QUE);
		ioctl(nbd->dev_fd, NBD_CLEAR_SOCK);
		close(nbd->dev_fd);
	}

	if (nbd->nbd_poller) {
		spdk_poller_unregister(&nbd->nbd_poller);
	}