On Wed, Oct 09, 2024 at 09:31:23PM +0900, Sergey Senozhatsky wrote: > > if (!test_bit(GD_OWNS_QUEUE, &disk->state)) { > > + if (test_bit(QUEUE_FLAG_RESURRECT, &q->queue_flags)) { > > + clear_bit(QUEUE_FLAG_DYING, &q->queue_flags); > > + clear_bit(QUEUE_FLAG_RESURRECT, &q->queue_flags); > > + } > > Christoph, shouldn't QUEUE_FLAG_RESURRECT handling be outside of > GD_OWNS_QUEUE if-block? Because __blk_mark_disk_dead() sets > QUEUE_FLAG_DYING/QUEUE_FLAG_RESURRECT regardless of GD_OWNS_QUEUE. For !GD_OWNS_QUEUE the queue is freed right below, so there isn't much of a point. > // A silly nit: it seems the code uses blk_queue_flag_set() and > // blk_queue_flag_clear() helpers, but there is no queue_flag_test(), > // I don't know what if the preference here - stick to queue_flag > // helpers, or is it ok to mix them. Yeah. I looked into a test_and_set wrapper, but then saw how pointless the existing wrappers are. So for now this just open codes it, and once we're done with the fixes I plan to just send a patch to remove the wrappers entirely.