On Wed, Jul 13, 2022 at 12:03:48PM +0300, Sagi Grimberg wrote: > >>>However io_kiocb is less >>>constrained, and could be used as a context to hold such a space. >>> >>>Even if it is undesired to have io_kiocb be passed to uring_cmd(), it >>>can still hold a driver specific space paired with a helper to obtain it >>>(i.e. something like io_uring_cmd_to_driver_ctx(ioucmd) ). Then if the >>>space is pre-allocated it is only a small memory copy for a stable copy >>>that would allow a saner failover design. >> >>I am thinking along the same lines, but it's not about few bytes of >>space rather we need 80 (72 to be precise). Will think more, but >>these 72 bytes really stand tall in front of my optimism. > >You don't have to populate this space on every I/O, you can just >populate it when there is no usable path and when you failover a >request... Getting the space and when/how to populate it - related but diferent topics in this context. It is about the lifetime of SQE which is valid only for the first submission. If we don't make the command stable at that point, we don't have another chance. And that is exactly what happens for failover. Since we know IO is failed only when it fails, but by that time original passthrough-command is gone out of hand. I think if we somehow get the space (preallocated), it is ok to copy to command for every IO in mpath case. The other part (no usuable path) is fine, because we hit that condition during initial submission and therefore have the chance to allocate/copy the passthrough command. This patch already does that.