[LU-7345] lockdep warning on dt_write_lock(env,parent,0) Created: 27/Oct/15  Updated: 18/Nov/15  Resolved: 18/Nov/15

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.8.0
Fix Version/s: Lustre 2.8.0

Type: Bug Priority: Minor
Reporter: Olaf Faaland Assignee: Dmitry Eremin (Inactive)
Resolution: Fixed Votes: 0
Labels: llnl, patch
Environment:

TOSS 2.3-6 / 2.6.32-504.16.2.1chaos.ch5.3.x86_64.debug
(CONFIG_LOCKDEP=y)


Severity: 3
Rank (Obsolete): 9223372036854775807

 Description   

Upon mounting MDT, lockdep emits a warning:

[ INFO: possible recursive locking detected ]
2.6.32-504.16.2.1chaos.ch5.3.x86_64.debug #1
---------------------------------------------
llog_process_th/22500 is trying to acquire lock:
(&mo->oo_sem){++++++}, at: [<ffffffffa10e6c01>] osd_object_write_lock+0x61/0x70 [osd_zfs]

but task is already holding lock:
(&mo->oo_sem){++++++}, at: [<ffffffffa10e6c01>] osd_object_write_lock+0x61/0x70 [osd_zfs]

other info that might help us debug this:
1 lock held by llog_process_th/22500:
#0: (&mo->oo_sem){++++++}, at: [<ffffffffa10e6c01>] osd_object_write_lock+0x61/0x70 [osd_zfs]

stack backtrace:
Pid: 22500, comm: llog_process_th Tainted: G W --------------- 2.6.32-504.16.2.1chaos.ch5.3.x86_64.debug #1
Call Trace:
[<ffffffff810bfe90>] ? __lock_acquire+0x11b0/0x1560
[<ffffffffa0abc225>] ? lu_object_put+0x135/0x3b0 [obdclass]
[<ffffffff810c02e4>] ? lock_acquire+0xa4/0x120
[<ffffffffa10e6c01>] ? osd_object_write_lock+0x61/0x70 [osd_zfs]
[<ffffffff815603b1>] ? down_write+0x61/0xb0
[<ffffffffa10e6c01>] ? osd_object_write_lock+0x61/0x70 [osd_zfs]
[<ffffffffa10e6c01>] ? osd_object_write_lock+0x61/0x70 [osd_zfs]
[<ffffffffa0a9b374>] ? dt_write_lock.clone.4+0x24/0xc0 [obdclass]
[<ffffffffa0a9eea4>] ? __local_file_create+0x6b4/0xbb0 [obdclass]
[<ffffffffa0a9f673>] ? local_file_find_or_create+0x123/0x190 [obdclass]
[<ffffffffa1075706>] ? lquota_disk_dir_find_create+0x136/0x610 [lquota]
[<ffffffffa108e056>] ? qmt_device_prepare+0xb6/0x200 [lquota]
[<ffffffffa11c4387>] ? mdt_quota_init+0xdb7/0x1360 [mdt]
[<ffffffffa11cbb65>] ? mdt_device_alloc+0x1095/0x1260 [mdt]
[<ffffffffa0aa242f>] ? obd_setup+0x1bf/0x290 [obdclass]
[<ffffffffa0aa2758>] ? class_setup+0x258/0x930 [obdclass]
[<ffffffffa0aa9011>] ? class_process_config+0x1151/0x26d0 [obdclass]
[<ffffffff8118c983>] ? cache_alloc_debugcheck_after+0xf3/0x230
[<ffffffff81545b30>] ? kmemleak_alloc+0x20/0xd0
[<ffffffff8118ffdb>] ? __kmalloc+0x21b/0x330
[<ffffffffa0aabe2f>] ? class_config_llog_handler+0xa8f/0x1fb0 [obdclass]
[<ffffffffa0aabfb6>] ? class_config_llog_handler+0xc16/0x1fb0 [obdclass]
[<ffffffffa0a6f212>] ? llog_process_thread+0x932/0xfc0 [obdclass]
[<ffffffffa0a6fde8>] ? llog_process_thread_daemonize+0x48/0x70 [obdclass]
[<ffffffffa0a6fda0>] ? llog_process_thread_daemonize+0x0/0x70 [obdclass]
[<ffffffff810a4cbe>] ? kthread+0x9e/0xc0
[<ffffffff8100c30a>] ? child_rip+0xa/0x20
[<ffffffff8100bb10>] ? restore_args+0x0/0x30
[<ffffffff810a4c20>] ? kthread+0x0/0xc0
[<ffffffff8100c300>] ? child_rip+0x0/0x20

I believe this occurs because __local_file_create() calls dt_write_lock(env, dto, 0) followed by dt_write_lock(env, parent, 0); since dto and parent are both dt_object, and no lock class was explicitly set, the class for the embedded locks are the same and based on the class it appears to be a recursive lock attempt.

So, I believe the warning to be a false positive.

The actual stack, appears to me to be:
down_write
osd_object_write_lock [osd_zfs]
do_write_lock AKA osd_object_write_lock
dt_write_lock
__local_file_create [obdclass]
local_file_find_or_create [obdclass]
lquota_disk_dir_find_create [lquota]
qmt_device_prepare [lquota]
ldo_prepare AKA qmt_device_prepare
mdt_quota_init [mdt]
mdt_init0
mdt_device_alloc [mdt]

I'll submit a patch. It does make the symptom go away, but it would be good for someone to confirm my diagnosis.



 Comments   
Comment by Gerrit Updater [ 27/Oct/15 ]

Olaf Faaland-LLNL (faaland1@llnl.gov) uploaded a new patch: http://review.whamcloud.com/16957
Subject: LU-7345 obdclass: annotate locks in __local_file_create
Project: fs/lustre-release
Branch: master
Current Patch Set: 1
Commit: 3ba1e9a4d3244b05b805a444f2498e53283b34ef

Comment by Peter Jones [ 27/Oct/15 ]

Dmitry

Could you please review this patch?

Thanks

Peter

Comment by Gerrit Updater [ 15/Nov/15 ]

Oleg Drokin (oleg.drokin@intel.com) merged in patch http://review.whamcloud.com/16957/
Subject: LU-7345 obdclass: annotate locks in __local_file_create
Project: fs/lustre-release
Branch: master
Current Patch Set:
Commit: 953e9e5e75ca12a5ef72bfe844c1216341af12c9

Comment by Joseph Gmitter (Inactive) [ 18/Nov/15 ]

Landed for 2.8

Generated at Sat Feb 10 02:08:05 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.