Thread (10 messages) 10 messages, 3 authors, 2008-02-29

Re: [PATCH 00/28] Swap over NFS -v16

From: Peter Zijlstra <hidden>
Date: 2008-02-27 08:34:31
Also in: linux-mm, lkml

Possibly related (same subject, not in this thread)

On Wed, 2008-02-27 at 09:14 +0100, Peter Zijlstra wrote:
On Wed, 2008-02-27 at 10:05 +0200, Pekka Enberg wrote:
quoted
Hi Peter,

On Wed, Feb 27, 2008 at 9:58 AM, Peter Zijlstra [off-list ref] wrote:
quoted
 > 1/ I note there is no way to tell if memory returned by kmalloc is
 >   from the emergency reserve - which contrasts with alloc_page
 >   which does make that information available through page->reserve.
 >   This seems a slightly unfortunate aspect of the interface.

 Yes, but alas there is no room to store such information in kmalloc().
 That is, in a sane way. I think it was Daniel Phillips who suggested
 encoding it in the return pointer by flipping the low bit - but that is
 just too ugly and breaks all current kmalloc sites to boot.
Why can't you add a kmem_is_emergency() to SLUB that looks up the
cache/slab/page (whatever is the smallest unit of the emergency pool
here) for the object and use that?
There is an idea.. :-) It would mean preserving page->reserved, but SLUB
has plenty of page flags to pick from. Or maybe I should move the thing
to a page flag anyway. If we do that SLAB would allow something similar,
just look up the page for whatever address you get and look at PG_emerg
or something.

Having this would clean things up. I'll go work on this.
Humm, and here I sit staring at the screen. Perhaps I should go get my
morning juice, but...

  if (mem_reserve_kmalloc_charge(my_res, sizeof(*foo), 0)) {
    foo = kmalloc(sizeof(*foo), gfp|__GFP_MEMALLOC)
    if (!kmem_is_emergency(foo))
      mem_reserve_kmalloc_charge(my_res, -sizeof(*foo), 0)
  } else
    foo = kmalloc(sizeof(*foo), gfp);

Just doesn't look too pretty..

And needing to always account the allocation seems wrong.. but I'll take
poison and see if that wakes up my mind.


Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help