From: Cheng Lin <cheng.lin130@xxxxxxxxxx>
Avoid inode nlink overflow or underflow.
Signed-off-by: Cheng Lin <cheng.lin130@xxxxxxxxxx>
---
fs/inode.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/fs/inode.c b/fs/inode.c
index 67611a360..8e6d62dc4 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -328,6 +328,9 @@ static void destroy_inode(struct inode *inode)
void drop_nlink(struct inode *inode)
{
WARN_ON(inode->i_nlink == 0);
+ if (unlikely(inode->i_nlink == 0))
+ return;
+
inode->__i_nlink--;
if (!inode->i_nlink)
atomic_long_inc(&inode->i_sb->s_remove_count);
@@ -388,6 +391,9 @@ void inc_nlink(struct inode *inode)
atomic_long_dec(&inode->i_sb->s_remove_count);
}
+ if (unlikely(inode->i_nlink == ~0U))
+ return;
+
inode->__i_nlink++;
}
EXPORT_SYMBOL(inc_nlink);
--
2.18.1