• Tejun Heo's avatar
    sysfs: slim down sysfs_dirent->s_active · 8619f979
    Tejun Heo authored
    Make sysfs_dirent->s_active an atomic_t instead of rwsem.  This
    reduces the size of sysfs_dirent from 136 to 104 on 64bit and from 76
    to 60 on 32bit with lock debugging turned off.  With lock debugging
    turned on the reduction is much larger.
    
    s_active starts at zero and each active reference increments s_active.
    Putting a reference decrements s_active.  Deactivation subtracts
    SD_DEACTIVATED_BIAS which is currently INT_MIN and assumed to be small
    enough to make s_active negative.  If s_active is negative,
    sysfs_get() no longer grants new references.  Deactivation succeeds
    immediately if there is no active user; otherwise, it waits using a
    completion for the last put.
    
    Due to the removal of lockdep tricks, this change makes things less
    trickier in release_sysfs_dirent().  As all the complexity is
    contained in three s_active functions, I think it's more readable this
    way.
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    8619f979
dir.c 19.6 KB