2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-13 15:23:48 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-10-19 23:28:16 -07:00
|
|
|
|
2011-05-26 16:00:52 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
|
|
|
|
|
2006-10-19 23:28:16 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:38 -05:00
|
|
|
|
2006-03-20 13:44:14 -05:00
|
|
|
|
2009-04-01 09:22:26 -04:00
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2011-03-01 01:34:14 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2013-08-19 18:59:33 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nfs: don't ignore return value from nfs_pageio_add_request
Ignoring the return value from nfs_pageio_add_request can cause deadlocks.
In read path:
call nfs_pageio_add_request from readpage_async_filler
assume at this point that there are requests already in desc, that
can't be merged with the current request.
so nfs_pageio_doio is fired up to clear out desc.
assume something goes wrong in setting up the io, so desc->pg_error is set.
This causes nfs_pageio_add_request to return 0, *WITHOUT* adding the original
request.
BUT, since return code is ignored, readpage_async_filler assumes it has
been added, and does nothing further, leaving page locked.
do_generic_mapping_read will eventually call lock_page, resulting in deadlock
In write path:
page is marked dirty by generic_perform_write
nfs_writepages is called
call nfs_pageio_add_request from nfs_page_async_flush
assume at this point that there are requests already in desc, that
can't be merged with the current request.
so nfs_pageio_doio is fired up to clear out desc.
assume something goes wrong in setting up the io, so desc->pg_error is set.
This causes nfs_page_async_flush to return 0, *WITHOUT* adding the original
request, yet marking the request as locked (PG_BUSY) and in writeback,
clearing dirty marks.
The next time a write is done to the page, deadlock will result as
nfs_write_end calls nfs_update_request
Signed-off-by: Fred Isaman <iisaman@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-03-19 11:24:39 -04:00
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2012-04-20 14:47:48 -04:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2014-05-06 09:12:30 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
2014-07-17 20:42:17 -04:00
|
|
|
|
|
|
|
|
|
2014-09-08 22:21:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-12-06 20:33:20 -08:00
|
|
|
|
2006-03-20 13:44:37 -05:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-07-31 16:45:16 -07:00
|
|
|
|
2005-11-30 18:09:02 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-06-09 11:48:33 -04:00
|
|
|
|
2006-03-20 13:44:37 -05:00
|
|
|
|
2014-06-09 11:48:33 -04:00
|
|
|
|
2012-04-20 14:47:44 -04:00
|
|
|
|
2014-05-06 09:12:30 -04:00
|
|
|
|
2006-03-20 13:44:37 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
2014-06-09 11:48:33 -04:00
|
|
|
|
2006-03-20 13:44:37 -05:00
|
|
|
|
2014-06-09 11:48:33 -04:00
|
|
|
|
2006-03-20 13:44:37 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-07-25 14:09:54 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
2006-12-05 00:35:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2006-12-05 00:35:35 -05:00
|
|
|
|
2014-07-17 20:42:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2006-12-05 00:35:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:35 -05:00
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2006-12-05 00:35:35 -05:00
|
|
|
|
|
|
|
|
|
2007-07-02 09:57:54 -04:00
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
2007-07-02 09:57:54 -04:00
|
|
|
|
2006-12-05 00:35:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2008-06-11 12:21:19 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-11 12:21:19 -04:00
|
|
|
|
|
|
|
|
|
mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros
PAGE_CACHE_{SIZE,SHIFT,MASK,ALIGN} macros were introduced *long* time
ago with promise that one day it will be possible to implement page
cache with bigger chunks than PAGE_SIZE.
This promise never materialized. And unlikely will.
We have many places where PAGE_CACHE_SIZE assumed to be equal to
PAGE_SIZE. And it's constant source of confusion on whether
PAGE_CACHE_* or PAGE_* constant should be used in a particular case,
especially on the border between fs and mm.
Global switching to PAGE_CACHE_SIZE != PAGE_SIZE would cause to much
breakage to be doable.
Let's stop pretending that pages in page cache are special. They are
not.
The changes are pretty straight-forward:
- <foo> << (PAGE_CACHE_SHIFT - PAGE_SHIFT) -> <foo>;
- <foo> >> (PAGE_CACHE_SHIFT - PAGE_SHIFT) -> <foo>;
- PAGE_CACHE_{SIZE,SHIFT,MASK,ALIGN} -> PAGE_{SIZE,SHIFT,MASK,ALIGN};
- page_cache_get() -> get_page();
- page_cache_release() -> put_page();
This patch contains automated changes generated with coccinelle using
script below. For some reason, coccinelle doesn't patch header files.
I've called spatch for them manually.
The only adjustment after coccinelle is revert of changes to
PAGE_CAHCE_ALIGN definition: we are going to drop it later.
There are few places in the code where coccinelle didn't reach. I'll
fix them manually in a separate patch. Comments and documentation also
will be addressed with the separate patch.
virtual patch
@@
expression E;
@@
- E << (PAGE_CACHE_SHIFT - PAGE_SHIFT)
+ E
@@
expression E;
@@
- E >> (PAGE_CACHE_SHIFT - PAGE_SHIFT)
+ E
@@
@@
- PAGE_CACHE_SHIFT
+ PAGE_SHIFT
@@
@@
- PAGE_CACHE_SIZE
+ PAGE_SIZE
@@
@@
- PAGE_CACHE_MASK
+ PAGE_MASK
@@
expression E;
@@
- PAGE_CACHE_ALIGN(E)
+ PAGE_ALIGN(E)
@@
expression E;
@@
- page_cache_get(E)
+ get_page(E)
@@
expression E;
@@
- page_cache_release(E)
+ put_page(E)
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-04-01 15:29:47 +03:00
|
|
|
|
2016-10-07 17:00:24 -07:00
|
|
|
|
2008-06-11 12:21:19 -04:00
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-11 12:21:19 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-11 12:21:19 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2007-02-06 11:07:15 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2007-02-06 11:07:15 -08:00
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-08-08 11:00:53 -04:00
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-18 16:09:27 +10:00
|
|
|
|
2016-05-16 17:42:45 -04:00
|
|
|
|
2014-09-18 16:09:27 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-10-15 15:02:01 -04:00
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
2012-10-15 15:02:01 -04:00
|
|
|
|
2007-04-14 19:10:12 -04:00
|
|
|
|
|
|
|
|
|
2012-10-15 15:02:01 -04:00
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
2012-10-15 15:02:01 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-16 23:25:41 -07:00
|
|
|
|
2009-07-09 14:52:32 +02:00
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-02 09:57:54 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-02 09:57:54 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-08-08 11:00:57 -04:00
|
|
|
|
|
|
|
|
|
2014-08-08 11:00:53 -04:00
|
|
|
|
2014-08-08 11:00:56 -04:00
|
|
|
|
|
|
|
|
|
2014-08-08 11:00:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-08-08 11:00:56 -04:00
|
|
|
|
2014-07-17 20:42:15 -04:00
|
|
|
|
2014-08-08 11:00:56 -04:00
|
|
|
|
2014-08-08 11:00:57 -04:00
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-05 16:34:29 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
2014-09-05 16:34:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-17 20:42:19 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-17 20:42:19 -04:00
|
|
|
|
2007-07-02 09:57:54 -04:00
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
2015-12-05 15:57:31 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-14 14:24:28 -04:00
|
|
|
|
2015-12-05 15:57:31 +08:00
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:48 -04:00
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-10-15 15:02:01 -04:00
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2012-10-15 15:02:01 -04:00
|
|
|
|
nfs: don't ignore return value from nfs_pageio_add_request
Ignoring the return value from nfs_pageio_add_request can cause deadlocks.
In read path:
call nfs_pageio_add_request from readpage_async_filler
assume at this point that there are requests already in desc, that
can't be merged with the current request.
so nfs_pageio_doio is fired up to clear out desc.
assume something goes wrong in setting up the io, so desc->pg_error is set.
This causes nfs_pageio_add_request to return 0, *WITHOUT* adding the original
request.
BUT, since return code is ignored, readpage_async_filler assumes it has
been added, and does nothing further, leaving page locked.
do_generic_mapping_read will eventually call lock_page, resulting in deadlock
In write path:
page is marked dirty by generic_perform_write
nfs_writepages is called
call nfs_pageio_add_request from nfs_page_async_flush
assume at this point that there are requests already in desc, that
can't be merged with the current request.
so nfs_pageio_doio is fired up to clear out desc.
assume something goes wrong in setting up the io, so desc->pg_error is set.
This causes nfs_page_async_flush to return 0, *WITHOUT* adding the original
request, yet marking the request as locked (PG_BUSY) and in writeback,
clearing dirty marks.
The next time a write is done to the page, deadlock will result as
nfs_write_end calls nfs_update_request
Signed-off-by: Fred Isaman <iisaman@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-03-19 11:24:39 -04:00
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2015-12-05 15:57:31 +08:00
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 15:57:31 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 15:57:31 +08:00
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
2015-10-01 11:36:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
|
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2010-07-30 15:31:57 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2016-10-07 17:00:24 -07:00
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
2010-07-30 15:31:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2007-05-20 10:18:27 -04:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
2015-10-01 11:36:38 -04:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2006-12-05 00:35:38 -05:00
|
|
|
|
2015-10-01 11:36:38 -04:00
|
|
|
|
2016-06-01 18:25:56 -04:00
|
|
|
|
2014-04-16 15:07:21 +02:00
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-04-02 19:29:52 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2006-03-20 13:44:14 -05:00
|
|
|
|
|
|
|
|
|
2014-04-16 15:07:21 +02:00
|
|
|
|
|
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2007-04-02 19:29:52 -04:00
|
|
|
|
2009-03-11 14:10:30 -04:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2009-03-11 14:10:30 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-04-02 19:29:52 -04:00
|
|
|
|
2009-03-11 14:10:30 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
2014-05-15 11:56:45 -04:00
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
2012-05-09 13:19:15 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
2014-11-12 12:08:00 -05:00
|
|
|
|
|
|
|
|
|
2011-10-17 16:08:46 -07:00
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-12 12:08:00 -05:00
|
|
|
|
2014-07-11 10:20:45 -04:00
|
|
|
|
2014-11-12 12:08:00 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:45 -04:00
|
|
|
|
2007-06-17 13:26:38 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-17 22:25:59 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-19 14:37:30 -05:00
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
|
|
|
|
|
2014-09-24 11:28:32 +10:00
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
|
|
|
|
|
2014-11-12 12:08:00 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2014-07-11 10:20:45 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:42 -05:00
|
|
|
|
2008-03-19 11:24:38 -04:00
|
|
|
|
2006-12-05 00:35:42 -05:00
|
|
|
|
2016-01-19 14:37:30 -05:00
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:42 -05:00
|
|
|
|
|
|
|
|
|
2014-09-08 22:21:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-31 16:24:30 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2015-07-31 16:24:30 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2016-01-15 16:54:15 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2016-01-15 16:54:15 -05:00
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2016-01-19 14:37:30 -05:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:55 -04:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:57 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2016-01-15 16:54:15 -05:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2007-04-20 16:12:34 -04:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-07-28 15:46:20 -07:00
|
|
|
|
2015-05-22 17:13:27 -04:00
|
|
|
|
|
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
|
|
|
|
|
2014-07-17 20:42:19 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2008-06-13 13:25:22 -04:00
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2015-03-17 22:25:59 +00:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2008-06-13 13:25:22 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2008-06-13 13:25:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2007-04-20 16:12:34 -04:00
|
|
|
|
2014-06-09 11:48:36 -04:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2014-06-09 11:48:36 -04:00
|
|
|
|
2007-04-20 16:12:34 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:48 -04:00
|
|
|
|
2007-04-20 16:12:34 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05-09 13:37:43 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:36 -04:00
|
|
|
|
2014-05-06 09:12:28 -04:00
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
2014-09-19 10:55:07 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05-09 14:04:55 -04:00
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
2012-05-09 14:30:35 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-04-20 16:12:34 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-05-06 09:12:34 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2009-03-11 14:10:29 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
|
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2012-04-20 14:47:57 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
2012-05-09 13:19:15 -04:00
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2012-03-17 11:59:30 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:57 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
|
|
|
|
|
2009-03-11 14:10:29 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:57 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2009-03-11 14:10:29 -04:00
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2016-04-01 13:45:09 -04:00
|
|
|
|
2010-02-19 16:53:39 -08:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:45 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-06-13 13:25:22 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05-09 13:19:15 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
2007-07-02 09:57:54 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-05 15:26:36 -04:00
|
|
|
|
|
|
|
|
|
2014-07-17 20:42:19 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:45 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
2012-03-08 17:29:35 -05:00
|
|
|
|
2008-06-10 18:31:00 -04:00
|
|
|
|
2007-10-18 17:08:05 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:48 -04:00
|
|
|
|
2010-04-09 19:07:08 -04:00
|
|
|
|
2012-05-09 14:04:55 -04:00
|
|
|
|
2008-06-13 12:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2007-08-10 17:44:32 -04:00
|
|
|
|
2012-08-13 18:54:45 -04:00
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-12-05 00:35:40 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:40 -05:00
|
|
|
|
2014-07-11 10:20:47 -04:00
|
|
|
|
2006-12-05 00:35:40 -05:00
|
|
|
|
|
|
|
|
|
2012-08-13 18:54:45 -04:00
|
|
|
|
2015-10-01 17:17:06 -04:00
|
|
|
|
|
|
|
|
|
2014-05-15 11:56:45 -04:00
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-12-05 00:35:40 -05:00
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2006-12-05 00:35:40 -05:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2013-08-14 11:59:16 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sunrpc: move NO_CRKEY_TIMEOUT to the auth->au_flags
A generic_cred can be used to look up a unx_cred or a gss_cred, so it's
not really safe to use the the generic_cred->acred->ac_flags to store
the NO_CRKEY_TIMEOUT flag. A lookup for a unx_cred triggered while the
KEY_EXPIRE_SOON flag is already set will cause both NO_CRKEY_TIMEOUT and
KEY_EXPIRE_SOON to be set in the ac_flags, leaving the user associated
with the auth_cred to be in a state where they're perpetually doing 4K
NFS_FILE_SYNC writes.
This can be reproduced as follows:
1. Mount two NFS filesystems, one with sec=krb5 and one with sec=sys.
They do not need to be the same export, nor do they even need to be from
the same NFS server. Also, v3 is fine.
$ sudo mount -o v3,sec=krb5 server1:/export /mnt/krb5
$ sudo mount -o v3,sec=sys server2:/export /mnt/sys
2. As the normal user, before accessing the kerberized mount, kinit with
a short lifetime (but not so short that renewing the ticket would leave
you within the 4-minute window again by the time the original ticket
expires), e.g.
$ kinit -l 10m -r 60m
3. Do some I/O to the kerberized mount and verify that the writes are
wsize, UNSTABLE:
$ dd if=/dev/zero of=/mnt/krb5/file bs=1M count=1
4. Wait until you're within 4 minutes of key expiry, then do some more
I/O to the kerberized mount to ensure that RPC_CRED_KEY_EXPIRE_SOON gets
set. Verify that the writes are 4K, FILE_SYNC:
$ dd if=/dev/zero of=/mnt/krb5/file bs=1M count=1
5. Now do some I/O to the sec=sys mount. This will cause
RPC_CRED_NO_CRKEY_TIMEOUT to be set:
$ dd if=/dev/zero of=/mnt/sys/file bs=1M count=1
6. Writes for that user will now be permanently 4K, FILE_SYNC for that
user, regardless of which mount is being written to, until you reboot
the client. Renewing the kerberos ticket (assuming it hasn't already
expired) will have no effect. Grabbing a new kerberos ticket at this
point will have no effect either.
Move the flag to the auth->au_flags field (which is currently unused)
and rename it slightly to reflect that it's no longer associated with
the auth_cred->ac_flags. Add the rpc_auth to the arg list of
rpcauth_cred_key_to_expire and check the au_flags there too. Finally,
add the inode to the arg list of nfs_ctx_key_to_expire so we can
determine the rpc_auth to pass to rpcauth_cred_key_to_expire.
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2016-06-07 15:14:48 -04:00
|
|
|
|
2013-08-14 11:59:16 -04:00
|
|
|
|
sunrpc: move NO_CRKEY_TIMEOUT to the auth->au_flags
A generic_cred can be used to look up a unx_cred or a gss_cred, so it's
not really safe to use the the generic_cred->acred->ac_flags to store
the NO_CRKEY_TIMEOUT flag. A lookup for a unx_cred triggered while the
KEY_EXPIRE_SOON flag is already set will cause both NO_CRKEY_TIMEOUT and
KEY_EXPIRE_SOON to be set in the ac_flags, leaving the user associated
with the auth_cred to be in a state where they're perpetually doing 4K
NFS_FILE_SYNC writes.
This can be reproduced as follows:
1. Mount two NFS filesystems, one with sec=krb5 and one with sec=sys.
They do not need to be the same export, nor do they even need to be from
the same NFS server. Also, v3 is fine.
$ sudo mount -o v3,sec=krb5 server1:/export /mnt/krb5
$ sudo mount -o v3,sec=sys server2:/export /mnt/sys
2. As the normal user, before accessing the kerberized mount, kinit with
a short lifetime (but not so short that renewing the ticket would leave
you within the 4-minute window again by the time the original ticket
expires), e.g.
$ kinit -l 10m -r 60m
3. Do some I/O to the kerberized mount and verify that the writes are
wsize, UNSTABLE:
$ dd if=/dev/zero of=/mnt/krb5/file bs=1M count=1
4. Wait until you're within 4 minutes of key expiry, then do some more
I/O to the kerberized mount to ensure that RPC_CRED_KEY_EXPIRE_SOON gets
set. Verify that the writes are 4K, FILE_SYNC:
$ dd if=/dev/zero of=/mnt/krb5/file bs=1M count=1
5. Now do some I/O to the sec=sys mount. This will cause
RPC_CRED_NO_CRKEY_TIMEOUT to be set:
$ dd if=/dev/zero of=/mnt/sys/file bs=1M count=1
6. Writes for that user will now be permanently 4K, FILE_SYNC for that
user, regardless of which mount is being written to, until you reboot
the client. Renewing the kerberos ticket (assuming it hasn't already
expired) will have no effect. Grabbing a new kerberos ticket at this
point will have no effect either.
Move the flag to the auth->au_flags field (which is currently unused)
and rename it slightly to reflect that it's no longer associated with
the auth_cred->ac_flags. Add the rpc_auth to the arg list of
rpcauth_cred_key_to_expire and check the au_flags there too. Finally,
add the inode to the arg list of nfs_ctx_key_to_expire so we can
determine the rpc_auth to pass to rpcauth_cred_key_to_expire.
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2016-06-07 15:14:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-14 11:59:16 -04:00
|
|
|
|
|
|
|
|
|
NFS: Fix a potential file corruption issue when writing
If the inode is flagged as having an invalid mapping, then we can't rely on
the PageUptodate() flag. Ensure that we don't use the "anti-fragmentation"
write optimisation in nfs_updatepage(), since that will cause NFS to write
out areas of the page that are no longer guaranteed to be up to date.
A potential corruption could occur in the following scenario:
client 1 client 2
=============== ===============
fd=open("f",O_CREAT|O_WRONLY,0644);
write(fd,"fubar\n",6); // cache last page
close(fd);
fd=open("f",O_WRONLY|O_APPEND);
write(fd,"foo\n",4);
close(fd);
fd=open("f",O_WRONLY|O_APPEND);
write(fd,"bar\n",4);
close(fd);
-----
The bug may lead to the file "f" reading 'fubar\n\0\0\0\nbar\n' because
client 2 does not update the cached page after re-opening the file for
write. Instead it keeps it marked as PageUptodate() until someone calls
invaldate_inode_pages2() (typically by calling read()).
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-02-07 17:24:07 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-29 12:50:01 -04:00
|
|
|
|
NFS: Fix a potential file corruption issue when writing
If the inode is flagged as having an invalid mapping, then we can't rely on
the PageUptodate() flag. Ensure that we don't use the "anti-fragmentation"
write optimisation in nfs_updatepage(), since that will cause NFS to write
out areas of the page that are no longer guaranteed to be up to date.
A potential corruption could occur in the following scenario:
client 1 client 2
=============== ===============
fd=open("f",O_CREAT|O_WRONLY,0644);
write(fd,"fubar\n",6); // cache last page
close(fd);
fd=open("f",O_WRONLY|O_APPEND);
write(fd,"foo\n",4);
close(fd);
fd=open("f",O_WRONLY|O_APPEND);
write(fd,"bar\n",4);
close(fd);
-----
The bug may lead to the file "f" reading 'fubar\n\0\0\0\nbar\n' because
client 2 does not update the cached page after re-opening the file for
write. Instead it keeps it marked as PageUptodate() until someone calls
invaldate_inode_pages2() (typically by calling read()).
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-02-07 17:24:07 -05:00
|
|
|
|
NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping
There is a possible race in how the nfs_invalidate_mapping function is
handled. Currently, we go and invalidate the pages in the file and then
clear NFS_INO_INVALID_DATA.
The problem is that it's possible for a stale page to creep into the
mapping after the page was invalidated (i.e., via readahead). If another
writer comes along and sets the flag after that happens but before
invalidate_inode_pages2 returns then we could clear the flag
without the cache having been properly invalidated.
So, we must clear the flag first and then invalidate the pages. Doing
this however, opens another race:
It's possible to have two concurrent read() calls that end up in
nfs_revalidate_mapping at the same time. The first one clears the
NFS_INO_INVALID_DATA flag and then goes to call nfs_invalidate_mapping.
Just before calling that though, the other task races in, checks the
flag and finds it cleared. At that point, it trusts that the mapping is
good and gets the lock on the page, allowing the read() to be satisfied
from the cache even though the data is no longer valid.
These effects are easily manifested by running diotest3 from the LTP
test suite on NFS. That program does a series of DIO writes and buffered
reads. The operations are serialized and page-aligned but the existing
code fails the test since it occasionally allows a read to come out of
the cache incorrectly. While mixing direct and buffered I/O isn't
recommended, I believe it's possible to hit this in other ways that just
use buffered I/O, though that situation is much harder to reproduce.
The problem is that the checking/clearing of that flag and the
invalidation of the mapping really need to be atomic. Fix this by
serializing concurrent invalidations with a bitlock.
At the same time, we also need to allow other places that check
NFS_INO_INVALID_DATA to check whether we might be in the middle of
invalidating the file, so fix up a couple of places that do that
to look for the new NFS_INO_INVALIDATING flag.
Doing this requires us to be careful not to set the bitlock
unnecessarily, so this code only does that if it believes it will
be doing an invalidation.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2014-01-27 13:46:15 -05:00
|
|
|
|
|
|
|
|
|
2012-04-29 12:50:01 -04:00
|
|
|
|
|
|
|
|
|
2014-06-20 08:44:42 -04:00
|
|
|
|
NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping
There is a possible race in how the nfs_invalidate_mapping function is
handled. Currently, we go and invalidate the pages in the file and then
clear NFS_INO_INVALID_DATA.
The problem is that it's possible for a stale page to creep into the
mapping after the page was invalidated (i.e., via readahead). If another
writer comes along and sets the flag after that happens but before
invalidate_inode_pages2 returns then we could clear the flag
without the cache having been properly invalidated.
So, we must clear the flag first and then invalidate the pages. Doing
this however, opens another race:
It's possible to have two concurrent read() calls that end up in
nfs_revalidate_mapping at the same time. The first one clears the
NFS_INO_INVALID_DATA flag and then goes to call nfs_invalidate_mapping.
Just before calling that though, the other task races in, checks the
flag and finds it cleared. At that point, it trusts that the mapping is
good and gets the lock on the page, allowing the read() to be satisfied
from the cache even though the data is no longer valid.
These effects are easily manifested by running diotest3 from the LTP
test suite on NFS. That program does a series of DIO writes and buffered
reads. The operations are serialized and page-aligned but the existing
code fails the test since it occasionally allows a read to come out of
the cache incorrectly. While mixing direct and buffered I/O isn't
recommended, I believe it's possible to hit this in other ways that just
use buffered I/O, though that situation is much harder to reproduce.
The problem is that the checking/clearing of that flag and the
invalidation of the mapping really need to be atomic. Fix this by
serializing concurrent invalidations with a bitlock.
At the same time, we also need to allow other places that check
NFS_INO_INVALID_DATA to check whether we might be in the middle of
invalidating the file, so fix up a couple of places that do that
to look for the new NFS_INO_INVALIDATING flag.
Doing this requires us to be careful not to set the bitlock
unnecessarily, so this code only does that if it believes it will
be doing an invalidation.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2014-01-27 13:46:15 -05:00
|
|
|
|
2014-01-28 13:47:46 -05:00
|
|
|
|
NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping
There is a possible race in how the nfs_invalidate_mapping function is
handled. Currently, we go and invalidate the pages in the file and then
clear NFS_INO_INVALID_DATA.
The problem is that it's possible for a stale page to creep into the
mapping after the page was invalidated (i.e., via readahead). If another
writer comes along and sets the flag after that happens but before
invalidate_inode_pages2 returns then we could clear the flag
without the cache having been properly invalidated.
So, we must clear the flag first and then invalidate the pages. Doing
this however, opens another race:
It's possible to have two concurrent read() calls that end up in
nfs_revalidate_mapping at the same time. The first one clears the
NFS_INO_INVALID_DATA flag and then goes to call nfs_invalidate_mapping.
Just before calling that though, the other task races in, checks the
flag and finds it cleared. At that point, it trusts that the mapping is
good and gets the lock on the page, allowing the read() to be satisfied
from the cache even though the data is no longer valid.
These effects are easily manifested by running diotest3 from the LTP
test suite on NFS. That program does a series of DIO writes and buffered
reads. The operations are serialized and page-aligned but the existing
code fails the test since it occasionally allows a read to come out of
the cache incorrectly. While mixing direct and buffered I/O isn't
recommended, I believe it's possible to hit this in other ways that just
use buffered I/O, though that situation is much harder to reproduce.
The problem is that the checking/clearing of that flag and the
invalidation of the mapping really need to be atomic. Fix this by
serializing concurrent invalidations with a bitlock.
At the same time, we also need to allow other places that check
NFS_INO_INVALID_DATA to check whether we might be in the middle of
invalidating the file, so fix up a couple of places that do that
to look for the new NFS_INO_INVALIDATING flag.
Doing this requires us to be careful not to set the bitlock
unnecessarily, so this code only does that if it believes it will
be doing an invalidation.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2014-01-27 13:46:15 -05:00
|
|
|
|
2012-04-29 12:50:01 -04:00
|
|
|
|
|
|
|
|
|
2014-06-20 08:44:42 -04:00
|
|
|
|
|
|
|
|
|
2012-04-29 12:50:01 -04:00
|
|
|
|
NFS: Fix a potential file corruption issue when writing
If the inode is flagged as having an invalid mapping, then we can't rely on
the PageUptodate() flag. Ensure that we don't use the "anti-fragmentation"
write optimisation in nfs_updatepage(), since that will cause NFS to write
out areas of the page that are no longer guaranteed to be up to date.
A potential corruption could occur in the following scenario:
client 1 client 2
=============== ===============
fd=open("f",O_CREAT|O_WRONLY,0644);
write(fd,"fubar\n",6); // cache last page
close(fd);
fd=open("f",O_WRONLY|O_APPEND);
write(fd,"foo\n",4);
close(fd);
fd=open("f",O_WRONLY|O_APPEND);
write(fd,"bar\n",4);
close(fd);
-----
The bug may lead to the file "f" reading 'fubar\n\0\0\0\nbar\n' because
client 2 does not update the cached page after re-opening the file for
write. Instead it keeps it marked as PageUptodate() until someone calls
invaldate_inode_pages2() (typically by calling read()).
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2008-02-07 17:24:07 -05:00
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-05 17:33:19 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-17 15:12:05 -05:00
|
|
|
|
|
|
|
|
|
2013-07-05 17:33:19 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-05 17:33:19 -04:00
|
|
|
|
|
|
|
|
|
2014-01-17 15:12:05 -05:00
|
|
|
|
|
|
|
|
|
2013-07-05 17:33:19 -04:00
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
2015-10-01 18:38:27 -04:00
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:57 -05:00
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-01-16 15:05:57 -05:00
|
|
|
|
2015-01-16 15:05:55 -05:00
|
|
|
|
2013-07-05 17:33:19 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-08-10 17:44:32 -04:00
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2006-03-20 13:44:14 -05:00
|
|
|
|
|
|
|
|
|
2013-09-16 10:53:17 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2016-07-18 10:41:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-05 17:33:19 -04:00
|
|
|
|
2006-12-05 00:35:38 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:39 -05:00
|
|
|
|
2008-06-05 16:02:35 -04:00
|
|
|
|
|
|
|
|
|
2011-10-17 18:22:55 -07:00
|
|
|
|
|
|
|
|
|
2016-07-18 10:41:57 -04:00
|
|
|
|
2008-06-11 17:56:05 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
|
|
|
|
|
2014-06-09 13:12:20 -07:00
|
|
|
|
2014-05-06 09:12:37 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
2011-03-03 15:13:41 +00:00
|
|
|
|
2014-05-06 09:12:37 -04:00
|
|
|
|
2014-06-09 13:12:20 -07:00
|
|
|
|
2011-03-03 15:13:41 +00:00
|
|
|
|
2014-06-09 13:12:20 -07:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2011-07-12 13:42:02 -04:00
|
|
|
|
|
|
|
|
|
2008-03-19 11:24:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-06-17 19:56:22 -04:00
|
|
|
|
2012-05-09 14:04:55 -04:00
|
|
|
|
2014-05-15 11:56:47 -04:00
|
|
|
|
2012-05-09 14:30:35 -04:00
|
|
|
|
2008-03-19 11:24:38 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:48 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-31 11:44:06 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:48 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-31 11:44:06 -05:00
|
|
|
|
2012-04-20 14:47:48 -04:00
|
|
|
|
|
|
|
|
|
2012-06-20 15:53:48 -04:00
|
|
|
|
2014-04-16 15:07:21 +02:00
|
|
|
|
2012-04-20 14:47:48 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-04-16 15:07:21 +02:00
|
|
|
|
2014-05-06 09:12:40 -04:00
|
|
|
|
2014-04-16 15:07:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:30 -04:00
|
|
|
|
|
|
|
|
|
2011-06-10 13:30:23 -04:00
|
|
|
|
2012-07-30 16:05:23 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2011-07-13 15:59:19 -04:00
|
|
|
|
|
|
|
|
|
2014-09-19 10:55:07 -04:00
|
|
|
|
|
|
|
|
|
2015-09-20 23:03:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:40 -04:00
|
|
|
|
2014-09-19 10:55:07 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-13 15:59:19 -04:00
|
|
|
|
2011-07-13 15:59:57 -04:00
|
|
|
|
2011-07-13 15:59:19 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-13 11:11:31 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2014-04-13 11:11:31 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2015-02-26 17:36:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-05 20:06:38 -04:00
|
|
|
|
2015-02-26 17:36:09 -05:00
|
|
|
|
|
|
|
|
|
2015-07-05 20:06:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-26 17:36:09 -05:00
|
|
|
|
2015-07-05 20:06:38 -04:00
|
|
|
|
|
|
|
|
|
2015-02-26 17:36:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-05 20:06:38 -04:00
|
|
|
|
|
|
|
|
|
2015-02-26 17:36:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-05 20:06:38 -04:00
|
|
|
|
2015-02-26 17:36:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:32 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-09-20 14:33:04 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2014-05-06 09:12:32 -04:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2006-03-20 13:44:14 -05:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-03 15:13:47 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-06-11 17:56:05 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:44 -04:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-13 11:11:31 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:32 -04:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
|
|
|
|
|
2014-04-13 11:11:31 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2006-03-20 13:44:14 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
2011-02-11 15:42:38 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2015-10-16 17:23:29 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:35 -04:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:47 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
|
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2014-06-09 07:10:14 +08:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2012-04-27 17:53:44 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-10-25 18:42:54 -04:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
2007-07-14 15:39:59 -04:00
|
|
|
|
2007-10-25 18:42:54 -04:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2007-07-14 15:39:59 -04:00
|
|
|
|
2008-02-19 20:04:23 -05:00
|
|
|
|
2012-04-27 17:53:44 -04:00
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
2007-07-14 15:39:59 -04:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2014-06-09 07:10:14 +08:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2015-07-01 12:00:13 +08:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2013-08-13 16:37:37 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2014-08-07 10:15:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
|
|
|
|
|
2015-03-17 22:25:59 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2011-03-23 13:27:52 +00:00
|
|
|
|
2014-08-07 10:15:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2012-04-20 14:47:55 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2005-06-22 17:16:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2005-10-27 22:12:38 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
2015-02-13 13:19:54 -08:00
|
|
|
|
|
|
|
|
|
2012-05-09 14:04:55 -04:00
|
|
|
|
2011-03-23 13:27:47 +00:00
|
|
|
|
|
|
|
|
|
2011-03-23 13:27:53 +00:00
|
|
|
|
2011-03-23 13:27:47 +00:00
|
|
|
|
2015-12-31 09:28:06 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2016-05-25 10:07:23 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
|
|
|
|
|
2014-06-09 07:10:14 +08:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-19 14:37:30 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-23 13:21:01 +03:00
|
|
|
|
|
|
|
|
|
2016-01-19 14:37:30 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-01-31 12:14:01 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2011-04-12 12:29:15 -04:00
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
2011-03-23 13:27:48 +00:00
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2014-09-24 11:28:32 +10:00
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-19 14:37:30 -05:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2013-12-17 18:20:16 +01:00
|
|
|
|
2011-06-22 18:40:12 -04:00
|
|
|
|
2015-03-17 22:25:59 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-01 21:32:24 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-03-19 11:24:38 -04:00
|
|
|
|
2012-09-11 16:01:22 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-05-09 14:04:55 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-09-24 11:28:32 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
2011-03-23 13:27:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2011-03-23 13:27:48 +00:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2008-04-15 16:56:39 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
|
|
|
|
|
2015-12-31 09:28:06 -05:00
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:57 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:52 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-04-20 14:47:52 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2012-04-20 14:47:52 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-30 15:31:54 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-26 08:42:11 -04:00
|
|
|
|
2015-09-29 20:34:05 -04:00
|
|
|
|
|
|
|
|
|
2010-05-26 08:42:11 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2015-12-31 09:28:06 -05:00
|
|
|
|
2010-02-19 16:46:56 -08:00
|
|
|
|
2015-07-13 14:01:32 -04:00
|
|
|
|
2010-02-19 16:46:56 -08:00
|
|
|
|
2010-02-19 17:00:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-19 16:46:56 -08:00
|
|
|
|
2011-10-11 09:49:21 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2011-10-11 09:49:21 -04:00
|
|
|
|
|
|
|
|
|
2010-09-28 09:14:01 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-12 12:08:00 -05:00
|
|
|
|
2010-09-28 09:14:01 -04:00
|
|
|
|
2010-02-19 17:00:02 -08:00
|
|
|
|
2010-09-28 09:14:01 -04:00
|
|
|
|
2010-02-19 17:00:02 -08:00
|
|
|
|
2010-09-28 09:14:01 -04:00
|
|
|
|
|
|
|
|
|
2010-02-19 17:00:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-19 16:46:56 -08:00
|
|
|
|
2010-02-19 17:00:02 -08:00
|
|
|
|
|
|
|
|
|
2010-02-19 16:46:56 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-30 16:05:25 -04:00
|
|
|
|
2012-06-20 15:53:49 -04:00
|
|
|
|
2016-06-25 18:12:03 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-19 17:03:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-25 14:09:54 -04:00
|
|
|
|
2013-08-19 18:59:33 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-25 14:14:42 -04:00
|
|
|
|
2015-05-06 18:26:58 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-25 14:09:54 -04:00
|
|
|
|
2015-05-06 18:26:58 -04:00
|
|
|
|
2013-08-19 18:59:33 -04:00
|
|
|
|
|
|
|
|
|
2006-10-09 16:18:38 -04:00
|
|
|
|
2012-07-30 16:05:23 -04:00
|
|
|
|
2006-10-09 16:18:38 -04:00
|
|
|
|
2007-08-28 10:29:36 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 10:20:49 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-08-28 10:29:36 -04:00
|
|
|
|
2014-07-11 10:20:49 -04:00
|
|
|
|
2007-08-28 10:29:36 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-19 17:03:28 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
2006-10-09 16:18:38 -04:00
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros
PAGE_CACHE_{SIZE,SHIFT,MASK,ALIGN} macros were introduced *long* time
ago with promise that one day it will be possible to implement page
cache with bigger chunks than PAGE_SIZE.
This promise never materialized. And unlikely will.
We have many places where PAGE_CACHE_SIZE assumed to be equal to
PAGE_SIZE. And it's constant source of confusion on whether
PAGE_CACHE_* or PAGE_* constant should be used in a particular case,
especially on the border between fs and mm.
Global switching to PAGE_CACHE_SIZE != PAGE_SIZE would cause to much
breakage to be doable.
Let's stop pretending that pages in page cache are special. They are
not.
The changes are pretty straight-forward:
- <foo> << (PAGE_CACHE_SHIFT - PAGE_SHIFT) -> <foo>;
- <foo> >> (PAGE_CACHE_SHIFT - PAGE_SHIFT) -> <foo>;
- PAGE_CACHE_{SIZE,SHIFT,MASK,ALIGN} -> PAGE_{SIZE,SHIFT,MASK,ALIGN};
- page_cache_get() -> get_page();
- page_cache_release() -> put_page();
This patch contains automated changes generated with coccinelle using
script below. For some reason, coccinelle doesn't patch header files.
I've called spatch for them manually.
The only adjustment after coccinelle is revert of changes to
PAGE_CAHCE_ALIGN definition: we are going to drop it later.
There are few places in the code where coccinelle didn't reach. I'll
fix them manually in a separate patch. Comments and documentation also
will be addressed with the separate patch.
virtual patch
@@
expression E;
@@
- E << (PAGE_CACHE_SHIFT - PAGE_SHIFT)
+ E
@@
expression E;
@@
- E >> (PAGE_CACHE_SHIFT - PAGE_SHIFT)
+ E
@@
@@
- PAGE_CACHE_SHIFT
+ PAGE_SHIFT
@@
@@
- PAGE_CACHE_SIZE
+ PAGE_SIZE
@@
@@
- PAGE_CACHE_MASK
+ PAGE_MASK
@@
expression E;
@@
- PAGE_CACHE_ALIGN(E)
+ PAGE_ALIGN(E)
@@
expression E;
@@
- page_cache_get(E)
+ get_page(E)
@@
expression E;
@@
- page_cache_release(E)
+ put_page(E)
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-04-01 15:29:47 +03:00
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
|
|
|
|
|
2010-02-19 17:03:28 -08:00
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-10-09 16:18:38 -04:00
|
|
|
|
2013-08-19 18:59:33 -04:00
|
|
|
|
|
|
|
|
|
2010-05-26 08:42:24 -04:00
|
|
|
|
2010-04-27 18:33:54 -04:00
|
|
|
|
2008-04-11 16:03:54 -04:00
|
|
|
|
2015-12-05 16:20:43 +08:00
|
|
|
|
2008-04-11 16:03:54 -04:00
|
|
|
|
|
|
|
|
|
2010-05-26 08:42:24 -04:00
|
|
|
|
2010-02-19 17:03:28 -08:00
|
|
|
|
2013-08-19 18:59:33 -04:00
|
|
|
|
2010-05-26 08:42:24 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-04-27 18:33:54 -04:00
|
|
|
|
2008-04-11 16:03:54 -04:00
|
|
|
|
2010-02-19 17:03:28 -08:00
|
|
|
|
2008-04-11 16:03:54 -04:00
|
|
|
|
2013-08-19 18:59:33 -04:00
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
2006-10-09 16:18:38 -04:00
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
2012-01-12 17:19:43 -08:00
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2011-10-12 10:57:42 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2012-12-05 13:34:49 +00:00
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
2012-01-12 17:19:43 -08:00
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NFS: Split fs/nfs/inode.c
As fs/nfs/inode.c is rather large, heterogenous and unwieldy, the attached
patch splits it up into a number of files:
(*) fs/nfs/inode.c
Strictly inode specific functions.
(*) fs/nfs/super.c
Superblock management functions for NFS and NFS4, normal access, clones
and referrals. The NFS4 superblock functions _could_ move out into a
separate conditionally compiled file, but it's probably not worth it as
there're so many common bits.
(*) fs/nfs/namespace.c
Some namespace-specific functions have been moved here.
(*) fs/nfs/nfs4namespace.c
NFS4-specific namespace functions (this could be merged into the previous
file). This file is conditionally compiled.
(*) fs/nfs/internal.h
Inter-file declarations, plus a few simple utility functions moved from
fs/nfs/inode.c.
Additionally, all the in-.c-file externs have been moved here, and those
files they were moved from now includes this file.
For the most part, the functions have not been changed, only some multiplexor
functions have changed significantly.
I've also:
(*) Added some extra banner comments above some functions.
(*) Rearranged the function order within the files to be more logical and
better grouped (IMO), though someone may prefer a different order.
(*) Reduced the number of #ifdefs in .c files.
(*) Added missing __init and __exit directives.
Signed-Off-By: David Howells <dhowells@redhat.com>
2006-06-09 09:34:33 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:33 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-07-20 10:11:58 +09:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-03-26 01:37:50 -08:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-08-02 14:30:56 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-08-02 14:30:56 -04:00
|
|
|
|
2012-04-20 14:47:39 -04:00
|
|
|
|
2006-03-26 01:37:50 -08:00
|
|
|
|
2012-11-12 09:27:37 +08:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-08-02 14:30:56 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-03-16 13:38:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2012-08-02 14:30:56 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2006-06-27 12:59:15 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2012-08-02 14:30:56 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-09-27 01:49:40 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:30 -04:00
|
|
|
|
2014-05-06 09:12:31 -04:00
|
|
|
|
2014-05-06 09:12:30 -04:00
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:32 -04:00
|
|
|
|
|
|
|
|
|
2014-05-06 09:12:37 -04:00
|
|
|
|
2014-05-06 09:12:30 -04:00
|
|
|
|