Thread (19 messages) 19 messages, 3 authors, 2015-09-14

Re: [RFC][PATCH RT 0/3] RT: Fix trylock deadlock without msleep() hack

From: Ingo Molnar <mingo@kernel.org>
Date: 2015-09-14 09:50:15
Also in: lkml

* Thomas Gleixner [off-list ref] wrote:
quoted
And if we are into getting reference counts, why not solve it at a higher 
level and get a reference count to 'x' to make sure it's safe to use? Then we 
could do:

        lock(y->lock);
retry:
        x = y->x;
        if (!trylock(x->lock)) {
                get_ref(x->count)
                unlock(y->lock);
                lock(x->lock);
                lock(y->lock);
                put_ref(x->count);
                if (y->x != x) { /* Retry if 'x' got dropped meanwhile */
                        unlock(x->lock);
                        goto retry;
                }
         }

Or so.
In the case of dcache::dentry_kill() we probably do not have to take refcounts 
and it might be actually counterproductive to do so. y->x, i.e. dentry->parent, 
cannot vanish under us, if I understand the life time rules correctly.
Ok, that's even better.
Aside of that, yes, I was thinking about a similar scheme for that. I need some 
more time to grok all the rules there :)
Ok, great! :-)

I really don't think we need a new locking primitive - and with something like the 
above we could improve the code upstream as well and make it scale better in some 
scenarios, right?

Thanks,

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