On Tue, Apr 30, 2024 at 09:51:25PM +0900, Damien Le Moal wrote: > Large write BIOs that span a zone boundary are split in > blk_mq_submit_bio() before being passed to blk_zone_plug_bio() for zone > write plugging. Such split BIO will be chained with one fragment > targeting one zone and the remainder of the BIO tergetting the next s/tergetting/targetting/ > Fix this by modifying disk_should_remove_zone_wplug() to check that the > reference count to a zone write plug is not larger than 2, that is, that > the only references left on the zone are the caller held reference > (blk_zone_write_plug_complete_request()) and the initial extra reference > for the zone write plug taken when it was initialized (and that is > dropped when the zone write plug is removed from the hash table). How is this atomic_read() based check not racy?