• T
    sysfs: move sysfs file poll implementation to sysfs_open_dirent · a4e8b912
    Tejun Heo 提交于
    Sysfs file poll implementation is scattered over sysfs and kobject.
    Event numbering is done in sysfs_dirent but wait itself is done on
    kobject.  This not only unecessarily bloats both kobject and
    sysfs_dirent but is also buggy - if a sysfs_dirent is removed while
    there still are pollers, the associaton betwen the kobject and
    sysfs_dirent breaks and kobject may be freed with the pollers still
    sleeping on it.
    
    This patch moves whole poll implementation into sysfs_open_dirent.
    Each time a sysfs_open_dirent is created, event number restarts from 1
    and pollers sleep on sysfs_open_dirent.  As event sequence number is
    meaningless without any open file and pollers should have open file
    and thus sysfs_open_dirent, this ephemeral event counting works and is
    a saner implementation.
    
    This patch fixes the dnagling sleepers bug and reduces the sizes of
    kobject and sysfs_dirent by one pointer.
    Signed-off-by: NTejun Heo <htejun@gmail.com>
    Acked-by: NCornelia Huck <cornelia.huck@de.ibm.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    a4e8b912
dir.c 21.4 KB