On Tue, Jan 24, 2023 at 07:57:05AM +0100, Christoph Hellwig wrote: > void blkcg_maybe_throttle_current(void) > { > - struct request_queue *q = current->throttle_queue; > + struct gendisk *disk = current->throttle_disk; > struct blkcg *blkcg; > struct blkcg_gq *blkg; > bool use_memdelay = current->use_memdelay; > > - if (!q) > + if (!disk) > return; > > - current->throttle_queue = NULL; > + current->throttle_disk = NULL; > current->use_memdelay = false; > > + if (test_bit(GD_DEAD, &disk->state)) > + goto out_put_disk; ... > @@ -1835,18 +1839,15 @@ void blkcg_maybe_throttle_current(void) > */ > void blkcg_schedule_throttle(struct gendisk *disk, bool use_memdelay) > { > - struct request_queue *q = disk->queue; > - > if (unlikely(current->flags & PF_KTHREAD)) > return; > > - if (current->throttle_queue != q) { > - if (!blk_get_queue(q)) > - return; > + if (current->throttle_disk != disk) { > + get_device(disk_to_dev(disk)); So, we're shifting the dead test from schedule to the actual throttle path, which makes sense but I think this should at least be mentioned in the description if not put in its own patch. Thanks. -- tejun