patch: new sysctl to remove hardcoded ELOOP limit

Peeter Joot (peeter@joot.com)
Thu, 9 Apr 1998 01:46:27 -0400 (EDT)


Hi,

Currently 5 symlinks will be followed before ELOOP is returned. Today
I had a need for this to be 6 on my system. Rather than just hacking the
value and recompiling it I thought it made more sense to have a sysctl so
this is adjustable.

I am appending a small patch against 2.1.94 for this. I have tested this
on 2.1.82, and merged the changes into 2.1.94 for the patch. It hasn't
actually been tested on 2.1.94, but I can't imagine there are any problems --
it is a very simple modification.

Peeter

--
Peeter Joot
http://www.accessv.com/~peeter  peeter@accessv.com, Peeter_Joot@ca.ibm.com

diff --recursive -u linux.94/Documentation/sysctl/kernel.txt linux/Documentation/sysctl/kernel.txt --- linux.94/Documentation/sysctl/kernel.txt Thu Mar 19 18:04:30 1998 +++ linux/Documentation/sysctl/kernel.txt Thu Apr 9 01:30:02 1998 @@ -34,6 +34,7 @@ - real-root-dev ==> Documentation/initrd.txt - reboot-cmd ==> SPARC specific - securelevel +- symlinks-max - version ============================================================== @@ -209,4 +210,11 @@ ??? This seems to be a way to give an argument to the Sparc ROM/Flash boot loader. Maybe to tell it what to do after rebooting. ??? + +============================================================== + +symlinks-max: + +Control how many symbolic links will be followed before ELOOP +is returned. The default is 5. diff --recursive -u linux.94/fs/namei.c linux/fs/namei.c --- linux.94/fs/namei.c Mon Jan 12 18:03:28 1998 +++ linux/fs/namei.c Thu Apr 9 01:25:20 1998 @@ -80,6 +80,7 @@ static char * quicklist = NULL; static int quickcount = 0; struct semaphore quicklock = MUTEX; +int max_symlinks = 5; /* Tuning: increase locality by reusing same pages again... * if quicklist becomes too long on low memory machines, either a limit @@ -303,7 +304,7 @@ struct inode * inode = dentry->d_inode; if (inode && inode->i_op && inode->i_op->follow_link) { - if (current->link_count < 5) { + if (current->link_count < max_symlinks) { struct dentry * result; current->link_count++; diff --recursive -u linux.94/include/linux/fs.h linux/include/linux/fs.h --- linux.94/include/linux/fs.h Wed Apr 8 21:15:10 1998 +++ linux/include/linux/fs.h Thu Apr 9 01:25:20 1998 @@ -43,6 +43,7 @@ /* And dynamically-tunable limits and defaults: */ extern int max_inodes; +extern int max_symlinks; extern int max_files, nr_files, nr_free_files; #define NR_INODE 4096 /* This should no longer be bigger than NR_FILE */ #define NR_FILE 4096 /* this can well be larger on a larger system */ diff --recursive -u linux.94/include/linux/sysctl.h linux/include/linux/sysctl.h --- linux.94/include/linux/sysctl.h Wed Apr 1 19:19:57 1998 +++ linux/include/linux/sysctl.h Thu Apr 9 01:27:35 1998 @@ -72,7 +72,8 @@ KERN_STATINODE, KERN_DENTRY, /* dentry statistics */ KERN_MODPROBE, - KERN_KMOD_UNLOAD_DELAY + KERN_KMOD_UNLOAD_DELAY, + KERN_MAXSYMLINKS /* max levels of symbolic links */ }; diff --recursive -u linux.94/kernel/sysctl.c linux/kernel/sysctl.c --- linux.94/kernel/sysctl.c Wed Apr 1 19:26:35 1998 +++ linux/kernel/sysctl.c Thu Apr 9 01:26:44 1998 @@ -187,6 +187,8 @@ {KERN_NRFILE, "sg-big-buff", &sg_big_buff, sizeof (int), 0444, NULL, &proc_dointvec}, #endif + {KERN_MAXSYMLINKS, "symlinks-max", &max_symlinks, sizeof(int), + 0644, NULL, &proc_dointvec}, {0} };

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu