On Sat, 2007-12-22 at 23:56 +0100, Rafael J. Wysocki wrote: > On Saturday, 22 of December 2007, James Bottomley wrote: > > I've no idea why this is occurring: > > > > WARNING: at kernel/lockdep.c:700 look_up_lock_class() > > Pid: 2068, comm: scsi_wq_3 Not tainted 2.6.24-rc6 #38 > > [<c010535a>] show_trace_log_lvl+0x1a/0x30 > > [<c0105ce2>] show_trace+0x12/0x20 > > [<c010601c>] dump_stack+0x6c/0x80 > > [<c014696d>] __lock_acquire+0x46d/0x10b0 > > [<c0147628>] lock_acquire+0x78/0xa0 > > [<c0136d18>] run_workqueue+0x128/0x1d0 > > [<c013795c>] worker_thread+0x8c/0xf0 > > [<c013ab32>] kthread+0x42/0x70 > > [<c0104f47>] kernel_thread_helper+0x7/0x10 > > ======================= > > > > it looks to be happening on the initial workqueue.c:run_workqueue() > > > > spin_lock_irq(&cwq->lock); > > > > It's caused by lockdep.c:look_up_lock_class() > > > > WARN_ON_ONCE(class->name != lock->name); > > > > but I'm not entirely sure what this actually means, not fully > > understanding lockdep classes and how we acquire them in scsi. > > I guess Ingo and/or Peter should have a look at this.
This makes me think of an invalid use of lockdep_set_class(). The typical way to trigger this is: struct lock_class_key my_keys[10]; struct my_obj *create_my_obj1() { ... spin_lock_init(&my_obj.lock); lockdep_set_class(&my_obj.lock, my_keys + foo); ... } struct my_obj *create_my_obj2() { ... spin_lock_init(&my_obj.lock); lockdep_set_class(&my_obj.lock, my_keys + bar); ... } This initializes &my_obj.lock to the same class (provides foo and bar evaluate to the same), but give it a different name. #define lockdep_set_class(lock, key) \ lockdep_init_map(&(lock)->dep_map, #key, key, 0) The name is #key, so: "my_keys + foo" vs "my_keys + bar" The possible fixes are: - make key identical by changing the expression - use lockdep_set_class_and_name() and specify a consistent name by hand. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/