CIFS: Count got bytes in read_into_pages()
authorPavel Shilovsky <pshilovsky@samba.org>
Thu, 10 Jul 2014 06:16:25 +0000 (10:16 +0400)
committerSteve French <smfrench@gmail.com>
Sat, 2 Aug 2014 06:23:04 +0000 (01:23 -0500)
that let us know how many bytes we have already got before reconnect.

Signed-off-by: Pavel Shilovsky <pshilovsky@samba.org>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/cifssmb.c
fs/cifs/file.c

index 1781a03aed5ed5b18245356443c1c545befbcf33..57d447c56d8367247cc9dc148e525fb1b7b8a2f2 100644 (file)
@@ -1513,7 +1513,6 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
                return length;
 
        server->total_read += length;
-       rdata->got_bytes = length;
 
        cifs_dbg(FYI, "total_read=%u buflen=%u remaining=%u\n",
                 server->total_read, buflen, data_len);
index 3d5d488385197c74e88fdbd4c2e94d297743998d..3ea6fc86a4718550655d61f9940b1a8c57049a4f 100644 (file)
@@ -2868,11 +2868,12 @@ static int
 cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
                        struct cifs_readdata *rdata, unsigned int len)
 {
-       int total_read = 0, result = 0;
+       int result = 0;
        unsigned int i;
        unsigned int nr_pages = rdata->nr_pages;
        struct kvec iov;
 
+       rdata->got_bytes = 0;
        rdata->tailsz = PAGE_SIZE;
        for (i = 0; i < nr_pages; i++) {
                struct page *page = rdata->pages[i];
@@ -2906,10 +2907,11 @@ cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
                if (result < 0)
                        break;
 
-               total_read += result;
+               rdata->got_bytes += result;
        }
 
-       return total_read > 0 && result != -ECONNABORTED ? total_read : result;
+       return rdata->got_bytes > 0 && result != -ECONNABORTED ?
+                                               rdata->got_bytes : result;
 }
 
 static int
@@ -3290,7 +3292,7 @@ static int
 cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
                        struct cifs_readdata *rdata, unsigned int len)
 {
-       int total_read = 0, result = 0;
+       int result = 0;
        unsigned int i;
        u64 eof;
        pgoff_t eof_index;
@@ -3302,6 +3304,7 @@ cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
        eof_index = eof ? (eof - 1) >> PAGE_CACHE_SHIFT : 0;
        cifs_dbg(FYI, "eof=%llu eof_index=%lu\n", eof, eof_index);
 
+       rdata->got_bytes = 0;
        rdata->tailsz = PAGE_CACHE_SIZE;
        for (i = 0; i < nr_pages; i++) {
                struct page *page = rdata->pages[i];
@@ -3356,10 +3359,11 @@ cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
                if (result < 0)
                        break;
 
-               total_read += result;
+               rdata->got_bytes += result;
        }
 
-       return total_read > 0 && result != -ECONNABORTED ? total_read : result;
+       return rdata->got_bytes > 0 && result != -ECONNABORTED ?
+                                               rdata->got_bytes : result;
 }
 
 static int