diff options
author | Weston Andros Adamson <dros@primarydata.com> | 2014-07-17 20:42:15 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-08-03 17:05:24 -0400 |
commit | e7029206ff43f6cf7d6fcb741adb126f47200516 (patch) | |
tree | 177e5c715690fdc397a2054c48ec61b9b5cbbea4 /fs/nfs/write.c | |
parent | ec25422c669d38f4e8a83da7f77950094349de48 (diff) |
nfs: check wait_on_bit_lock err in page_group_lock
Return errors from wait_on_bit_lock from nfs_page_group_lock.
Add a bool argument @wait to nfs_page_group_lock. If true, loop over
wait_on_bit_lock until it returns cleanly. If false, return the error
from wait_on_bit_lock.
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r-- | fs/nfs/write.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index d357728ed8ba..8d1ed2b9c16c 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -216,7 +216,7 @@ static bool nfs_page_group_covers_page(struct nfs_page *req) | |||
216 | unsigned int pos = 0; | 216 | unsigned int pos = 0; |
217 | unsigned int len = nfs_page_length(req->wb_page); | 217 | unsigned int len = nfs_page_length(req->wb_page); |
218 | 218 | ||
219 | nfs_page_group_lock(req); | 219 | nfs_page_group_lock(req, true); |
220 | 220 | ||
221 | do { | 221 | do { |
222 | tmp = nfs_page_group_search_locked(req->wb_head, pos); | 222 | tmp = nfs_page_group_search_locked(req->wb_head, pos); |
@@ -456,7 +456,9 @@ try_again: | |||
456 | } | 456 | } |
457 | 457 | ||
458 | /* lock each request in the page group */ | 458 | /* lock each request in the page group */ |
459 | nfs_page_group_lock(head); | 459 | ret = nfs_page_group_lock(head, false); |
460 | if (ret < 0) | ||
461 | return ERR_PTR(ret); | ||
460 | subreq = head; | 462 | subreq = head; |
461 | do { | 463 | do { |
462 | /* | 464 | /* |