All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@zip.com.au>
To: Daniel Phillips <phillips@arcor.de>
Cc: Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>,
	lkml <linux-kernel@vger.kernel.org>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: Re: MM patches against 2.5.31
Date: Wed, 28 Aug 2002 10:42:47 -0700	[thread overview]
Message-ID: <3D6D0B97.D1A40550@zip.com.au> (raw)
In-Reply-To: E17k6Sy-0002s6-00@starship

Daniel Phillips wrote:
> 
> On Wednesday 28 August 2002 15:14, Christian Ehrhardt wrote:
> > Side note: The BUG in __pagevec_lru_del seems strange. refill_inactive
> > or shrink_cache could have removed the page from the lru before
> > __pagevec_lru_del acquired the lru lock.
> 
> It's suspect all right.  If there's a chain of assumptions that proves
> the page is always on the lru at the point, I haven't seen it yet.

Yeah.  __pagevec_lru_del is only used by invalidate_inode_pages.
A very simple solution is to just delete it.

untested code:

 include/linux/pagevec.h |    7 -------
 mm/filemap.c            |   10 +++++-----
 mm/swap.c               |   28 ----------------------------
 3 files changed, 5 insertions(+), 40 deletions(-)

--- 2.5.32/mm/filemap.c~pagevec_lru_del	Wed Aug 28 09:51:51 2002
+++ 2.5.32-akpm/mm/filemap.c	Wed Aug 28 09:51:51 2002
@@ -116,10 +116,10 @@ void invalidate_inode_pages(struct inode
 	struct list_head *head, *curr;
 	struct page * page;
 	struct address_space *mapping = inode->i_mapping;
-	struct pagevec lru_pvec;
+	struct pagevec pvec;
 
 	head = &mapping->clean_pages;
-	pagevec_init(&lru_pvec);
+	pagevec_init(&pvec);
 	write_lock(&mapping->page_lock);
 	curr = head->next;
 
@@ -143,8 +143,8 @@ void invalidate_inode_pages(struct inode
 
 		__remove_from_page_cache(page);
 		unlock_page(page);
-		if (!pagevec_add(&lru_pvec, page))
-			__pagevec_lru_del(&lru_pvec);
+		if (!pagevec_add(&pvec, page))
+			__pagevec_release(&pvec);
 		continue;
 unlock:
 		unlock_page(page);
@@ -152,7 +152,7 @@ unlock:
 	}
 
 	write_unlock(&mapping->page_lock);
-	pagevec_lru_del(&lru_pvec);
+	pagevec_release(&pvec);
 }
 
 static int do_invalidatepage(struct page *page, unsigned long offset)
