]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - mm/vmscan.c
fat: Cleanup FAT attribute stuff
[linux-2.6-omap-h63xx.git] / mm / vmscan.c
index ca64e3e0c518965a81bc99516199978e16f6b469..3b5860294bb6654a7b6765a327cef83a9952a29d 100644 (file)
@@ -732,7 +732,14 @@ static unsigned long shrink_page_list(struct list_head *page_list,
                if (!mapping || !__remove_mapping(mapping, page))
                        goto keep_locked;
 
-               unlock_page(page);
+               /*
+                * At this point, we have no other references and there is
+                * no way to pick any more up (removed from LRU, removed
+                * from pagecache). Can use non-atomic bitops now (and
+                * we obviously don't have to worry about waking up a process
+                * waiting on the page lock, because there are no references.
+                */
+               __clear_page_locked(page);
 free_it:
                nr_reclaimed++;
                if (!pagevec_add(&freed_pvec, page)) {
@@ -1413,16 +1420,13 @@ static unsigned long shrink_zone(int priority, struct zone *zone,
                if (scan_global_lru(sc)) {
                        int file = is_file_lru(l);
                        int scan;
-                       /*
-                        * Add one to nr_to_scan just to make sure that the
-                        * kernel will slowly sift through each list.
-                        */
+
                        scan = zone_page_state(zone, NR_LRU_BASE + l);
                        if (priority) {
                                scan >>= priority;
                                scan = (scan * percent[file]) / 100;
                        }
-                       zone->lru[l].nr_scan += scan + 1;
+                       zone->lru[l].nr_scan += scan;
                        nr[l] = zone->lru[l].nr_scan;
                        if (nr[l] >= sc->swap_cluster_max)
                                zone->lru[l].nr_scan = 0;