I was going thru the code of shrink_caches(). it returns the difference between the number of pages requested to be freed and the number of pages that were actually freed. What i see over here is that the nr_pages which is the return value, is decremented only when the pages are freed from slab cache and page cache. The value is not decremented when the pages get freed from dentry cache, inode cache or the quota cache, which are freed at high memory pressure times. So when no pages get freed from page cache, but get freed from dentry/inode caches we will be returning a value which says that no pages were freed. Why is this done? can you PLEASE explain me this 559 static int FASTCALL(shrink_caches(zone_t * classzone, int priority, unsigned int gfp_mask, int nr_pages)); 560 static int shrink_caches(zone_t* classzone, int priority, unsigned int gfp_mask, int nr_pages) 561 { 562 int chunk_size = nr_pages; 563 unsigned long ratio; 564 565 nr_pages -= kmem_cache_reap(gfp_mask); 566 if (nr_pages <= 0) 567 return 0; 568 569 nr_pages = chunk_size; 570 /* try to keep the active list 2/3 of the size of the cache */ 571 ratio = (unsigned long) nr_pages * nr_active_pages /((nr_inactive_pages + 1) * 2); 572 refill_inactive(ratio); 573 574 nr_pages = shrink_cache(nr_pages, classzone, gfp_mask, priority); 575 if(nr_pages <= 0) 576 return 0; 577 578 shrink_dcache_memory(priority, gfp_mask); 579 shrink_icache_memory(priority, gfp_mask); 580 #ifdef CONFIG_QUOTA 581 shrink_dqcache_memory(DEF_PRIORITY, gfp_mask); 582 #endif 583 584 return nr_pages; 585 } thanks , Raghu -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/