NeilBrown f16b6e8d83 sunrpc/cache: allow threads to block while waiting for cache update.
The current practice of waiting for cache updates by queueing the
whole request to be retried has (at least) two problems.

1/ With NFSv4, requests can be quite complex and re-trying a whole
  request when a later part fails should only be a last-resort, not a
  normal practice.

2/ Large requests, and in particular any 'write' request, will not be
  queued by the current code and doing so would be undesirable.

In many cases only a very sort wait is needed before the cache gets
valid data.

So, providing the underlying transport permits it by setting
 ->thread_wait,
arrange to wait briefly for an upcall to be completed (as reflected in
the clearing of CACHE_PENDING).
If the short wait was not long enough and CACHE_PENDING is still set,
fall back on the old approach.

The 'thread_wait' value is set to 5 seconds when there are spare
threads, and 1 second when there are no spare threads.

These values are probably much higher than needed, but will ensure
some forward progress.

Note that as we only request an update for a non-valid item, and as
non-valid items are updated in place it is extremely unlikely that
cache_check will return -ETIMEDOUT.  Normally cache_defer_req will
sleep for a short while and then find that the item is_valid.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2010-09-07 19:22:07 -04:00
..
2010-08-02 14:28:36 -05:00
2010-08-04 21:53:17 -07:00
2010-08-26 15:18:27 -07:00
2010-07-18 15:07:14 -07:00
2010-06-11 18:37:08 -07:00
2010-08-23 14:41:22 -07:00
2010-08-19 00:41:52 -07:00
2010-06-03 03:21:52 -07:00
2010-05-17 23:23:13 -07:00
2010-08-18 23:35:58 -07:00
2010-04-20 16:37:13 -07:00
2010-08-18 23:40:03 -07:00
2010-08-01 00:32:12 -07:00
2010-05-17 17:39:28 -07:00