diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /fs/file_table.c | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'fs/file_table.c')
| -rw-r--r-- | fs/file_table.c | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/fs/file_table.c b/fs/file_table.c index 7f9d407c7595..ad17e05ebf95 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -25,6 +25,7 @@  #include <linux/hardirq.h>  #include <linux/task_work.h>  #include <linux/ima.h> +#include <linux/swap.h>  #include <linux/atomic.h> @@ -308,19 +309,24 @@ void put_filp(struct file *file)  	}  } -void __init files_init(unsigned long mempages) +void __init files_init(void)  {  -	unsigned long n; -  	filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,  			SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL); +	percpu_counter_init(&nr_files, 0, GFP_KERNEL); +} -	/* -	 * One file with associated inode and dcache is very roughly 1K. -	 * Per default don't use more than 10% of our memory for files.  -	 */  +/* + * One file with associated inode and dcache is very roughly 1K. Per default + * do not use more than 10% of our memory for files. + */ +void __init files_maxfiles_init(void) +{ +	unsigned long n; +	unsigned long memreserve = (totalram_pages - nr_free_pages()) * 3/2; + +	memreserve = min(memreserve, totalram_pages - 1); +	n = ((totalram_pages - memreserve) * (PAGE_SIZE / 1024)) / 10; -	n = (mempages * (PAGE_SIZE / 1024)) / 10;  	files_stat.max_files = max_t(unsigned long, n, NR_FILE); -	percpu_counter_init(&nr_files, 0, GFP_KERNEL);  }   |