linux/fs/xfs/libxfs
Jan Kara 037542345a xfs: Fix file type directory corruption for btree directories
Users have occasionally reported that file type for some directory
entries is wrong. This mostly happened after updating libraries some
libraries. After some debugging the problem was traced down to
xfs_dir2_node_replace(). The function uses args->filetype as a file type
to store in the replaced directory entry however it also calls
xfs_da3_node_lookup_int() which will store file type of the current
directory entry in args->filetype. Thus we fail to change file type of a
directory entry to a proper type.

Fix the problem by storing new file type in a local variable before
calling xfs_da3_node_lookup_int().

cc: <stable@vger.kernel.org> # 3.16 - 4.x
Reported-by: Giacomo Comes <comes@naic.edu>
Signed-off-by: Jan Kara <jack@suse.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
2015-08-25 10:05:13 +10:00
..
xfs_alloc_btree.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_alloc_btree.h
xfs_alloc.c xfs: Fix uninitialized return value in xfs_alloc_fix_freelist() 2015-08-25 10:05:13 +10:00
xfs_alloc.h Merge branch 'xfs-freelist-cleanup' into for-next 2015-06-23 08:48:43 +10:00
xfs_attr_leaf.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_attr_leaf.h xfs: xfs_attr_inactive leaves inconsistent attr fork state behind 2015-05-29 07:40:08 +10:00
xfs_attr_remote.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_attr_remote.h
xfs_attr_sf.h
xfs_attr.c xfs: set XFS_DA_OP_OKNOENT in xfs_attr_get 2015-08-19 10:30:48 +10:00
xfs_bit.h
xfs_bmap_btree.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_bmap_btree.h
xfs_bmap.c Merge branch 'xfs-freelist-cleanup' into for-next 2015-06-23 08:48:43 +10:00
xfs_bmap.h xfs: Add support FALLOC_FL_INSERT_RANGE for fallocate 2015-03-25 15:08:56 +11:00
xfs_btree.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_btree.h xfs: require 64-bit sector_t 2014-07-30 09:12:05 +10:00
xfs_cksum.h
xfs_da_btree.c xfs: swap leaf buffer into path struct atomically during path shift 2015-08-19 10:32:33 +10:00
xfs_da_btree.h
xfs_da_format.c xfs: move most of xfs_sb.h to xfs_format.h 2014-11-28 14:27:09 +11:00
xfs_da_format.h xfs: Fix xfs_attr_leafblock definition 2015-08-19 10:34:32 +10:00
xfs_dir2_block.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_dir2_data.c libxfs: readahead of dir3 data blocks should use the read verifier 2015-08-19 10:33:58 +10:00
xfs_dir2_leaf.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_dir2_node.c xfs: Fix file type directory corruption for btree directories 2015-08-25 10:05:13 +10:00
xfs_dir2_priv.h xfs: move type conversion functions to xfs_dir.h 2014-12-04 09:43:17 +11:00
xfs_dir2_sf.c Merge branch 'xfs-misc-fixes-for-3.19-2' into for-next 2014-12-04 09:46:17 +11:00
xfs_dir2.c xfs: stop holding ILOCK over filldir callbacks 2015-08-19 10:33:00 +10:00
xfs_dir2.h xfs: move type conversion functions to xfs_dir.h 2014-12-04 09:43:17 +11:00
xfs_dquot_buf.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_format.h xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_fs.h xfs: add fs geometry bit for sparse inode chunks 2015-05-29 08:58:32 +10:00
xfs_ialloc_btree.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_ialloc_btree.h xfs: allocate sparse inode chunks on full chunk allocation failure 2015-05-29 09:18:32 +10:00
xfs_ialloc.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_ialloc.h Merge branch 'xfs-misc-fixes-for-4.2-3' into for-next 2015-06-23 08:49:01 +10:00
xfs_inode_buf.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_inode_buf.h
xfs_inode_fork.c xfs: merge xfs_inum.h into xfs_format.h 2014-11-28 14:27:10 +11:00
xfs_inode_fork.h
xfs_log_format.h xfs: merge xfs_dinode.h into xfs_format.h 2014-11-28 14:24:06 +11:00
xfs_log_recover.h
xfs_log_rlimit.c xfs: move most of xfs_sb.h to xfs_format.h 2014-11-28 14:27:09 +11:00
xfs_quota_defs.h
xfs_rtbitmap.c xfs: move most of xfs_sb.h to xfs_format.h 2014-11-28 14:27:09 +11:00
xfs_sb.c xfs: relocate sparse inode mount warning 2015-08-19 10:32:14 +10:00
xfs_sb.h xfs: consolidate superblock logging functions 2015-01-22 09:10:31 +11:00
xfs_shared.h xfs: saner xfs_trans_commit interface 2015-06-04 13:48:08 +10:00
xfs_symlink_remote.c xfs: create new metadata UUID field and incompat flag 2015-07-29 11:53:31 +10:00
xfs_trans_resv.c xfs: consolidate superblock logging functions 2015-01-22 09:10:31 +11:00
xfs_trans_resv.h xfs: clean up XFS_MIN_FREELIST macros 2015-06-22 10:13:30 +10:00
xfs_trans_space.h xfs: clean up XFS_MIN_FREELIST macros 2015-06-22 10:13:30 +10:00
xfs_types.h xfs: move xfs_types.h to libxfs 2015-01-09 10:46:31 +11:00