lkml.org 
[lkml]   [2011]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Regression from 2.6.36
    On Wed, 13 Apr 2011 14:16:00 -0700
    Andrew Morton <akpm@linux-foundation.org> wrote:

    > fs/file.c | 17 ++++++++++-------
    > 1 file changed, 10 insertions(+), 7 deletions(-)

    bah, stupid compiler.


    --- a/fs/file.c~vfs-avoid-large-kmallocs-for-the-fdtable
    +++ a/fs/file.c
    @@ -9,6 +9,7 @@
    #include <linux/module.h>
    #include <linux/fs.h>
    #include <linux/mm.h>
    +#include <linux/mmzone.h>
    #include <linux/time.h>
    #include <linux/sched.h>
    #include <linux/slab.h>
    @@ -39,14 +40,17 @@ int sysctl_nr_open_max = 1024 * 1024; /*
    */
    static DEFINE_PER_CPU(struct fdtable_defer, fdtable_defer_list);

    -static inline void *alloc_fdmem(unsigned int size)
    +static void *alloc_fdmem(unsigned int size)
    {
    - void *data;
    -
    - data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN);
    - if (data != NULL)
    - return data;
    -
    + /*
    + * Very large allocations can stress page reclaim, so fall back to
    + * vmalloc() if the allocation size will be considered "large" by the VM.
    + */
    + if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {
    + void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN);
    + if (data != NULL)
    + return data;
    + }
    return vmalloc(size);
    }

    _


    \
     
     \ /
      Last update: 2011-04-13 23:27    [W:4.641 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site