<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

The address_space.readapges() function currently takes a list of pages,
strung together via page-&gt;list.  Switch it to using page-&gt;lru.

This changes the API into filesystems.


---

 25-akpm/fs/cifs/file.c |   16 +++++++++-------
 25-akpm/fs/mpage.c     |    4 ++--
 25-akpm/mm/readahead.c |   10 +++++-----
 fs/nfs/pagelist.c      |    0 
 fs/nfs/read.c          |    0 
 5 files changed, 16 insertions(+), 14 deletions(-)

diff -puN mm/readahead.c~readahead-stop-using-page-list mm/readahead.c
--- 25/mm/readahead.c~readahead-stop-using-page-list	2004-03-14 14:38:44.225134368 -0800
+++ 25-akpm/mm/readahead.c	2004-03-14 14:38:44.234133000 -0800
@@ -52,7 +52,7 @@ static inline unsigned long get_min_read
 	return (VM_MIN_READAHEAD * 1024) / PAGE_CACHE_SIZE;
 }
 
-#define list_to_page(head) (list_entry((head)-&gt;prev, struct page, list))
+#define list_to_page(head) (list_entry((head)-&gt;prev, struct page, lru))
 
 /**
  * read_cache_pages - populate an address space with some pages, and
@@ -76,7 +76,7 @@ int read_cache_pages(struct address_spac
 
 	while (!list_empty(pages)) {
 		page = list_to_page(pages);
-		list_del(&amp;page-&gt;list);
+		list_del(&amp;page-&gt;lru);
 		if (add_to_page_cache(page, mapping, page-&gt;index, GFP_KERNEL)) {
 			page_cache_release(page);
 			continue;
@@ -89,7 +89,7 @@ int read_cache_pages(struct address_spac
 				struct page *victim;
 
 				victim = list_to_page(pages);
-				list_del(&amp;victim-&gt;list);
+				list_del(&amp;victim-&gt;lru);
 				page_cache_release(victim);
 			}
 			break;
@@ -116,7 +116,7 @@ static int read_pages(struct address_spa
 	pagevec_init(&amp;lru_pvec, 0);
 	for (page_idx = 0; page_idx &lt; nr_pages; page_idx++) {
 		struct page *page = list_to_page(pages);
-		list_del(&amp;page-&gt;list);
+		list_del(&amp;page-&gt;lru);
 		if (!add_to_page_cache(page, mapping,
 					page-&gt;index, GFP_KERNEL)) {
 			mapping-&gt;a_ops-&gt;readpage(filp, page);
@@ -251,7 +251,7 @@ __do_page_cache_readahead(struct address
 		if (!page)
 			break;
 		page-&gt;index = page_offset;
-		list_add(&amp;page-&gt;list, &amp;page_pool);
+		list_add(&amp;page-&gt;lru, &amp;page_pool);
 		ret++;
 	}
 	spin_unlock_irq(&amp;mapping-&gt;tree_lock);
diff -puN fs/nfs/read.c~readahead-stop-using-page-list fs/nfs/read.c
diff -puN fs/nfs/pagelist.c~readahead-stop-using-page-list fs/nfs/pagelist.c
diff -puN fs/mpage.c~readahead-stop-using-page-list fs/mpage.c
--- 25/fs/mpage.c~readahead-stop-using-page-list	2004-03-14 14:38:44.229133760 -0800
+++ 25-akpm/fs/mpage.c	2004-03-14 14:38:44.234133000 -0800
@@ -329,10 +329,10 @@ mpage_readpages(struct address_space *ma
 
 	pagevec_init(&amp;lru_pvec, 0);
 	for (page_idx = 0; page_idx &lt; nr_pages; page_idx++) {
-		struct page *page = list_entry(pages-&gt;prev, struct page, list);
+		struct page *page = list_entry(pages-&gt;prev, struct page, lru);
 
 		prefetchw(&amp;page-&gt;flags);
-		list_del(&amp;page-&gt;list);
+		list_del(&amp;page-&gt;lru);
 		if (!add_to_page_cache(page, mapping,
 					page-&gt;index, GFP_KERNEL)) {
 			bio = do_mpage_readpage(bio, page,
diff -puN fs/cifs/file.c~readahead-stop-using-page-list fs/cifs/file.c
--- 25/fs/cifs/file.c~readahead-stop-using-page-list	2004-03-14 14:38:44.231133456 -0800
+++ 25-akpm/fs/cifs/file.c	2004-03-14 14:38:44.236132696 -0800
@@ -898,9 +898,9 @@ static void cifs_copy_cache_pages(struct
 		if(list_empty(pages))
 			break;
 
-		page = list_entry(pages-&gt;prev, struct page, list);
+		page = list_entry(pages-&gt;prev, struct page, lru);
 
-		list_del(&amp;page-&gt;list);
+		list_del(&amp;page-&gt;lru);
 
 		if (add_to_page_cache(page, mapping, page-&gt;index, GFP_KERNEL)) {
 			page_cache_release(page);
@@ -962,7 +962,7 @@ cifs_readpages(struct file *file, struct
 	for(i = 0;i&lt;num_pages;) {
 		if(list_empty(page_list))
 			break;
-		page = list_entry(page_list-&gt;prev, struct page, list);
+		page = list_entry(page_list-&gt;prev, struct page, lru);
 		offset = (loff_t)page-&gt;index &lt;&lt; PAGE_CACHE_SHIFT;
 
 		/* for reads over a certain size could initiate async read ahead */
@@ -984,8 +984,9 @@ cifs_readpages(struct file *file, struct
 			/* clean up remaing pages off list */
             
 			while (!list_empty(page_list) &amp;&amp; (i &lt; num_pages)) {
-				page = list_entry(page_list-&gt;prev, struct page, list);
-				list_del(&amp;page-&gt;list);
+				page = list_entry(page_list-&gt;prev,
+						struct page, lru);
+				list_del(&amp;page-&gt;lru);
 			}
 			break;
 		} else if (bytes_read &gt; 0) {
@@ -1002,8 +1003,9 @@ cifs_readpages(struct file *file, struct
 			cFYI(1,("No bytes read cleaning remaining pages off readahead list"));
 			/* BB turn off caching and do new lookup on file size at server? */
 			while (!list_empty(page_list) &amp;&amp; (i &lt; num_pages)) {
-				page = list_entry(page_list-&gt;prev, struct page, list);
-				list_del(&amp;page-&gt;list);
+				page = list_entry(page_list-&gt;prev,
+						struct page, lru);
+				list_del(&amp;page-&gt;lru);
 			}
 
 			break;

_
</pre></body></html>