svn commit: r328664 - in stable/11/sys/dev: nvd nvme

Alexander Motin mav at FreeBSD.org
Thu Feb 1 15:27:48 UTC 2018


Author: mav
Date: Thu Feb  1 15:27:47 2018
New Revision: 328664
URL: https://svnweb.freebsd.org/changeset/base/328664

Log:
  MFC r303040, r303042 (by scottl):
  Supporting flushing the dump before returning, and simplify/combine the
  logic.  Switch to a 5us delay since most NVME devices can easily do 200,000
  iops.

Modified:
  stable/11/sys/dev/nvd/nvd.c
  stable/11/sys/dev/nvme/nvme_ns_cmd.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/nvd/nvd.c
==============================================================================
--- stable/11/sys/dev/nvd/nvd.c	Thu Feb  1 15:23:49 2018	(r328663)
+++ stable/11/sys/dev/nvd/nvd.c	Thu Feb  1 15:27:47 2018	(r328664)
@@ -232,19 +232,11 @@ nvd_dump(void *arg, void *virt, vm_offset_t phys, off_
 {
 	struct nvd_disk *ndisk;
 	struct disk *dp;
-	int error;
 
 	dp = arg;
 	ndisk = dp->d_drv1;
 
-	if (len > 0) {
-		if ((error = nvme_ns_dump(ndisk->ns, virt, offset, len)) != 0)
-			return (error);
-	} else {
-		/* XXX sync to stable storage */
-	}
-
-	return (0);
+	return (nvme_ns_dump(ndisk->ns, virt, offset, len));
 }
 
 static void

Modified: stable/11/sys/dev/nvme/nvme_ns_cmd.c
==============================================================================
--- stable/11/sys/dev/nvme/nvme_ns_cmd.c	Thu Feb  1 15:23:49 2018	(r328663)
+++ stable/11/sys/dev/nvme/nvme_ns_cmd.c	Thu Feb  1 15:27:47 2018	(r328664)
@@ -153,7 +153,7 @@ nvme_ns_cmd_flush(struct nvme_namespace *ns, nvme_cb_f
 }
 
 /* Timeout = 1 sec */
-#define NVD_DUMP_TIMEOUT	100000
+#define NVD_DUMP_TIMEOUT	200000
 
 int
 nvme_ns_dump(struct nvme_namespace *ns, void *virt, off_t offset, size_t len)
@@ -171,22 +171,21 @@ nvme_ns_dump(struct nvme_namespace *ns, void *virt, of
 		return (ENOMEM);
 
 	cmd = &req->cmd;
-	cmd->opc = NVME_OPC_WRITE;
-	cmd->nsid = ns->id;
 
-	lba = offset / nvme_ns_get_sector_size(ns);
-	lba_count = len / nvme_ns_get_sector_size(ns);
+	if (len > 0) {
+		lba = offset / nvme_ns_get_sector_size(ns);
+		lba_count = len / nvme_ns_get_sector_size(ns);
+		nvme_ns_write_cmd(cmd, ns->id, lba, lba_count);
+	} else
+		nvme_ns_flush_cmd(cmd, ns->id);
 
-	*(uint64_t *)&cmd->cdw10 = lba;
-	cmd->cdw12 = lba_count - 1;
-
 	nvme_ctrlr_submit_io_request(ns->ctrlr, req);
 	if (req->qpair == NULL)
 		return (ENXIO);
 
 	i = 0;
 	while ((i++ < NVD_DUMP_TIMEOUT) && (status.done == FALSE)) {
-		DELAY(10);
+		DELAY(5);
 		nvme_qpair_process_completions(req->qpair);
 	}
 


More information about the svn-src-all mailing list