• Josh Hunt's avatar
    ext2: Fix link count corruption under heavy link+rename load · 03885ac3
    Josh Hunt authored
    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: stable@kernel.org
    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>
    03885ac3
namei.c 9.5 KB