Re: [PATCH V4 5/9] null_blk: free zones array on device power-off
From: Zizhi Wo
Date: Fri Jul 10 2026 - 20:52:32 EST
Hi Nilay!
在 2026/7/10 22:24, Nilay Shroff 写道:
On 7/9/26 3:34 PM, Zizhi Wo wrote:
null_init_zoned_dev() allocates dev->zones when a zoned device is powered
on, but null_del_dev() never frees it on power-off; dev->zones is only
freed later in null_free_dev(), when the configfs directory is removed. If
the device is powered off and then on again, null_init_zoned_dev()
allocates a new array and overwrites the dev->zones pointer, leaking the
previous allocation each power cycle.
Free dev->zones in null_del_dev() via null_free_zoned_dev() to solve it.
And calling null_del_dev() in null_free_dev() is no longer necessary
because every caller already invokes null_del_dev() first: via
nullb_group_drop_item() before nullb_device_release(), in the
null_add_dev() error path of null_create_dev(), and in null_destroy_dev().
Remove the redundant call.
Looks good to me.
Reviewed-by: Nilay Shroff <nilay@xxxxxxxxxxxxx>
Thanks for the review!
However, I just checked Sashiko and found that modifying it this way
directly would introduce a problem:
the caller of zone_cond_store() is lock-free, and internally it checks
whether dev->zones exists. This would then create a race with my patch.
The reason there was no problem before is that only
nullb_device_release() or null_exit() frees the dev->zones, which
guarantees that subsequent users won't access the configfs interface.
I'll address this issue in the next version by adding locking to them.
Thanks,
Zizhi Wo