Re: [RFC][-mm PATCH 6/8] Memory controller add per container LRU and reclaim (v3)

2007-07-24 Thread Balbir Singh
YAMAMOTO Takashi wrote:
> hi,
> 
>> +unsigned long mem_container_isolate_pages(unsigned long nr_to_scan,
>> +struct list_head *dst,
>> +unsigned long *scanned, int order,
>> +int mode, struct zone *z,
>> +struct mem_container *mem_cont,
>> +int active)
>> +{
>> +unsigned long nr_taken = 0;
>> +struct page *page;
>> +unsigned long scan;
>> +LIST_HEAD(mp_list);
>> +struct list_head *src;
>> +struct meta_page *mp;
>> +
>> +if (active)
>> +src = _cont->active_list;
>> +else
>> +src = _cont->inactive_list;
>> +
>> +for (scan = 0; scan < nr_to_scan && !list_empty(src); scan++) {
>> +mp = list_entry(src->prev, struct meta_page, lru);
>> +page = mp->page;
>> +
> 
> - is it safe to pick the lists without mem_cont->lru_lock held?
> 
> - what prevents mem_container_uncharge from freeing this meta_page
>  behind us?
> 
> YAMAMOTO Takashi

Hi, YAMAMOTO,

We do take the lru_lock before deleting the page from the list
and in mem_container_move_lists(). But, I guess like you point
out page = mp->page might not be a safe operation. I'll fix
the problem in the next release.

Thanks for the review,
-- 
Balbir Singh
Linux Technology Center
IBM, ISTL
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC][-mm PATCH 6/8] Memory controller add per container LRU and reclaim (v3)

2007-07-24 Thread YAMAMOTO Takashi
hi,

> +unsigned long mem_container_isolate_pages(unsigned long nr_to_scan,
> + struct list_head *dst,
> + unsigned long *scanned, int order,
> + int mode, struct zone *z,
> + struct mem_container *mem_cont,
> + int active)
> +{
> + unsigned long nr_taken = 0;
> + struct page *page;
> + unsigned long scan;
> + LIST_HEAD(mp_list);
> + struct list_head *src;
> + struct meta_page *mp;
> +
> + if (active)
> + src = _cont->active_list;
> + else
> + src = _cont->inactive_list;
> +
> + for (scan = 0; scan < nr_to_scan && !list_empty(src); scan++) {
> + mp = list_entry(src->prev, struct meta_page, lru);
> + page = mp->page;
> +

- is it safe to pick the lists without mem_cont->lru_lock held?

- what prevents mem_container_uncharge from freeing this meta_page
 behind us?

YAMAMOTO Takashi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC][-mm PATCH 6/8] Memory controller add per container LRU and reclaim (v3)

2007-07-24 Thread YAMAMOTO Takashi
hi,

 +unsigned long mem_container_isolate_pages(unsigned long nr_to_scan,
 + struct list_head *dst,
 + unsigned long *scanned, int order,
 + int mode, struct zone *z,
 + struct mem_container *mem_cont,
 + int active)
 +{
 + unsigned long nr_taken = 0;
 + struct page *page;
 + unsigned long scan;
 + LIST_HEAD(mp_list);
 + struct list_head *src;
 + struct meta_page *mp;
 +
 + if (active)
 + src = mem_cont-active_list;
 + else
 + src = mem_cont-inactive_list;
 +
 + for (scan = 0; scan  nr_to_scan  !list_empty(src); scan++) {
 + mp = list_entry(src-prev, struct meta_page, lru);
 + page = mp-page;
 +

- is it safe to pick the lists without mem_cont-lru_lock held?

- what prevents mem_container_uncharge from freeing this meta_page
 behind us?

YAMAMOTO Takashi
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC][-mm PATCH 6/8] Memory controller add per container LRU and reclaim (v3)

2007-07-24 Thread Balbir Singh
YAMAMOTO Takashi wrote:
 hi,
 
 +unsigned long mem_container_isolate_pages(unsigned long nr_to_scan,
 +struct list_head *dst,
 +unsigned long *scanned, int order,
 +int mode, struct zone *z,
 +struct mem_container *mem_cont,
 +int active)
 +{
 +unsigned long nr_taken = 0;
 +struct page *page;
 +unsigned long scan;
 +LIST_HEAD(mp_list);
 +struct list_head *src;
 +struct meta_page *mp;
 +
 +if (active)
 +src = mem_cont-active_list;
 +else
 +src = mem_cont-inactive_list;
 +
 +for (scan = 0; scan  nr_to_scan  !list_empty(src); scan++) {
 +mp = list_entry(src-prev, struct meta_page, lru);
 +page = mp-page;
 +
 
 - is it safe to pick the lists without mem_cont-lru_lock held?
 
 - what prevents mem_container_uncharge from freeing this meta_page
  behind us?
 
 YAMAMOTO Takashi

Hi, YAMAMOTO,

We do take the lru_lock before deleting the page from the list
and in mem_container_move_lists(). But, I guess like you point
out page = mp-page might not be a safe operation. I'll fix
the problem in the next release.

Thanks for the review,
-- 
Balbir Singh
Linux Technology Center
IBM, ISTL
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/