• Linus Torvalds's avatar
    ext3: fix broken handling of EXT3_STATE_NEW · de329820
    Linus Torvalds authored
    In commit 9df93939 ("ext3: Use bitops to read/modify
    EXT3_I(inode)->i_state") ext3 changed its internal 'i_state' variable to
    use bitops for its state handling.  However, unline the same ext4
    change, it didn't actually change the name of the field when it changed
    the semantics of it.
    
    As a result, an old use of 'i_state' remained in fs/ext3/ialloc.c that
    initialized the field to EXT3_STATE_NEW.  And that does not work
    _at_all_ when we're now working with individually named bits rather than
    values that get masked.  So the code tried to mark the state to be new,
    but in actual fact set the field to EXT3_STATE_JDATA.  Which makes no
    sense at all, and screws up all the code that checks whether the inode
    was newly allocated.
    
    In particular, it made the xattr code unhappy, and caused various random
    behavior, like apparently
    
    	https://bugzilla.redhat.com/show_bug.cgi?id=577911
    
    So fix the initialization, and rename the field to match ext4 so that we
    don't have this happen again.
    
    Cc: James Morris <jmorris@namei.org>
    Cc: Stephen Smalley <sds@tycho.nsa.gov>
    Cc: Daniel J Walsh <dwalsh@redhat.com>
    Cc: Eric Paris <eparis@redhat.com>
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    de329820
ialloc.c 21.1 KB