With this the flush_work is lost for the target passthrough case. I also don't really like the double call to nvme_command_effects(). What about just removing nvme_execute_passthru_rq() and open coding it in the two calles, with the nvme_passthru_end call moved until after freeing the request?