• Eric Sandeen's avatar
    fs: call fsnotify_sb_delete after evict_inodes · 1edc8eb2
    Eric Sandeen authored
    When a filesystem is unmounted, we currently call fsnotify_sb_delete()
    before evict_inodes(), which means that fsnotify_unmount_inodes()
    must iterate over all inodes on the superblock looking for any inodes
    with watches.  This is inefficient and can lead to livelocks as it
    iterates over many unwatched inodes.
    
    At this point, SB_ACTIVE is gone and dropping refcount to zero kicks
    the inode out out immediately, so anything processed by
    fsnotify_sb_delete / fsnotify_unmount_inodes gets evicted in that loop.
    
    After that, the call to evict_inodes will evict everything else with a
    zero refcount.
    
    This should speed things up overall, and avoid livelocks in
    fsnotify_unmount_inodes().
    Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    1edc8eb2
fsnotify.c 11.4 KB