diff options
author | Minchan Kim <minchan.kim@gmail.com> | 2010-05-24 17:33:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-25 11:07:03 -0400 |
commit | 4c99000ac47cbd097e62f1b5cafad745622cedc3 (patch) | |
tree | 9912597a68403c8f02dfbb414e60e0cb3f6577d3 /fs | |
parent | 2ec93b0bf35fe0fad05d2b7ef139d018768cca38 (diff) |
ntfs: use add_to_page_cache_lru()
Quote from Nick piggin's about btrfs patch
- http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg04472.html.
"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."
Let's use it instead of private pagevec in ntfs, too.
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
Acked-by: Anton Altaparmakov <aia21@cantab.net>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ntfs/file.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index ed7a33470050..a1924a0d2ab0 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -399,18 +399,13 @@ static inline void ntfs_fault_in_pages_readable_iovec(const struct iovec *iov, | |||
399 | * Obtain @nr_pages locked page cache pages from the mapping @mapping and | 399 | * Obtain @nr_pages locked page cache pages from the mapping @mapping and |
400 | * starting at index @index. | 400 | * starting at index @index. |
401 | * | 401 | * |
402 | * If a page is newly created, increment its refcount and add it to the | 402 | * If a page is newly created, add it to lru list |
403 | * caller's lru-buffering pagevec @lru_pvec. | ||
404 | * | ||
405 | * This is the same as mm/filemap.c::__grab_cache_page(), except that @nr_pages | ||
406 | * are obtained at once instead of just one page and that 0 is returned on | ||
407 | * success and -errno on error. | ||
408 | * | 403 | * |
409 | * Note, the page locks are obtained in ascending page index order. | 404 | * Note, the page locks are obtained in ascending page index order. |
410 | */ | 405 | */ |
411 | static inline int __ntfs_grab_cache_pages(struct address_space *mapping, | 406 | static inline int __ntfs_grab_cache_pages(struct address_space *mapping, |
412 | pgoff_t index, const unsigned nr_pages, struct page **pages, | 407 | pgoff_t index, const unsigned nr_pages, struct page **pages, |
413 | struct page **cached_page, struct pagevec *lru_pvec) | 408 | struct page **cached_page) |
414 | { | 409 | { |
415 | int err, nr; | 410 | int err, nr; |
416 | 411 | ||
@@ -426,7 +421,7 @@ static inline int __ntfs_grab_cache_pages(struct address_space *mapping, | |||
426 | goto err_out; | 421 | goto err_out; |
427 | } | 422 | } |
428 | } | 423 | } |
429 | err = add_to_page_cache(*cached_page, mapping, index, | 424 | err = add_to_page_cache_lru(*cached_page, mapping, index, |
430 | GFP_KERNEL); | 425 | GFP_KERNEL); |
431 | if (unlikely(err)) { | 426 | if (unlikely(err)) { |
432 | if (err == -EEXIST) | 427 | if (err == -EEXIST) |
@@ -434,9 +429,6 @@ static inline int __ntfs_grab_cache_pages(struct address_space *mapping, | |||
434 | goto err_out; | 429 | goto err_out; |
435 | } | 430 | } |
436 | pages[nr] = *cached_page; | 431 | pages[nr] = *cached_page; |
437 | page_cache_get(*cached_page); | ||
438 | if (unlikely(!pagevec_add(lru_pvec, *cached_page))) | ||
439 | __pagevec_lru_add_file(lru_pvec); | ||
440 | *cached_page = NULL; | 432 | *cached_page = NULL; |
441 | } | 433 | } |
442 | index++; | 434 | index++; |
@@ -1796,7 +1788,6 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb, | |||
1796 | ssize_t status, written; | 1788 | ssize_t status, written; |
1797 | unsigned nr_pages; | 1789 | unsigned nr_pages; |
1798 | int err; | 1790 | int err; |
1799 | struct pagevec lru_pvec; | ||
1800 | 1791 | ||
1801 | ntfs_debug("Entering for i_ino 0x%lx, attribute type 0x%x, " | 1792 | ntfs_debug("Entering for i_ino 0x%lx, attribute type 0x%x, " |
1802 | "pos 0x%llx, count 0x%lx.", | 1793 | "pos 0x%llx, count 0x%lx.", |
@@ -1908,7 +1899,6 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb, | |||
1908 | } | 1899 | } |
1909 | } | 1900 | } |
1910 | } | 1901 | } |
1911 | pagevec_init(&lru_pvec, 0); | ||
1912 | written = 0; | 1902 | written = 0; |
1913 | /* | 1903 | /* |
1914 | * If the write starts beyond the initialized size, extend it up to the | 1904 | * If the write starts beyond the initialized size, extend it up to the |
@@ -2007,7 +1997,7 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb, | |||
2007 | ntfs_fault_in_pages_readable_iovec(iov, iov_ofs, bytes); | 1997 | ntfs_fault_in_pages_readable_iovec(iov, iov_ofs, bytes); |
2008 | /* Get and lock @do_pages starting at index @start_idx. */ | 1998 | /* Get and lock @do_pages starting at index @start_idx. */ |
2009 | status = __ntfs_grab_cache_pages(mapping, start_idx, do_pages, | 1999 | status = __ntfs_grab_cache_pages(mapping, start_idx, do_pages, |
2010 | pages, &cached_page, &lru_pvec); | 2000 | pages, &cached_page); |
2011 | if (unlikely(status)) | 2001 | if (unlikely(status)) |
2012 | break; | 2002 | break; |
2013 | /* | 2003 | /* |
@@ -2072,7 +2062,6 @@ err_out: | |||
2072 | *ppos = pos; | 2062 | *ppos = pos; |
2073 | if (cached_page) | 2063 | if (cached_page) |
2074 | page_cache_release(cached_page); | 2064 | page_cache_release(cached_page); |
2075 | pagevec_lru_add_file(&lru_pvec); | ||
2076 | ntfs_debug("Done. Returning %s (written 0x%lx, status %li).", | 2065 | ntfs_debug("Done. Returning %s (written 0x%lx, status %li).", |
2077 | written ? "written" : "status", (unsigned long)written, | 2066 | written ? "written" : "status", (unsigned long)written, |
2078 | (long)status); | 2067 | (long)status); |