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

Reply via email to