From 998feedb172f76951db501b162fd26748eff5d20 Mon Sep 17 00:00:00 2001 From: Xiaodong Liu Date: Thu, 14 Dec 2017 00:29:08 -0500 Subject: [PATCH] nbd: place mop-up ioctl to _nbd_stop At present, close(dev_fd) is always executed before the return of ioctl(nbd->dev_fd, NBD_DO_IT). So when executing these 2 ioctl commands, dev_fd is already closed. Change-Id: I6fce73c440972af91f662f24c1fbca51a7b95d61 Signed-off-by: Xiaodong Liu Reviewed-on: https://review.gerrithub.io/391708 Tested-by: SPDK Automated Test System Reviewed-by: Changpeng Liu Reviewed-by: Daniel Verkamp --- lib/nbd/nbd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/nbd/nbd.c b/lib/nbd/nbd.c index 3c2c47c05..57567b21c 100644 --- a/lib/nbd/nbd.c +++ b/lib/nbd/nbd.c @@ -229,6 +229,8 @@ _nbd_stop(struct spdk_nbd_disk *nbd) } if (nbd->dev_fd >= 0) { + ioctl(nbd->dev_fd, NBD_CLEAR_QUE); + ioctl(nbd->dev_fd, NBD_CLEAR_SOCK); close(nbd->dev_fd); } @@ -512,8 +514,7 @@ nbd_start_kernel(void *arg) /* This will block in the kernel until we close the spdk_sp_fd. */ ioctl(dev_fd, NBD_DO_IT); - ioctl(dev_fd, NBD_CLEAR_QUE); - ioctl(dev_fd, NBD_CLEAR_SOCK); + pthread_exit(NULL); }