--- 2.5.32/include/linux/pagevec.h~pagevec_lru_del	Wed Aug 28 09:51:51 2002
+++ 2.5.32-akpm/include/linux/pagevec.h	Wed Aug 28 09:51:51 2002
@@ -18,7 +18,6 @@ void __pagevec_release(struct pagevec *p
 void __pagevec_release_nonlru(struct pagevec *pvec);
 void __pagevec_free(struct pagevec *pvec);
 void __pagevec_lru_add(struct pagevec *pvec);
-void __pagevec_lru_del(struct pagevec *pvec);
 void lru_add_drain(void);
 void pagevec_deactivate_inactive(struct pagevec *pvec);
 
@@ -69,9 +68,3 @@ static inline void pagevec_lru_add(struc
 	if (pagevec_count(pvec))
 		__pagevec_lru_add(pvec);
 }
-
-static inline void pagevec_lru_del(struct pagevec *pvec)
-{
-	if (pagevec_count(pvec))
-		__pagevec_lru_del(pvec);
-}
--- 2.5.32/mm/swap.c~pagevec_lru_del	Wed Aug 28 09:51:51 2002
+++ 2.5.32-akpm/mm/swap.c	Wed Aug 28 09:51:58 2002
@@ -214,34 +214,6 @@ void __pagevec_lru_add(struct pagevec *p
 }
 
 /*
- * Remove the passed pages from the LRU, then drop the caller's refcount on
- * them.  Reinitialises the caller's pagevec.
- */
-void __pagevec_lru_del(struct pagevec *pvec)
-{
-	int i;
-	struct zone *zone = NULL;
-
-	for (i = 0; i < pagevec_count(pvec); i++) {
-		struct page *page = pvec->pages[i];
-		struct zone *pagezone = page_zone(page);
-
-		if (pagezone != zone) {
-			if (zone)
-				spin_unlock_irq(&zone->lru_lock);
-			zone = pagezone;
-			spin_lock_irq(&zone->lru_lock);
-		}
-		if (!TestClearPageLRU(page))
-			BUG();
-		del_page_from_lru(zone, page);
-	}
-	if (zone)
-		spin_unlock_irq(&zone->lru_lock);
-	pagevec_release(pvec);
-}
-
-/*
  * Perform any setup for the swap system
  */
 void __init swap_setup(void)

.

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@zip.com.au>
To: Daniel Phillips <phillips@arcor.de>
Cc: Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>,
	lkml <linux-kernel@vger.kernel.org>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: Re: MM patches against 2.5.31
Date: Wed, 28 Aug 2002 10:42:47 -0700	[thread overview]
Message-ID: <3D6D0B97.D1A40550@zip.com.au> (raw)
In-Reply-To: E17k6Sy-0002s6-00@starship

Daniel Phillips wrote:
> 
> On Wednesday 28 August 2002 15:14, Christian Ehrhardt wrote:
> > Side note: The BUG in __pagevec_lru_del seems strange. refill_inactive
> > or shrink_cache could have removed the page from the lru before
> > __pagevec_lru_del acquired the lru lock.
> 
> It's suspect all right.  If there's a chain of assumptions that proves
> the page is always on the lru at the point, I haven't seen it yet.

Yeah.  __pagevec_lru_del is only used by invalidate_inode_pages.
A very simple solution is to just delete it.

untested code:

 include/linux/pagevec.h |    7 -------
 mm/filemap.c            |   10 +++++-----
 mm/swap.c               |   28 ----------------------------
 3 files changed, 5 insertions(+), 40 deletions(-)

--- 2.5.32/mm/filemap.c~pagevec_lru_del	Wed Aug 28 09:51:51 2002
+++ 2.5.32-akpm/mm/filemap.c	Wed Aug 28 09:51:51 2002
@@ -116,10 +116,10 @@ void invalidate_inode_pages(struct inode
 	struct list_head *head, *curr;
 	struct page * page;
 	struct address_space *mapping = inode->i_mapping;
-	struct pagevec lru_pvec;
+	struct pagevec pvec;
 
 	head = &mapping->clean_pages;
-	pagevec_init(&lru_pvec);
+	pagevec_init(&pvec);
 	write_lock(&mapping->page_lock);
 	curr = head->next;
 
@@ -143,8 +143,8 @@ void invalidate_inode_pages(struct inode
 
 		__remove_from_page_cache(page);
 		unlock_page(page);
-		if (!pagevec_add(&lru_pvec, page))
-			__pagevec_lru_del(&lru_pvec);
+		if (!pagevec_add(&pvec, page))
+			__pagevec_release(&pvec);
 		continue;
 unlock:
 		unlock_page(page);
@@ -152,7 +152,7 @@ unlock:
 	}
 
 	write_unlock(&mapping->page_lock);
-	pagevec_lru_del(&lru_pvec);
+	pagevec_release(&pvec);
 }
 
 static int do_invalidatepage(struct page *page, unsigned long offset)
--- 2.5.32/include/linux/pagevec.h~pagevec_lru_del	Wed Aug 28 09:51:51 2002
+++ 2.5.32-akpm/include/linux/pagevec.h	Wed Aug 28 09:51:51 2002
@@ -18,7 +18,6 @@ void __pagevec_release(struct pagevec *p
 void __pagevec_release_nonlru(struct pagevec *pvec);
 void __pagevec_free(struct pagevec *pvec);
 void __pagevec_lru_add(struct pagevec *pvec);
-void __pagevec_lru_del(struct pagevec *pvec);
 void lru_add_drain(void);
 void pagevec_deactivate_inactive(struct pagevec *pvec);
 
@@ -69,9 +68,3 @@ static inline void pagevec_lru_add(struc
 	if (pagevec_count(pvec))
 		__pagevec_lru_add(pvec);
 }
-
-static inline void pagevec_lru_del(struct pagevec *pvec)
-{
-	if (pagevec_count(pvec))
-		__pagevec_lru_del(pvec);
-}
--- 2.5.32/mm/swap.c~pagevec_lru_del	Wed Aug 28 09:51:51 2002
+++ 2.5.32-akpm/mm/swap.c	Wed Aug 28 09:51:58 2002
@@ -214,34 +214,6 @@ void __pagevec_lru_add(struct pagevec *p
 }
 
 /*
- * Remove the passed pages from the LRU, then drop the caller's refcount on
- * them.  Reinitialises the caller's pagevec.
- */
-void __pagevec_lru_del(struct pagevec *pvec)
-{
-	int i;
-	struct zone *zone = NULL;
-
-	for (i = 0; i < pagevec_count(pvec); i++) {
-		struct page *page = pvec->pages[i];
-		struct zone *pagezone = page_zone(page);
-
-		if (pagezone != zone) {
-			if (zone)
-				spin_unlock_irq(&zone->lru_lock);
-			zone = pagezone;
-			spin_lock_irq(&zone->lru_lock);
-		}
-		if (!TestClearPageLRU(page))
-			BUG();
-		del_page_from_lru(zone, page);
-	}
-	if (zone)
-		spin_unlock_irq(&zone->lru_lock);
-	pagevec_release(pvec);
-}
-
-/*
  * Perform any setup for the swap system
  */
 void __init swap_setup(void)

.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/

  reply	other threads:[~2002-08-28 17:27 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-22  2:29 MM patches against 2.5.31 Andrew Morton
2002-08-22  2:29 ` Andrew Morton
2002-08-22 11:28 ` Christian Ehrhardt
2002-08-22 11:28   ` Christian Ehrhardt
2002-08-26  1:52   ` Andrew Morton
2002-08-26  1:52     ` Andrew Morton
2002-08-26  9:10     ` Christian Ehrhardt
2002-08-26  9:10       ` Christian Ehrhardt
2002-08-26 14:22       ` Daniel Phillips
2002-08-26 14:22         ` Daniel Phillips
2002-08-26 15:29         ` Christian Ehrhardt
2002-08-26 15:29           ` Christian Ehrhardt
2002-08-26 17:56           ` Daniel Phillips
2002-08-26 17:56             ` Daniel Phillips
2002-08-26 19:24             ` Andrew Morton
2002-08-26 19:24               ` Andrew Morton
2002-08-26 19:34               ` Daniel Phillips
2002-08-26 19:34                 ` Daniel Phillips
2002-08-26 19:48               ` Christian Ehrhardt
2002-08-26 19:48                 ` Christian Ehrhardt
2002-08-27  9:22               ` Christian Ehrhardt
2002-08-27  9:22                 ` Christian Ehrhardt
2002-08-27 19:19                 ` Andrew Morton
2002-08-27 19:19                   ` Andrew Morton
2002-08-26 20:00             ` Christian Ehrhardt
2002-08-26 20:00               ` Christian Ehrhardt
2002-08-26 20:09               ` Daniel Phillips
2002-08-26 20:09                 ` Daniel Phillips
2002-08-26 20:58                 ` Christian Ehrhardt
2002-08-26 20:58                   ` Christian Ehrhardt
2002-08-27 16:48                   ` Daniel Phillips
2002-08-27 16:48                     ` Daniel Phillips
2002-08-28 13:14                     ` Christian Ehrhardt
2002-08-28 13:14                       ` Christian Ehrhardt
2002-08-28 17:18                       ` Daniel Phillips
2002-08-28 17:18                         ` Daniel Phillips
2002-08-28 17:42                         ` Andrew Morton [this message]
2002-08-28 17:42                           ` Andrew Morton
2002-08-28 20:41                       ` Daniel Phillips
2002-08-28 20:41                         ` Daniel Phillips
2002-08-28 21:03                         ` Andrew Morton
2002-08-28 21:03                           ` Andrew Morton
2002-08-28 22:04                           ` Daniel Phillips
2002-08-28 22:04                             ` Daniel Phillips
2002-08-28 22:39                             ` Andrew Morton
2002-08-28 22:39                               ` Andrew Morton
2002-08-28 22:57                               ` Daniel Phillips
2002-08-28 22:57                                 ` Daniel Phillips
2002-08-26 21:31                 ` Andrew Morton
2002-08-26 21:31                   ` Andrew Morton
2002-08-27  3:42                   ` Benjamin LaHaise
2002-08-27  3:42                     ` Benjamin LaHaise
2002-08-27  4:37                     ` Andrew Morton
2002-08-27  4:37                       ` Andrew Morton
2002-08-26 17:58     ` Linus Torvalds
2002-08-26 19:28       ` Rik van Riel
2002-08-30 23:03       ` [RFC] [PATCH] Include LRU in page count Daniel Phillips
2002-08-31 16:14         ` Christian Ehrhardt
2002-08-31 17:54           ` Andrew Morton
2002-08-31 19:47           ` Daniel Phillips
2002-08-31 20:26             ` Andrew Morton
2002-08-31 21:05               ` Daniel Phillips
2002-08-31 22:30                 ` William Lee Irwin III
2002-09-01  3:36                   ` Daniel Phillips
2002-09-01 21:32               ` Daniel Phillips
2002-09-01 22:09                 ` Andrew Morton
2002-09-01 22:08                   ` Daniel Phillips
2002-09-01 22:20                   ` Daniel Phillips
2002-09-01 23:08                     ` Andrew Morton
2002-09-01 23:19                       ` Daniel Phillips
2002-09-01 23:28                       ` William Lee Irwin III
2002-09-01 23:33                       ` Daniel Phillips
2002-09-02  0:17                         ` Andrew Morton
2002-09-02  0:30                           ` Daniel Phillips
2002-09-02  1:50                             ` Andrew Morton
2002-09-02  1:08                         ` Rik van Riel
2002-09-02 17:23             ` Christian Ehrhardt
2002-09-02 18:01               ` Daniel Phillips
2002-09-05  4:42         ` [RFC] Alternative raceless page free Daniel Phillips
2002-09-05 12:34           ` Christian Ehrhardt
2002-09-05 15:21             ` Daniel Phillips
2002-09-05 16:04               ` Christian Ehrhardt
2002-09-05 16:10                 ` Daniel Phillips
2002-09-05 16:31                 ` Daniel Phillips
2002-09-05 18:06                 ` [RFC] Alternative raceless page free, updated Daniel Phillips
2002-08-22 15:59 ` MM patches against 2.5.31 Steven Cole
2002-08-22 15:59   ` Steven Cole
2002-08-22 16:06   ` Martin J. Bligh
2002-08-22 16:06     ` Martin J. Bligh
2002-08-22 19:45     ` Steven Cole
2002-08-22 19:45       ` Steven Cole
2002-08-26  2:15     ` Andrew Morton
2002-08-26  2:15       ` Andrew Morton
2002-08-26  2:08       ` Martin J. Bligh
2002-08-26  2:08         ` Martin J. Bligh
2002-08-26  2:32         ` Andrew Morton
2002-08-26  2:32           ` Andrew Morton
2002-08-26  3:06           ` Steven Cole
2002-08-26  3:06             ` Steven Cole
  -- strict thread matches above, loose matches on Subject: below --
2002-08-26 22:09 Ed Tomlinson
2002-08-26 22:09 ` Ed Tomlinson
2002-08-26 23:58 ` Andrew Morton
2002-08-26 23:58   ` Andrew Morton
2002-08-27  0:13   ` Rik van Riel
2002-08-27  0:13     ` Rik van Riel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3D6D0B97.D1A40550@zip.com.au \
    --to=akpm@zip.com.au \
    --cc=ehrhardt@mathematik.uni-ulm.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=phillips@arcor.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.