CacheFiles: Mark parent directory locks as I_MUTEX_PARENT to keep lockdep happy
Mark parent directory locks as I_MUTEX_PARENT in the callers of
cachefiles_bury_object() so that lockdep doesn't complain when that invokes
vfs_unlink():
=============================================
[ INFO: possible recursive locking detected ]
2.6.32-rc6-cachefs #47
---------------------------------------------
kslowd002/3089 is trying to acquire lock:
(&sb->s_type->i_mutex_key#7){+.+.+.}, at: [<
ffffffff810bbf72>] vfs_unlink+0x8b/0x128
but task is already holding lock:
(&sb->s_type->i_mutex_key#7){+.+.+.}, at: [<
ffffffffa00e4e61>] cachefiles_walk_to_object+0x1b0/0x831 [cachefiles]
other info that might help us debug this:
1 lock held by kslowd002/3089:
#0: (&sb->s_type->i_mutex_key#7){+.+.+.}, at: [<
ffffffffa00e4e61>] cachefiles_walk_to_object+0x1b0/0x831 [cachefiles]
stack backtrace:
Pid: 3089, comm: kslowd002 Not tainted 2.6.32-rc6-cachefs #47
Call Trace:
[<
ffffffff8105ad7b>] __lock_acquire+0x1649/0x16e3
[<
ffffffff8118170e>] ? inode_has_perm+0x5f/0x61
[<
ffffffff8105ae6c>] lock_acquire+0x57/0x6d
[<
ffffffff810bbf72>] ? vfs_unlink+0x8b/0x128
[<
ffffffff81353ac3>] mutex_lock_nested+0x54/0x292
[<
ffffffff810bbf72>] ? vfs_unlink+0x8b/0x128
[<
ffffffff8118179e>] ? selinux_inode_permission+0x8e/0x90
[<
ffffffff8117e271>] ? security_inode_permission+0x1c/0x1e
[<
ffffffff810bb4fb>] ? inode_permission+0x99/0xa5
[<
ffffffff810bbf72>] vfs_unlink+0x8b/0x128
[<
ffffffff810adb19>] ? kfree+0xed/0xf9
[<
ffffffffa00e3f00>] cachefiles_bury_object+0xb6/0x420 [cachefiles]
[<
ffffffff81058e21>] ? trace_hardirqs_on+0xd/0xf
[<
ffffffffa00e7e24>] ? cachefiles_check_object_xattr+0x233/0x293 [cachefiles]
[<
ffffffffa00e51b0>] cachefiles_walk_to_object+0x4ff/0x831 [cachefiles]
[<
ffffffff81032238>] ? finish_task_switch+0x0/0xb2
[<
ffffffffa00e3429>] cachefiles_lookup_object+0xac/0x12a [cachefiles]
[<
ffffffffa00741e9>] fscache_lookup_object+0x1c7/0x214 [fscache]
[<
ffffffffa0074fc5>] fscache_object_state_machine+0xa5/0x52d [fscache]
[<
ffffffffa00754ac>] fscache_object_slow_work_execute+0x5f/0xa0 [fscache]
[<
ffffffff81082093>] slow_work_execute+0x18f/0x2d1
[<
ffffffff8108239a>] slow_work_thread+0x1c5/0x308
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff810821d5>] ? slow_work_thread+0x0/0x308
[<
ffffffff8104be91>] kthread+0x7a/0x82
[<
ffffffff8100beda>] child_rip+0xa/0x20
[<
ffffffff8100b87c>] ? restore_args+0x0/0x30
[<
ffffffff8104be17>] ? kthread+0x0/0x82
[<
ffffffff8100bed0>] ? child_rip+0x0/0x20
Signed-off-by: Daivd Howells <dhowells@redhat.com>