All of lore.kernel.org
 help / color / mirror / Atom feed
* [SPDK] [RFC PATCH 3/4] Add ScanTarget to optimize spdk app start time
@ 2018-05-11  3:25 Ming Lin
  0 siblings, 0 replies; only message in thread
From: Ming Lin @ 2018-05-11  3:25 UTC (permalink / raw)
  To: spdk

[-- Attachment #1: Type: text/plain, Size: 2732 bytes --]

From: Ming Lin <ming.lin(a)alibaba-inc.com>

For example,

 [VirtioUser0]
  Path /var/run/vhost.nvme0
  Queues 3
  Name nvme0
  ScanTarget 0

"ScanTarget 0" tells virtio scsi only scans vhost target 0.
If not specified, will do a full scan.

Signed-off-by: Ming Lin <ming.lin(a)alibaba-inc.com>
---
 lib/bdev/virtio/bdev_virtio_scsi.c | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/lib/bdev/virtio/bdev_virtio_scsi.c b/lib/bdev/virtio/bdev_virtio_scsi.c
index 0602597..e677a50 100644
--- a/lib/bdev/virtio/bdev_virtio_scsi.c
+++ b/lib/bdev/virtio/bdev_virtio_scsi.c
@@ -97,6 +97,8 @@ struct virtio_scsi_dev {
 
 	/** protect reconnect process */
 	pthread_mutex_t reconn_mutex;
+
+	int scan_target;
 };
 
 struct virtio_scsi_io_ctx {
@@ -351,6 +353,8 @@ virtio_user_scsi_dev_create(const char *name, const char *path,
 		return NULL;
 	}
 
+	svdev->scan_target = -1;
+
 	vdev = &svdev->vdev;
 	rc = virtio_user_dev_init(vdev, name, path, queue_size);
 	if (rc != 0) {
@@ -869,8 +873,13 @@ bdev_virtio_poll(void *arg)
 
 			if (scan_ctx->restart) {
 				scan_ctx->restart = false;
-				scan_ctx->full_scan = true;
-				_virtio_scsi_dev_scan_tgt(scan_ctx, 0);
+				if (svdev->scan_target == -1) {
+					scan_ctx->full_scan = true;
+					_virtio_scsi_dev_scan_tgt(scan_ctx, 0);
+				} else {
+					scan_ctx->full_scan = false;
+					_virtio_scsi_dev_scan_tgt(scan_ctx, svdev->scan_target);
+				}
 				continue;
 			}
 
@@ -1588,6 +1597,7 @@ bdev_virtio_process_config(void)
 	char *path, *name;
 	unsigned vdev_num;
 	int num_queues;
+	int scan_target;
 	bool enable_pci;
 	int rc = 0;
 
@@ -1629,6 +1639,9 @@ bdev_virtio_process_config(void)
 			rc = -1;
 			goto out;
 		}
+
+		scan_target = spdk_conf_section_get_intval(sp, "ScanTarget");
+		svdev->scan_target = scan_target;
 	}
 
 	sp = spdk_conf_find_section(NULL, "VirtioPci");
@@ -1734,9 +1747,13 @@ virtio_scsi_dev_scan(struct virtio_scsi_dev *svdev, bdev_virtio_create_cb cb_fn,
 	base = svdev->scan_ctx;
 	base->cb_fn = cb_fn;
 	base->cb_arg = cb_arg;
-	base->full_scan = true;
-
-	_virtio_scsi_dev_scan_tgt(base, 0);
+	if (svdev->scan_target == -1) {
+		base->full_scan = true;
+		_virtio_scsi_dev_scan_tgt(base, 0);
+	} else {
+		base->full_scan = false;
+		_virtio_scsi_dev_scan_tgt(base, svdev->scan_target);
+	}
 	return 0;
 }
 
@@ -1766,7 +1783,7 @@ virtio_scsi_dev_scan_tgt(struct virtio_scsi_dev *svdev, uint8_t target)
 	}
 
 	base = svdev->scan_ctx;
-	base->full_scan = true;
+	base->full_scan = (svdev->scan_target == -1) ? true : false;
 	_virtio_scsi_dev_scan_tgt(base, target);
 	return 0;
 }
-- 
1.9.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2018-05-11  3:25 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-11  3:25 [SPDK] [RFC PATCH 3/4] Add ScanTarget to optimize spdk app start time Ming Lin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.