|
@@ -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)) {
|