shmem.c (1170532bb49f9468aedabdc1d5a560e2521a2bcc) shmem.c (2cf938aae17203426a89b5955bd1c9668657bfa8)
1/*
2 * Resizable virtual memory filesystem for Linux.
3 *
4 * Copyright (C) 2000 Linus Torvalds.
5 * 2000 Transmeta Corp.
6 * 2000-2001 Christoph Rohland
7 * 2000-2001 SAP AG
8 * 2002 Red Hat Inc.

--- 369 unchanged lines hidden (view full) ---

378
379restart:
380 radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
381 if (iter.index >= end)
382 break;
383
384 page = radix_tree_deref_slot(slot);
385
1/*
2 * Resizable virtual memory filesystem for Linux.
3 *
4 * Copyright (C) 2000 Linus Torvalds.
5 * 2000 Transmeta Corp.
6 * 2000-2001 Christoph Rohland
7 * 2000-2001 SAP AG
8 * 2002 Red Hat Inc.

--- 369 unchanged lines hidden (view full) ---

378
379restart:
380 radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
381 if (iter.index >= end)
382 break;
383
384 page = radix_tree_deref_slot(slot);
385
386 /*
387 * This should only be possible to happen at index 0, so we
388 * don't need to reset the counter, nor do we risk infinite
389 * restarts.
390 */
391 if (radix_tree_deref_retry(page))
392 goto restart;
386 if (radix_tree_deref_retry(page)) {
387 slot = radix_tree_iter_retry(&iter);
388 continue;
389 }
393
394 if (radix_tree_exceptional_entry(page))
395 swapped++;
396
397 if (need_resched()) {
398 cond_resched_rcu();
399 start = iter.index + 1;
400 goto restart;

--- 1545 unchanged lines hidden (view full) ---

1946 lru_add_drain();
1947 start = 0;
1948 rcu_read_lock();
1949
1950restart:
1951 radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
1952 page = radix_tree_deref_slot(slot);
1953 if (!page || radix_tree_exception(page)) {
390
391 if (radix_tree_exceptional_entry(page))
392 swapped++;
393
394 if (need_resched()) {
395 cond_resched_rcu();
396 start = iter.index + 1;
397 goto restart;

--- 1545 unchanged lines hidden (view full) ---

1943 lru_add_drain();
1944 start = 0;
1945 rcu_read_lock();
1946
1947restart:
1948 radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
1949 page = radix_tree_deref_slot(slot);
1950 if (!page || radix_tree_exception(page)) {
1954 if (radix_tree_deref_retry(page))
1955 goto restart;
1951 if (radix_tree_deref_retry(page)) {
1952 slot = radix_tree_iter_retry(&iter);
1953 continue;
1954 }
1956 } else if (page_count(page) - page_mapcount(page) > 1) {
1957 spin_lock_irq(&mapping->tree_lock);
1958 radix_tree_tag_set(&mapping->page_tree, iter.index,
1959 SHMEM_TAG_PINNED);
1960 spin_unlock_irq(&mapping->tree_lock);
1961 }
1962
1963 if (need_resched()) {

--- 37 unchanged lines hidden (view full) ---

2001 start = 0;
2002 rcu_read_lock();
2003restart:
2004 radix_tree_for_each_tagged(slot, &mapping->page_tree, &iter,
2005 start, SHMEM_TAG_PINNED) {
2006
2007 page = radix_tree_deref_slot(slot);
2008 if (radix_tree_exception(page)) {
1955 } else if (page_count(page) - page_mapcount(page) > 1) {
1956 spin_lock_irq(&mapping->tree_lock);
1957 radix_tree_tag_set(&mapping->page_tree, iter.index,
1958 SHMEM_TAG_PINNED);
1959 spin_unlock_irq(&mapping->tree_lock);
1960 }
1961
1962 if (need_resched()) {

--- 37 unchanged lines hidden (view full) ---

2000 start = 0;
2001 rcu_read_lock();
2002restart:
2003 radix_tree_for_each_tagged(slot, &mapping->page_tree, &iter,
2004 start, SHMEM_TAG_PINNED) {
2005
2006 page = radix_tree_deref_slot(slot);
2007 if (radix_tree_exception(page)) {
2009 if (radix_tree_deref_retry(page))
2010 goto restart;
2008 if (radix_tree_deref_retry(page)) {
2009 slot = radix_tree_iter_retry(&iter);
2010 continue;
2011 }
2011
2012 page = NULL;
2013 }
2014
2015 if (page &&
2016 page_count(page) - page_mapcount(page) != 1) {
2017 if (scan < LAST_SCAN)
2018 goto continue_resched;

--- 1498 unchanged lines hidden ---
2012
2013 page = NULL;
2014 }
2015
2016 if (page &&
2017 page_count(page) - page_mapcount(page) != 1) {
2018 if (scan < LAST_SCAN)
2019 goto continue_resched;

--- 1498 unchanged lines hidden ---