Thank you Christoph. I will do some testing with my setup and let you know. - Tong
On Tue, Sep 22, 2020 at 9:59 AM Christoph Hellwig <h...@lst.de> wrote: > > Hi Tong, > > can you test this patch? > > diff --git a/block/genhd.c b/block/genhd.c > index 99c64641c3148c..6473ae703789e4 100644 > --- a/block/genhd.c > +++ b/block/genhd.c > @@ -836,6 +836,7 @@ static void __device_add_disk(struct device *parent, > struct gendisk *disk, > * so that it sticks around as long as @disk is there. > */ > WARN_ON_ONCE(!blk_get_queue(disk->queue)); > + disk->flags |= GENHD_FL_QUEUE_REF; > > disk_add_events(disk); > blk_integrity_add(disk); > @@ -1567,7 +1568,7 @@ static void disk_release(struct device *dev) > kfree(disk->random); > disk_replace_part_tbl(disk, NULL); > hd_free_part(&disk->part0); > - if (disk->queue) > + if (disk->flags & GENHD_FL_QUEUE_REF) > blk_put_queue(disk->queue); > kfree(disk); > } > diff --git a/include/linux/genhd.h b/include/linux/genhd.h > index 4ab853461dff25..9441077ee10329 100644 > --- a/include/linux/genhd.h > +++ b/include/linux/genhd.h > @@ -135,6 +135,7 @@ struct hd_struct { > #define GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE 0x0100 > #define GENHD_FL_NO_PART_SCAN 0x0200 > #define GENHD_FL_HIDDEN 0x0400 > +#define GENHD_FL_QUEUE_REF 0x0800 > > enum { > DISK_EVENT_MEDIA_CHANGE = 1 << 0, /* media changed */