forked fromtorvalds/linux
- Notifications
You must be signed in to change notification settings - Fork1
Commitcf40bd1


Nick Piggin
Ingo Molnar
lockdep: annotate reclaim context (__GFP_NOFS)
Here is another version, with the incremental patch rolled up, andadded reclaim context annotation to kswapd, and allocation tracingto slab allocators (which may only ever reach the page allocatorin rare cases, so it is good to put annotations here too).Haven't tested this version as such, but it should be getting closerto merge worthy ;)--After noticing some code in mm/filemap.c accidentally perform a __GFP_FSallocation when it should not have been, I thought it might be a good idea totry to catch this kind of thing with lockdep.I coded up a little idea that seems to work. Unfortunately the system has toactually be in __GFP_FS page reclaim, then take the lock, before it will markit. But at least that might still be some orders of magnitude more common(and more debuggable) than an actual deadlock condition, so we have someimprovement I hope (the concept is no less complete than discovery of a lock'sinterrupt contexts).I guess we could even do the same thing with __GFP_IO (normal reclaim), andeven GFP_NOIO locks too... but filesystems will have the most locks and fiddlycode paths, so let's start there and see how it goes.It *seems* to work. I did a quick test.=================================[ INFO: inconsistent lock state ]2.6.28-rc6-00007-ged31348-dirtytorvalds#26---------------------------------inconsistent {in-reclaim-W} -> {ov-reclaim-W} usage.modprobe/8526 [HC0[0]:SC0[0]:HE1:SE1] takes: (testlock){--..}, at: [<ffffffffa0020055>] brd_init+0x55/0x216 [brd]{in-reclaim-W} state was registered at: [<ffffffff80267bdb>] __lock_acquire+0x75b/0x1a60 [<ffffffff80268f71>] lock_acquire+0x91/0xc0 [<ffffffff8070f0e1>] mutex_lock_nested+0xb1/0x310 [<ffffffffa002002b>] brd_init+0x2b/0x216 [brd] [<ffffffff8020903b>] _stext+0x3b/0x170 [<ffffffff80272ebf>] sys_init_module+0xaf/0x1e0 [<ffffffff8020c3fb>] system_call_fastpath+0x16/0x1b [<ffffffffffffffff>] 0xffffffffffffffffirq event stamp: 3929hardirqs last enabled at (3929): [<ffffffff8070f2b5>] mutex_lock_nested+0x285/0x310hardirqs last disabled at (3928): [<ffffffff8070f089>] mutex_lock_nested+0x59/0x310softirqs last enabled at (3732): [<ffffffff8061f623>] sk_filter+0x83/0xe0softirqs last disabled at (3730): [<ffffffff8061f5b6>] sk_filter+0x16/0xe0other info that might help us debug this:1 lock held by modprobe/8526: #0: (testlock){--..}, at: [<ffffffffa0020055>] brd_init+0x55/0x216 [brd]stack backtrace:Pid: 8526, comm: modprobe Not tainted 2.6.28-rc6-00007-ged31348-dirtytorvalds#26Call Trace: [<ffffffff80265483>] print_usage_bug+0x193/0x1d0 [<ffffffff80266530>] mark_lock+0xaf0/0xca0 [<ffffffff80266735>] mark_held_locks+0x55/0xc0 [<ffffffffa0020000>] ? brd_init+0x0/0x216 [brd] [<ffffffff802667ca>] trace_reclaim_fs+0x2a/0x60 [<ffffffff80285005>] __alloc_pages_internal+0x475/0x580 [<ffffffff8070f29e>] ? mutex_lock_nested+0x26e/0x310 [<ffffffffa0020000>] ? brd_init+0x0/0x216 [brd] [<ffffffffa002006a>] brd_init+0x6a/0x216 [brd] [<ffffffffa0020000>] ? brd_init+0x0/0x216 [brd] [<ffffffff8020903b>] _stext+0x3b/0x170 [<ffffffff8070f8b9>] ? mutex_unlock+0x9/0x10 [<ffffffff8070f83d>] ? __mutex_unlock_slowpath+0x10d/0x180 [<ffffffff802669ec>] ? trace_hardirqs_on_caller+0x12c/0x190 [<ffffffff80272ebf>] sys_init_module+0xaf/0x1e0 [<ffffffff8020c3fb>] system_call_fastpath+0x16/0x1bSigned-off-by: Nick Piggin <npiggin@suse.de>Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>Signed-off-by: Ingo Molnar <mingo@elte.hu>1 parent6f2b9b9 commitcf40bd1
File tree
10 files changed
+254
-17
lines changed- include/linux
- kernel
- mm
10 files changed
+254
-17
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
27 | 27 |
| |
28 | 28 |
| |
29 | 29 |
| |
| 30 | + | |
30 | 31 |
| |
31 | 32 |
| |
| 33 | + | |
32 | 34 |
| |
33 | 35 |
| |
| 36 | + | |
34 | 37 |
| |
35 | 38 |
| |
| 39 | + | |
36 | 40 |
| |
37 | 41 |
| |
38 | 42 |
| |
| |||
42 | 46 |
| |
43 | 47 |
| |
44 | 48 |
| |
| 49 | + | |
45 | 50 |
| |
46 | 51 |
| |
| 52 | + | |
47 | 53 |
| |
48 | 54 |
| |
49 | 55 |
| |
50 | 56 |
| |
51 | 57 |
| |
52 | 58 |
| |
| 59 | + | |
53 | 60 |
| |
54 | 61 |
| |
| 62 | + | |
55 | 63 |
| |
56 | 64 |
| |
57 | 65 |
| |
| |||
324 | 332 |
| |
325 | 333 |
| |
326 | 334 |
| |
327 |
| - | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
328 | 340 |
| |
329 | 341 |
| |
330 | 342 |
| |
| |||
342 | 354 |
| |
343 | 355 |
| |
344 | 356 |
| |
| 357 | + | |
| 358 | + | |
| 359 | + | |
345 | 360 |
| |
346 | 361 |
| |
347 | 362 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1313 | 1313 |
| |
1314 | 1314 |
| |
1315 | 1315 |
| |
| 1316 | + | |
1316 | 1317 |
| |
1317 | 1318 |
| |
1318 | 1319 |
| |
|
0 commit comments
Comments
(0)