Re: Xfs lockdep warning with for-dave-for-4.6 branch
From: Peter Zijlstra <peterz@infradead.org>
Date: 2016-06-02 15:11:20
Also in:
linux-xfs
On Thu, Jun 02, 2016 at 04:50:49PM +0200, Michal Hocko wrote:
On Wed 01-06-16 20:16:17, Peter Zijlstra wrote:
quoted
So my favourite is the dedicated GFP flag, but if that's unpalatable for the mm folks then something like the below might work. It should be similar in effect to your proposal, except its more limited in scope.[...]quoted
@@ -2876,11 +2883,36 @@ static void __lockdep_trace_alloc(gfp_t gfp_mask, unsigned long flags) if (DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags))) return; + /* + * Skip _one_ allocation as per the lockdep_skip_alloc() request. + * Must be done last so that we don't loose the annotation for + * GFP_ATOMIC like things from IRQ or other nesting contexts. + */ + if (current->lockdep_reclaim_gfp & __GFP_SKIP_ALLOC) { + current->lockdep_reclaim_gfp &= ~__GFP_SKIP_ALLOC; + return; + } + mark_held_locks(curr, RECLAIM_FS); }I might be missing something but does this work actually? Say you would want a kmalloc(size), it would call slab_alloc_node slab_pre_alloc_hook lockdep_trace_alloc [...] ____cache_alloc_node cache_grow_begin kmem_getpages __alloc_pages_node __alloc_pages_nodemask lockdep_trace_alloc
Bugger :/ You're right, that would fail. So how about doing: #define __GFP_NOLOCKDEP (1u << __GFP_BITS_SHIFT) this means it cannot be part of address_space::flags or radix_tree_root::gfp_mask, but that might not be a bad thing. And this solves the scarcity thing, because per pagemap we need to have 5 'spare' bits anyway.
I understand your concerns about the scope but usually all allocations have to be __GFP_NOFS or none in the same scope so I would see it as a huge deal.
With scope I mostly meant the fact that you have two calls that you need to pair up. That's not really nice as you can 'annotate' a _lot_ of code in between. I prefer the narrower annotations where you annotate a single specific site. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>