On 3/27/24 9:30 PM, Christoph Hellwig wrote:
Please verify my idea carefully, but I think we can do without the RCU grace period and thus the rcu_head in struct blk_zone_wplug: When the zwplug is removed from the hash, we set the BLK_ZONE_WPLUG_UNHASHED flag under disk->zone_wplugs_lock. Once caller see that flag any lookup that modifies the structure will fail/wait. If we then just clear BLK_ZONE_WPLUG_UNHASHED after the final put in disk_put_zone_wplug when we know the bio list is empty and no other state is kept (if there might be flags left we should clear them before), it is perfectly fine for the zwplug to get reused for another zone at this point.
Hi Christoph, I don't think this is allowed without grace period between kfree() and reusing a zwplug because another thread might be iterating over the hlist while only holding an RCU reader lock. Thanks, Bart.