From eb0e9745b807ac98d829f70265bb0516313fe86e Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Sat, 31 May 2014 10:12:28 -0500 Subject: [PATCH] inode_fixup.c: Fix check for directory hard links We shouldn't assume that the attributes are consistent, so we should check both ways for directory hard links. Specifically, in the case where the being-inserted dentry is not marked as a directory but for some reason it shares an inode number with a dentry marked as a directory, we want to detect that as a directory hard link. --- src/inode_fixup.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/inode_fixup.c b/src/inode_fixup.c index 88a6b8e3..115779a4 100644 --- a/src/inode_fixup.c +++ b/src/inode_fixup.c @@ -85,7 +85,9 @@ inode_table_insert(struct wim_dentry *dentry, void *_params) params->num_inconsistent_inodes++; continue; } - if (unlikely(d_inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY)) { + if (unlikely((d_inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY) || + (inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY))) + { params->num_dir_hard_links++; if (params->num_dir_hard_links <= MAX_DIR_HARD_LINK_WARNINGS) -- 2.43.0