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
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-06-09 11:48:33 -04: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
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-07-31 16:45:06 -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
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-04-02 19:29:52 -04:00
|
|
|
|
2014-09-18 16:09:27 +10:00
|
|
|
|
|
|
|
|
|
2009-12-03 13:54:25 +01: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
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-17 20:42:19 -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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-30 15:31:57 -04: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-10-01 11:36:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-10 08:54:13 -04:00
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
|
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
2010-07-30 15:31:57 -04:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2012-07-31 16:45:06 -07:00
|
|
|
|
2010-10-26 14:21:26 -07:00
|
|
|
|
2010-07-30 15:31:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2015-10-01 11:36:38 -04:00
|
|
|
|
2006-12-05 00:35:41 -05:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2015-10-01 11:36:38 -04:00
|
|
|
|
|
|
|
|
|
2014-04-16 15:07:21 +02: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
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-07-22 19:27:32 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-03-11 14:10:30 -04:00
|
|
|
|
2007-04-02 19:29:52 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2009-03-11 14:10:30 -04:00
|
|
|
|
sched: Remove proliferation of wait_on_bit() action functions
The current "wait_on_bit" interface requires an 'action'
function to be provided which does the actual waiting.
There are over 20 such functions, many of them identical.
Most cases can be satisfied by one of just two functions, one
which uses io_schedule() and one which just uses schedule().
So:
Rename wait_on_bit and wait_on_bit_lock to
wait_on_bit_action and wait_on_bit_lock_action
to make it explicit that they need an action function.
Introduce new wait_on_bit{,_lock} and wait_on_bit{,_lock}_io
which are *not* given an action function but implicitly use
a standard one.
The decision to error-out if a signal is pending is now made
based on the 'mode' argument rather than being encoded in the action
function.
All instances of the old wait_on_bit and wait_on_bit_lock which
can use the new version have been changed accordingly and their
action functions have been discarded.
wait_on_bit{_lock} does not return any specific error code in the
event of a signal so the caller must check for non-zero and
interpolate their own error code as appropriate.
The wait_on_bit() call in __fscache_wait_on_invalidate() was
ambiguous as it specified TASK_UNINTERRUPTIBLE but used
fscache_wait_bit_interruptible as an action function.
David Howells confirms this should be uniformly
"uninterruptible"
The main remaining user of wait_on_bit{,_lock}_action is NFS
which needs to use a freezer-aware schedule() call.
A comment in fs/gfs2/glock.c notes that having multiple 'action'
functions is useful as they display differently in the 'wchan'
field of 'ps'. (and /proc/$PID/wchan).
As the new bit_wait{,_io} functions are tagged "__sched", they
will not show up at all, but something higher in the stack. So
the distinction will still be visible, only with different
function names (gds2_glock_wait versus gfs2_glock_dq_wait in the
gfs2/glock.c case).
Since first version of this patch (against 3.15) two new action
functions appeared, on in NFS and one in CIFS. CIFS also now
uses an action function that makes the same freezer aware
schedule call as NFS.
Signed-off-by: NeilBrown <neilb@suse.de>
Acked-by: David Howells <dhowells@redhat.com> (fscache, keys)
Acked-by: Steven Whitehouse <swhiteho@redhat.com> (gfs2)
Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Steve French <sfrench@samba.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/20140707051603.28027.72349.stgit@notabene.brown
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2014-07-07 15:16:04 +10:00
|
|
|
|
2009-03-11 14:10:30 -04: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
|
|
|
|
|
|
|
|
|
2014-03-17 18:06:10 +01: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-08 22:21:00 -07: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2015-07-31 16:24:30 -04:00
|
|
|
|
2012-04-20 14:47:53 -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
|
|
|
|
|
|
|
|
|
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-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
|
|
|
|
2005-04-16 15:20:36 -07: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
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2014-09-05 18:20:21 -04:00
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-04-20 16:12:34 -04:00
|
|
|
|
2012-03-08 17:29:35 -05: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
|
|
|
|
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-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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
2009-03-11 14:10:29 -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-08 17:29:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-15 17:16:40 -04:00
|
|
|
|
|
|
|
|
|
2012-05-09 13:19:15 -04:00
|
|
|
|
2012-04-20 14:47:53 -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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
2012-04-20 14:47:53 -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
|
|
|
|
|
|
|
|
|
2006-12-05 00:35:35 -05: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07: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
|
|
|
|
2005-04-16 15:20:36 -07: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
2011-06-10 13:30:23 -04: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
|
|
|
|
2011-06-10 13:30:23 -04: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
|
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:54 -04:00
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2014-03-17 18:06:10 +01: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
|
|
|
|
2006-03-20 13:44:27 -05:00
|
|
|
|
2014-06-09 07:10:14 +08:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2015-07-01 12:00:13 +08:00
|
|
|
|
2007-07-14 15:40:00 -04:00
|
|
|
|
2013-08-13 16:37:37 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-25 18:42:54 -04:00
|
|
|
|
2008-04-14 14:54:53 -04:00
|
|
|
|
|
|
|
|
|
nfs: close NFSv4 COMMIT vs. CLOSE race
I've been adding in more artificial delays in the NFSv4 commit and close
codepaths to uncover races. The kernel I'm testing has the patch to
close the race in __rpc_wait_for_completion_task that's in Trond's
cthon2011 branch. The reproducer I've been using does this in a loop:
mkdir("DIR");
fd = open("DIR/FILE", O_WRONLY|O_CREAT|O_EXCL, 0644);
write(fd, "abcdefg", 7);
close(fd);
unlink("DIR/FILE");
rmdir("DIR");
The above reproducer shouldn't result in any silly-renaming. However,
when I add a "msleep(100)" just after the nfs_commit_clear_lock call in
nfs_commit_release, I can almost always force one to occur. If I can
force it to occur with that, then it can happen without that delay
given the right timing.
nfs_commit_inode waits for the NFS_INO_COMMIT bit to clear when called
with FLUSH_SYNC set. nfs_commit_rpcsetup on the other hand does not wait
for the task to complete before putting its reference to it, so the last
reference get put in rpc_release task and gets queued to a workqueue.
In this situation, the last open context reference may be put by the
COMMIT release instead of the close() syscall. The close() syscall
returns too quickly and the unlink runs while the d_count is still
high since the COMMIT release hasn't put its dentry reference yet.
Fix this by having rpc_commit_rpcsetup wait for the RPC call to complete
before putting the task reference when FLUSH_SYNC is set. With this, the
last reference is put by the process that's initiating the FLUSH_SYNC
commit and the race is closed.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2011-03-06 17:14:13 +00:00
|
|
|
|
|
|
|
|
|
2008-04-14 14:54:53 -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-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
|
|
|
|
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
|
|
|
|
2011-03-23 13:27:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:39 -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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
2012-04-20 14:47:54 -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
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-08 17:29:35 -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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-08 11:56:09 -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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
|
|
|
|
|
2010-05-26 08:42:11 -04:00
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2011-03-23 13:27:51 +00:00
|
|
|
|
|
|
|
|
|
2012-04-20 14:47:53 -04:00
|
|
|
|
2005-06-22 17:16:31 +00:00
|
|
|
|
|
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
2010-05-26 08:42:11 -04:00
|
|
|
|
sched: Remove proliferation of wait_on_bit() action functions
The current "wait_on_bit" interface requires an 'action'
function to be provided which does the actual waiting.
There are over 20 such functions, many of them identical.
Most cases can be satisfied by one of just two functions, one
which uses io_schedule() and one which just uses schedule().
So:
Rename wait_on_bit and wait_on_bit_lock to
wait_on_bit_action and wait_on_bit_lock_action
to make it explicit that they need an action function.
Introduce new wait_on_bit{,_lock} and wait_on_bit{,_lock}_io
which are *not* given an action function but implicitly use
a standard one.
The decision to error-out if a signal is pending is now made
based on the 'mode' argument rather than being encoded in the action
function.
All instances of the old wait_on_bit and wait_on_bit_lock which
can use the new version have been changed accordingly and their
action functions have been discarded.
wait_on_bit{_lock} does not return any specific error code in the
event of a signal so the caller must check for non-zero and
interpolate their own error code as appropriate.
The wait_on_bit() call in __fscache_wait_on_invalidate() was
ambiguous as it specified TASK_UNINTERRUPTIBLE but used
fscache_wait_bit_interruptible as an action function.
David Howells confirms this should be uniformly
"uninterruptible"
The main remaining user of wait_on_bit{,_lock}_action is NFS
which needs to use a freezer-aware schedule() call.
A comment in fs/gfs2/glock.c notes that having multiple 'action'
functions is useful as they display differently in the 'wchan'
field of 'ps'. (and /proc/$PID/wchan).
As the new bit_wait{,_io} functions are tagged "__sched", they
will not show up at all, but something higher in the stack. So
the distinction will still be visible, only with different
function names (gds2_glock_wait versus gfs2_glock_dq_wait in the
gfs2/glock.c case).
Since first version of this patch (against 3.15) two new action
functions appeared, on in NFS and one in CIFS. CIFS also now
uses an action function that makes the same freezer aware
schedule call as NFS.
Signed-off-by: NeilBrown <neilb@suse.de>
Acked-by: David Howells <dhowells@redhat.com> (fscache, keys)
Acked-by: Steven Whitehouse <swhiteho@redhat.com> (gfs2)
Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Steve French <sfrench@samba.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/20140707051603.28027.72349.stgit@notabene.brown
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2014-07-07 15:16:04 +10:00
|
|
|
|
2011-03-21 15:37:01 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-04-22 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
2010-05-26 08:42:11 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07: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
|
|
|
|
2010-02-19 17:03:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-25 14:09:54 -04:00
|
|
|
|
2013-08-19 18:59:33 -04: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-19 18:59:33 -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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-10-09 16:18:38 -04:00
|
|
|
|
2012-07-31 16:45:10 -07:00
|
|
|
|
2006-10-09 16:18:38 -04: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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|