ext4: don't trash state flags in EXT4_IOC_SETFLAGS
authorTheodore Ts'o <tytso@mit.edu>
Fri, 1 Jun 2012 03:46:01 +0000 (23:46 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 9 Jun 2012 15:36:16 +0000 (00:36 +0900)
commit5720f8de251bbf23fc9f4191d6ed5734110b7d67
treeb4cdfad6bd419c59d552aee6d14ba3765867f310
parentd7286a55eb1088df8f8d8c1bde34e0342c63804c
ext4: don't trash state flags in EXT4_IOC_SETFLAGS

commit 79906964a187c405db72a3abc60eb9b50d804fbc upstream.

In commit 353eb83c we removed i_state_flags with 64-bit longs, But
when handling the EXT4_IOC_SETFLAGS ioctl, we replace i_flags
directly, which trashes the state flags which are stored in the high
32-bits of i_flags on 64-bit platforms.  So use the the
ext4_{set,clear}_inode_flags() functions which use atomic bit
manipulation functions instead.

Reported-by: Tao Ma <boyu.mt@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ext4/ioctl.c