On 3/28/24 15:03, Christoph Hellwig wrote: > On Thu, Mar 28, 2024 at 03:02:54PM +0900, Damien Le Moal wrote: >> But that is the problem: "checking the zone number again" means referencing the >> plug struct again from the lookup context while the last ref drop context is >> freeing the plug. That race can be lost by the lookup context and lead to >> referencing freed memory. So your solution would be OK for pre-allocated plugs >> only. > > Not if it is done in the Rcu critical section. > >> For kmalloc-ed() plugs, we still need the rcu grace period for free. So we >> can only optimize for the pre-allocated plugs... > > Yes, bt it can use kfree_rcu which doesn't need the rcu_head in the > zwplug. Unfortunately, it does. kfree_rcu() is a 2 argument macro: address and rcu head to use... The only thing we could drop from the plug struct is the gendisk pointer. -- Damien Le Moal Western Digital Research