aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Piggin <npiggen@suse.de>2010-04-20 23:18:28 -0400
committerSteve French <sfrench@us.ibm.com>2010-04-20 23:18:28 -0400
commit315e995c63a15cb4d4efdbfd70fe2db191917f7a (patch)
treef04c83f9bfe315cee9d8993d4244fd7ef7aab796
parent05ce7bfe547c9fa967d9cab6c37867a9cb6fb3fa (diff)
[CIFS] use add_to_page_cache_lru
add_to_page_cache_lru is exported, so it should be used. Benefits over using a private pagevec: neater code, 128 bytes fewer stack used, percpu lru ordering is preserved, and finally don't need to flush pagevec before returning so batching may be shared with other LRU insertions. Signed-off-by: Nick Piggin <npiggin@suse.de> Reviewed-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
-rw-r--r--fs/cifs/file.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 9b11a8f56f3a..1361d67f68f3 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1931,8 +1931,7 @@ int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
1931 1931
1932 1932
1933static void cifs_copy_cache_pages(struct address_space *mapping, 1933static void cifs_copy_cache_pages(struct address_space *mapping,
1934 struct list_head *pages, int bytes_read, char *data, 1934 struct list_head *pages, int bytes_read, char *data)
1935 struct pagevec *plru_pvec)
1936{ 1935{
1937 struct page *page; 1936 struct page *page;
1938 char *target; 1937 char *target;
@@ -1944,7 +1943,7 @@ static void cifs_copy_cache_pages(struct address_space *mapping,
1944 page = list_entry(pages->prev, struct page, lru); 1943 page = list_entry(pages->prev, struct page, lru);
1945 list_del(&page->lru); 1944 list_del(&page->lru);
1946 1945
1947 if (add_to_page_cache(page, mapping, page->index, 1946 if (add_to_page_cache_lru(page, mapping, page->index,
1948 GFP_KERNEL)) { 1947 GFP_KERNEL)) {
1949 page_cache_release(page); 1948 page_cache_release(page);
1950 cFYI(1, ("Add page cache failed")); 1949 cFYI(1, ("Add page cache failed"));
@@ -1970,8 +1969,6 @@ static void cifs_copy_cache_pages(struct address_space *mapping,
1970 flush_dcache_page(page); 1969 flush_dcache_page(page);
1971 SetPageUptodate(page); 1970 SetPageUptodate(page);
1972 unlock_page(page); 1971 unlock_page(page);
1973 if (!pagevec_add(plru_pvec, page))
1974 __pagevec_lru_add_file(plru_pvec);
1975 data += PAGE_CACHE_SIZE; 1972 data += PAGE_CACHE_SIZE;
1976 } 1973 }
1977 return; 1974 return;
@@ -1990,7 +1987,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
1990 unsigned int read_size, i; 1987 unsigned int read_size, i;
1991 char *smb_read_data = NULL; 1988 char *smb_read_data = NULL;
1992 struct smb_com_read_rsp *pSMBr; 1989 struct smb_com_read_rsp *pSMBr;
1993 struct pagevec lru_pvec;
1994 struct cifsFileInfo *open_file; 1990 struct cifsFileInfo *open_file;
1995 int buf_type = CIFS_NO_BUFFER; 1991 int buf_type = CIFS_NO_BUFFER;
1996 1992
@@ -2004,7 +2000,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
2004 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb); 2000 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2005 pTcon = cifs_sb->tcon; 2001 pTcon = cifs_sb->tcon;
2006 2002
2007 pagevec_init(&lru_pvec, 0);
2008 cFYI(DBG2, ("rpages: num pages %d", num_pages)); 2003 cFYI(DBG2, ("rpages: num pages %d", num_pages));
2009 for (i = 0; i < num_pages; ) { 2004 for (i = 0; i < num_pages; ) {
2010 unsigned contig_pages; 2005 unsigned contig_pages;
@@ -2073,7 +2068,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
2073 pSMBr = (struct smb_com_read_rsp *)smb_read_data; 2068 pSMBr = (struct smb_com_read_rsp *)smb_read_data;
2074 cifs_copy_cache_pages(mapping, page_list, bytes_read, 2069 cifs_copy_cache_pages(mapping, page_list, bytes_read,
2075 smb_read_data + 4 /* RFC1001 hdr */ + 2070 smb_read_data + 4 /* RFC1001 hdr */ +
2076 le16_to_cpu(pSMBr->DataOffset), &lru_pvec); 2071 le16_to_cpu(pSMBr->DataOffset));
2077 2072
2078 i += bytes_read >> PAGE_CACHE_SHIFT; 2073 i += bytes_read >> PAGE_CACHE_SHIFT;
2079 cifs_stats_bytes_read(pTcon, bytes_read); 2074 cifs_stats_bytes_read(pTcon, bytes_read);
@@ -2106,8 +2101,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
2106 bytes_read = 0; 2101 bytes_read = 0;
2107 } 2102 }
2108 2103
2109 pagevec_lru_add_file(&lru_pvec);
2110
2111/* need to free smb_read_data buf before exit */ 2104/* need to free smb_read_data buf before exit */
2112 if (smb_read_data) { 2105 if (smb_read_data) {
2113 if (buf_type == CIFS_SMALL_BUFFER) 2106 if (buf_type == CIFS_SMALL_BUFFER)