Nick Piggin wrote on Monday, March 06, 2006 6:05 PM
> 
> My patches in -mm avoid the lru_lock and disabling/enabling interrupts
> if the page is not on lru too, btw.

Can you put the spin lock/unlock inside TestClearPageLRU()?  The
difference is subtle though.

- Ken


--- ./mm/swap.c.orig    2006-03-06 19:25:10.680967542 -0800
+++ ./mm/swap.c 2006-03-06 19:27:02.334286487 -0800
@@ -210,14 +210,16 @@ int lru_add_drain_all(void)
 void fastcall __page_cache_release(struct page *page)
 {
        unsigned long flags;
-       struct zone *zone = page_zone(page);
+       struct zone *zone;
 
-       spin_lock_irqsave(&zone->lru_lock, flags);
-       if (TestClearPageLRU(page))
+       if (TestClearPageLRU(page)) {
+               zone = page_zone(page);
+               spin_lock_irqsave(&zone->lru_lock, flags);
                del_page_from_lru(zone, page);
-       if (page_count(page) != 0)
-               page = NULL;
-       spin_unlock_irqrestore(&zone->lru_lock, flags);
+               if (page_count(page) != 0)
+                       page = NULL;
+               spin_unlock_irqrestore(&zone->lru_lock, flags);
+       }
        if (page)
                free_hot_page(page);
 }

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to