• Josh Hunt's avatar
    ext2: Fix link count corruption under heavy link+rename load · db273d34
    Josh Hunt authored
    commit e8a80c6f upstream.
    
    vfs_rename_other() does not lock renamed inode with i_mutex. Thus changing
    i_nlink in a non-atomic manner (which happens in ext2_rename()) can corrupt
    it as reported and analyzed by Josh.
    
    In fact, there is no good reason to mess with i_nlink of the moved file.
    We did it presumably to simulate linking into the new directory and unlinking
    from an old one. But the practical effect of this is disputable because fsck
    can possibly treat file as being properly linked into both directories without
    writing any error which is confusing. So we just stop increment-decrement
    games with i_nlink which also fixes the corruption.
    
    CC: Al Viro <viro@ZenIV.linux.org.uk>
    Signed-off-by: default avatarJosh Hunt <johunt@akamai.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    db273d34
namei.c 9.32 KB