Signed-off-by: Pavel Shilovsky <[email protected]>
---
fs/cifs/file.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 2927f02..6896cb5 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -3026,28 +3026,27 @@ again:
rc = wait_for_completion_killable(&rdata->done);
if (rc)
rc = -EINTR;
- else if (rdata->result) {
- rc = rdata->result;
+ else if (rdata->result == -EAGAIN) {
/* resend call if it's a retryable error */
- if (rc == -EAGAIN) {
- struct list_head tmp_list;
+ struct list_head tmp_list;
- list_del_init(&rdata->list);
- INIT_LIST_HEAD(&tmp_list);
+ list_del_init(&rdata->list);
+ INIT_LIST_HEAD(&tmp_list);
- rc = cifs_send_async_read(rdata->offset,
+ rc = cifs_send_async_read(rdata->offset,
rdata->bytes, rdata->cfile,
cifs_sb, &tmp_list);
- list_splice(&tmp_list, &rdata_list);
+ list_splice(&tmp_list, &rdata_list);
- kref_put(&rdata->refcount,
- cifs_uncached_readdata_release);
- goto again;
- }
- } else {
+ kref_put(&rdata->refcount,
+ cifs_uncached_readdata_release);
+ goto again;
+ } else if (rdata->result)
+ rc = rdata->result;
+ else
rc = cifs_readdata_to_iov(rdata, to);
- }
+
/* if there was a short read -- discard anything left */
if (rdata->got_bytes && rdata->got_bytes < rdata->bytes)
rc = -ENODATA;
--
1.8.1.2
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html