Thread (26 messages) 26 messages, 4 authors, 2019-03-11

Re: [PATCH 2/5] rhashtable: don't hold lock on first table throughout insertion.

From: NeilBrown <hidden>
Date: 2018-07-23 21:52:16
Also in: lkml

On Mon, Jul 23 2018, Paul E. McKenney wrote:
On Mon, Jul 23, 2018 at 09:13:43AM +1000, NeilBrown wrote:
quoted
On Sun, Jul 22 2018, Paul E. McKenney wrote:
quoted
One issue is that the ->func pointer can legitimately be NULL while on
RCU's callback lists.  This happens when someone invokes kfree_rcu()
with the rcu_head structure at the beginning of the enclosing structure.
I could add an offset to avoid this, or perhaps the kmalloc() folks
could be persuaded Rao Shoaib's patch moving kfree_rcu() handling to
the slab allocators, so that RCU only ever sees function pointers in
the ->func field.

Either way, this should be hidden behind an API to allow adjustments
to be made if needed.  Maybe something like is_after_call_rcu()?
This would (for example) allow debug-object checks to be used to catch
check-after-free bugs.

Would something of that sort work for you?
Yes, if you could provide an is_after_call_rcu() API, that would
perfectly suit my use-case.
After beating my head against the object-debug code a bit, I have to ask
if it would be OK for you if the is_after_call_rcu() API also takes the
function that was passed to RCU.
Sure.  It feels a bit clumsy, but I can see it could be easier to make
robust.
So yes: I'm fine with pass the same function and rcu_head to both
call_rcu() and is_after_call_rcu().  Actually, when I say it like that,
it seems less clumsy :-)

Thanks,
NeilBrown

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help