From 2be8b5cee9e9a73add9195901c0f680755de0022 Mon Sep 17 00:00:00 2001
From: yangsheng <yangsheng>
Date: Fri, 31 Oct 2008 07:59:50 +0000
Subject: [PATCH] Branch HEAD b=17379 i=Brian(LLNL), johann

Set recursive symlink depth to 5 when kernel has 4K stack.
---
 lustre/llite/symlink.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/lustre/llite/symlink.c b/lustre/llite/symlink.c
index 5b2fe077ec..918e2e9b5b 100644
--- a/lustre/llite/symlink.c
+++ b/lustre/llite/symlink.c
@@ -165,10 +165,22 @@ static LL_FOLLOW_LINK_RETURN_TYPE ll_follow_link(struct dentry *dentry,
 #endif
 
         CDEBUG(D_VFSTRACE, "VFS Op\n");
+#if THREAD_SIZE < 8192
+        /* 
+         *  We set the limits recursive symlink to 5 
+         *  instead of default 8 when kernel has 4k stack
+         *  to prevent stack overflow.
+         */
+        if (current->link_count >= 5) {
+                rc = -ELOOP;
+                GOTO(out_release, rc);
+        }
+#endif
         down(&lli->lli_size_sem);
         rc = ll_readlink_internal(inode, &request, &symname);
         up(&lli->lli_size_sem);
         if (rc) {
+out_release:
                 path_release(nd); /* Kernel assumes that ->follow_link()
                                      releases nameidata on error */
                 GOTO(out, rc);
-- 
GitLab