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:
parent
7a8cbc5288
commit
fc68da4b4d
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user