lkml.org 
[lkml]   [2012]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 2/3] uprobes: change build_map_info() to try kmalloc(GFP_NOWAIT) first
    From
    Date
    On Mon, 2012-06-04 at 16:53 +0200, Oleg Nesterov wrote:
    > build_map_info() doesn't allocate the memory under i_mmap_mutex
    > to avoid the deadlock with page reclaim. But it can try GFP_NOWAIT
    > first, it should work in the likely case and thus we almost never
    > need the pre-alloc-and-retry path.
    >
    > Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    > ---
    > kernel/events/uprobes.c | 9 +++++++--
    > 1 files changed, 7 insertions(+), 2 deletions(-)
    >
    > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
    > index a1bbcab..c9836ae 100644
    > --- a/kernel/events/uprobes.c
    > +++ b/kernel/events/uprobes.c
    > @@ -772,8 +772,13 @@ build_map_info(struct address_space *mapping, loff_t offset, bool is_register)
    > continue;
    >
    > if (!prev) {
    > - more++;
    > - continue;


    Should we add something like this:

    /*
    * Needs GFP_NOWAIT to avoid i_mmap_mutex recursion through reclaim.
    * This is optimistic, no harm done if it fails.
    */


    > + prev = kmalloc(sizeof(struct map_info),
    > + GFP_NOWAIT | __GFP_NOMEMALLOC | __GFP_NOWARN);
    > + if (!prev) {
    > + more++;
    > + continue;
    > + }
    > + prev->next = NULL;
    > }
    >
    > if (!atomic_inc_not_zero(&vma->vm_mm->mm_users))



    \
     
     \ /
      Last update: 2012-06-04 17:42    [W:0.025 / U:59.552 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site