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-stable
mailing list