On Oct 22 08:01, Keith Busch wrote: > On Thu, Oct 22, 2020 at 09:33:13AM +0200, Klaus Jensen wrote: > > + if (--(*discards)) { > > + status = NVME_NO_COMPLETE; > > + } else { > > + g_free(discards); > > + req->opaque = NULL; > > This case needs a > > status = req->status; > > So that we get the error set in the callback. >
There are no cases that result in a non-zero status code here. If an LBA range is invalid we simply continue with the next. In case the DMA transfer fails, we return the error directly and the normal path takes care of it. The else block is for when there are no pending aios for some reason (all invalid ranges or they completed immediately) - in that case we can just return NVME_SUCCESS directly. > Otherwise, this looks fine. I am assuming everything still runs single > threaded since this isn't using atomics. Yeah, all device code (including callbacks) run on the main thread.
signature.asc
Description: PGP signature