On 11/28/24 02:10, Bart Van Assche wrote: > On 11/26/24 10:21 PM, Christoph Hellwig wrote: >> On Tue, Nov 26, 2024 at 10:16:18PM -0800, Christoph Hellwig wrote: >>> Did you trace where the bio_wouldblock_error is coming from? Probably >>> a failing request allocation? Can we call the guts of blk_zone_plug_bio >>> after allocating the request to avoid this? >> >> The easier option might be to simply to "unprepare" the bio >> (i.e. undo the append op rewrite and sector adjustment), decrement >> wp_offset and retun. Given that no one else could issue I/O >> while we were trying to allocate the bio this should work just fine. > > Yet another possibility is to move the code that updates > zwplug->wp_offset from blk_zone_plug_bio() into > blk_zone_write_plug_init_request(). With this change the > zwplug->wp_offset update won't have to be undone in any case since it > happens after the all code in blk_mq_submit_bio() that can potentially > fail. We could for mq devices, but given that blk_zone_write_plug_init_request() is not used for BIO devices (dm), we would still need to update the wp early. And DM may have different failure patterns for REQ_NOWAIT BIOs, so it seems simpler and more solid to punt the BIO to the BIO work and ignore the REQ_NOWAIT flag there. -- Damien Le Moal Western Digital Research