Add a brief comment explaining why we can return ETIMEDOUT from the call to the

polled interface. Normally this would have the potential to corrupt stack memory
because the completion routines would run after we return. In this case,
however, we're doing a dump so it's safe for reasons explained in the comment.
This commit is contained in:
Warner Losh 2019-09-02 17:10:46 +00:00
parent 7a8cbc5288
commit fc68da4b4d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=351704

View File

@ -191,6 +191,14 @@ nvme_ns_dump(struct nvme_namespace *ns, void *virt, off_t offset, size_t len)
nvme_qpair_process_completions(req->qpair);
}
/*
* Normally, when using the polling interface, we can't return a
* timeout error because we don't know when the completion routines
* will be called if the command later completes. However, in this
* case we're running a system dump, so all interrupts are turned
* off, the scheduler isn't running so there's nothing to complete
* the transaction.
*/
if (status.done == FALSE)
return (ETIMEDOUT);