• Jan Kara's avatar
    ocfs2: Avoid livelock in ocfs2_readpage() · c7e25e6e
    Jan Kara authored
    When someone writes to an inode, readers accessing the same inode via
    ocfs2_readpage() just busyloop trying to get ip_alloc_sem because
    do_generic_file_read() looks up the page again and retries ->readpage()
    when previous attempt failed with AOP_TRUNCATED_PAGE. When there are enough
    readers, they can occupy all CPUs and in non-preempt kernel the system is
    deadlocked because writer holding ip_alloc_sem is never run to release the
    semaphore. Fix the problem by making reader block on ip_alloc_sem to break
    the busy loop.
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarJoel Becker <jlbec@evilplan.org>
    c7e25e6e
aops.c 52.1 KB