Btrfs: atomically set inode->i_flags in btrfs_update_iflags
authorFilipe Manana <fdmanana@gmail.com>
Wed, 25 Jun 2014 21:36:02 +0000 (22:36 +0100)
committerChris Mason <clm@fb.com>
Thu, 3 Jul 2014 14:03:23 +0000 (07:03 -0700)
commit3cc79392558f1789e5e1d2fce44b681980f403c3
treef0f71bc0170de156ec9b772ab886fa53c458746d
parent472b909ff6f4884d235ef7b9d3847fad5efafbff
Btrfs: atomically set inode->i_flags in btrfs_update_iflags

This change is based on the corresponding recent change for ext4:

  ext4: atomically set inode->i_flags in ext4_set_inode_flags()

That has the following commit message that applies to btrfs as well:

  "Use cmpxchg() to atomically set i_flags instead of clearing out the
   S_IMMUTABLE, S_APPEND, etc. flags and then setting them from the
   EXT4_IMMUTABLE_FL, EXT4_APPEND_FL flags, since this opens up a race
   where an immutable file has the immutable flag cleared for a brief
   window of time."

Replacing EXT4_IMMUTABLE_FL and EXT4_APPEND_FL with BTRFS_INODE_IMMUTABLE
and BTRFS_INODE_APPEND, respectively.

Reviewed-by: David Sterba <dsterba@suse.cz>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/ioctl.c