From: Darrick J. Wong <djwong@xxxxxxxxxx> Update userspace utilities not to allow integer overflows of inode link counts to result in a file that is referenced by parent directories but has zero link count. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- libxfs/util.c | 3 ++- repair/incore_ino.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libxfs/util.c b/libxfs/util.c index dc54e3ee66db..74eea0fcbe07 100644 --- a/libxfs/util.c +++ b/libxfs/util.c @@ -252,7 +252,8 @@ libxfs_bumplink( xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); - inc_nlink(inode); + if (inode->i_nlink != XFS_NLINK_PINNED) + inc_nlink(inode); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); } diff --git a/repair/incore_ino.c b/repair/incore_ino.c index 0dd7a2f060fb..b0b41a2cc5c5 100644 --- a/repair/incore_ino.c +++ b/repair/incore_ino.c @@ -108,7 +108,8 @@ void add_inode_ref(struct ino_tree_node *irec, int ino_offset) nlink_grow_16_to_32(irec); /*FALLTHRU*/ case sizeof(uint32_t): - irec->ino_un.ex_data->counted_nlinks.un32[ino_offset]++; + if (irec->ino_un.ex_data->counted_nlinks.un32[ino_offset] != XFS_NLINK_PINNED) + irec->ino_un.ex_data->counted_nlinks.un32[ino_offset]++; break; default: ASSERT(0);