]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Automatic file-max sizing
authorAndi Kleen <ak@muc.de>
Wed, 6 Feb 2002 14:13:41 +0000 (06:13 -0800)
committerLinus Torvalds <torvalds@athlon.transmeta.com>
Wed, 6 Feb 2002 14:13:41 +0000 (06:13 -0800)
The default for NR_FILES of 8192 is far too low for many workloads. This
patch does dynamic sizing for it instead. It assumes file+inode+dentry
are roughly 1K and will use upto 10% of the memory for it.

Also removes two obsolete prototypes.

fs/dcache.c
fs/file_table.c
include/linux/fs.h

index 7246506fff3705375ff4eed0cea0db988f9dc6d5..a421788191fbbbd18a885f848c83c06f8f25001c 100644 (file)
@@ -1283,6 +1283,7 @@ void __init vfs_caches_init(unsigned long mempages)
 
        dcache_init(mempages);
        inode_init(mempages);
+       files_init(mempages); 
        mnt_init(mempages);
        bdev_cache_init();
        cdev_cache_init();
index 27713eb016fc6c112279c7bf34b58ef0cb563ad2..e7248739e3d40ea7bc307cbd8aa2a52f75183604 100644 (file)
@@ -186,3 +186,17 @@ too_bad:
        file_list_unlock();
        return 0;
 }
+
+void __init files_init(unsigned long mempages)
+{ 
+       int n; 
+       /* One file with associated inode and dcache is very roughly 1K. 
+        * Per default don't use more than 10% of our memory for files. 
+        */ 
+
+       n = (mempages * (PAGE_SIZE / 1024)) / 10;
+       files_stat.max_files = n; 
+       if (files_stat.max_files < NR_FILE)
+               files_stat.max_files = NR_FILE;
+} 
+
index f4699a15157d42b9c4f36a9ed263ead0445853c5..95b6286bbe58dd730284e96f954386c1301f8814 100644 (file)
@@ -208,6 +208,7 @@ extern void update_atime (struct inode *);
 extern void buffer_init(unsigned long);
 extern void inode_init(unsigned long);
 extern void mnt_init(unsigned long);
+extern void files_init(unsigned long);
 
 /* bh state bits */
 enum bh_state_bits {
@@ -1492,8 +1493,6 @@ static inline int is_mounted(kdev_t dev)
        }
        return 0;
 }
-unsigned long generate_cluster(kdev_t, int b[], int);
-unsigned long generate_cluster_swab32(kdev_t, int b[], int);
 extern kdev_t ROOT_DEV;
 extern char root_device_name[];