f2fs: avoid race in between read xattr & write xattr
authorYunlei He <heyunlei@huawei.com>
Thu, 7 Sep 2017 02:40:54 +0000 (10:40 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 8 Sep 2017 03:57:20 +0000 (20:57 -0700)
commit27161f13e3c3241944846ac24942a85cceda0a2c
treebdd36b6171f9d48fd4a3c68c6f091697bb4cfaba
parent13ba41e346170e594b7ce582561b3efa5b85f18f
f2fs: avoid race in between read xattr & write xattr

Thread A: Thread B:
-f2fs_getxattr
   -lookup_all_xattrs
      -xnid = F2FS_I(inode)->i_xattr_nid;
-f2fs_setxattr
    -__f2fs_setxattr
        -write_all_xattrs
            -truncate_xattr_node
          ...  ...
-write_checkpoint
  ...  ...
-alloc_nid   <- nid reuse
          -get_node_page
              -f2fs_bug_on  <- nid != node_footer->nid

It's need a rw_sem to avoid the race

Signed-off-by: Yunlei He <heyunlei@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/f2fs.h
fs/f2fs/super.c
fs/f2fs/xattr.c