Messages in this thread Patch in this message | | | Subject | Re: [PATCH 2.6.6rc1-mm1] NFS sysctlized - readahead tunable | From | FabianF <> | Date | Tue, 20 Apr 2004 08:12:11 +0200 |
| |
On Tue, 2004-04-20 at 02:01, Trond Myklebust wrote: > On Mon, 2004-04-19 at 17:29, Fabian Frederick wrote: > > But hey ! "I'm an absolute beginner" :) Maybe you and Andrew can tell me > > what to do with this ugly patch ;) e.g. no sysctl.h -> include stuff in > > inode.c ... > > Yes. This 'superbeast in time' patch against same patchset: -Type fixes -All in inode.c
Regards, Fabian > diff -Naur orig/fs/nfs/inode.c edited/fs/nfs/inode.c --- orig/fs/nfs/inode.c 2004-04-19 20:27:30.000000000 +0200 +++ edited/fs/nfs/inode.c 2004-04-20 08:05:48.000000000 +0200 @@ -11,6 +11,10 @@ * Change to nfs_read_super() to permit NFS mounts to multi-homed hosts. * J.S.Peatfield@damtp.cam.ac.uk * + * April 2004 : Fabian Frederick + * -Add sysctl + * -maxreadahead to sysctl + * */ #include <linux/config.h> @@ -42,13 +46,52 @@ #define NFSDBG_FACILITY NFSDBG_VFS #define NFS_PARANOIA 1 -/* Maximum number of readahead requests - * FIXME: this should really be a sysctl so that users may tune it to suit - * their needs. People that do NFS over a slow network, might for - * instance want to reduce it to something closer to 1 for improved - * interactive response. - */ -#define NFS_MAX_READAHEAD (RPC_DEF_SLOT_TABLE - 1) +#include <linux/sysctl.h> + +static unsigned int nfs_maxreadahead = RPC_DEF_SLOT_TABLE-1; + +static const unsigned int nfs_maxreadahead_min = 0; +static const unsigned int nfs_maxreadahead_max = 256; + +#ifdef CONFIG_SYSCTL +static struct ctl_table_header *nfs_sysctl_table; + +#define CTL_UNNUMBERED -2 + +static ctl_table nfs_sysctls[] = { + { + .ctl_name = CTL_UNNUMBERED, + .procname = "nfs_maxreadahead", + .data = &nfs_maxreadahead, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .extra1 = (unsigned int *) &nfs_maxreadahead_min, + .extra2 = (unsigned int *) &nfs_maxreadahead_max, + } +}; + +static ctl_table nfs_sysctl_dir[] = { + { + .ctl_name = CTL_UNNUMBERED, + .procname = "nfs", + .mode = 0555, + .child = nfs_sysctls, + }, + { .ctl_name = 0 } +}; + +static ctl_table nfs_sysctl_root[] = { + { + .ctl_name = CTL_FS, + .procname = "fs", + .mode = 0555, + .child = nfs_sysctl_dir, + }, + { .ctl_name = 0 } +}; + +#endif static void nfs_invalidate_inode(struct inode *); static int nfs_update_inode(struct inode *, struct nfs_fattr *, unsigned long); @@ -326,7 +369,7 @@ server->acdirmin = server->acdirmax = 0; sb->s_flags |= MS_SYNCHRONOUS; } - server->backing_dev_info.ra_pages = server->rpages * NFS_MAX_READAHEAD; + server->backing_dev_info.ra_pages = server->rpages * nfs_maxreadahead; sb->s_maxbytes = fsinfo.maxfilesize; if (sb->s_maxbytes > MAX_LFS_FILESIZE) @@ -1814,6 +1857,11 @@ #ifdef CONFIG_PROC_FS rpc_proc_register(&nfs_rpcstat); #endif +#ifdef CONFIG_SYSCTL + nfs_sysctl_table = register_sysctl_table(nfs_sysctl_root, 0); + if(!nfs_sysctl_table) + return -ENOMEM; +#endif err = register_filesystem(&nfs_fs_type); if (err) goto out; @@ -1844,6 +1892,9 @@ #endif unregister_filesystem(&nfs_fs_type); unregister_nfs4fs(); +#ifdef CONFIG_SYSCTL + unregister_sysctl_table(nfs_sysctl_table); +#endif } /* Not quite true; I just maintain it */ | |