On 11/19/24 9:27 AM, Bart Van Assche wrote: > Fix a reference count leak in disk_zone_wplug_handle_error() > > Fixes: dd291d77cc90 ("block: Introduce zone write plugging") > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > block/blk-zoned.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/block/blk-zoned.c b/block/blk-zoned.c > index 70211751df16..3346b8c53605 100644 > --- a/block/blk-zoned.c > +++ b/block/blk-zoned.c > @@ -1337,6 +1337,8 @@ static void disk_zone_wplug_handle_error(struct gendisk *disk, > > unlock: > spin_unlock_irqrestore(&zwplug->lock, flags); > + > + disk_put_zone_wplug(zwplug); The zone wplug put call is right after the single call site to disk_zone_wplug_handle_error(). The reason it is *not* in that function is that the reference on the wplug for handling an error is taken when the wplug is added to the error list. disk_zone_wplug_handle_error() does not itself take a reference on the wplug. So how did you come up with this ? What workload/operation did you run to find an issue ? > } > > static void disk_zone_wplugs_work(struct work_struct *work) -- Damien Le Moal Western Digital Research