• A
    sysfs: get rid of some lockdep false positives · 356c05d5
    Alan Stern 提交于
    This patch (as1554) fixes a lockdep false-positive report.  The
    problem arises because lockdep is unable to deal with the
    tree-structured locks created by the device core and sysfs.
    
    This particular problem involves a sysfs attribute method that
    unregisters itself, not from the device it was called for, but from a
    descendant device.  Lockdep doesn't understand the distinction and
    reports a possible deadlock, even though the operation is safe.
    
    This is the sort of thing that would normally be handled by using a
    nested lock annotation; unfortunately it's not feasible to do that
    here.  There's no sensible way to tell sysfs when attribute removal
    occurs in the context of a parent attribute method.
    
    As a workaround, the patch adds a new flag to struct attribute
    telling sysfs not to inform lockdep when it acquires a readlock on a
    sysfs_dirent instance for the attribute.  The readlock is still
    acquired, but lockdep doesn't know about it and hence does not
    complain about impossible deadlock scenarios.
    
    Also added are macros for static initialization of attribute
    structures with the ignore_lockdep flag set.  The three offending
    attributes in the USB subsystem are converted to use the new macros.
    Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
    Acked-by: NTejun Heo <tj@kernel.org>
    CC: Eric W. Biederman <ebiederm@xmission.com>
    CC: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    356c05d5
sysfs.c 23.6 KB