NFS: Ensure that we break out of read/write_schedule_segment on error
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 30 Apr 2012 17:22:54 +0000 (13:22 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 30 Apr 2012 18:33:51 +0000 (14:33 -0400)
Currently we do break out of the for() loop, but we also need to
break out of the enclosing do {} while()...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: Fred Isaman <iisaman@netapp.com>
fs/nfs/direct.c

index e83545c4d36f2fbee00eaed78179609a169d80ee..f30d5c26a763070a54101473d509551afc9fb80e 100644 (file)
@@ -396,7 +396,7 @@ static ssize_t nfs_direct_read_schedule_segment(struct nfs_pageio_descriptor *de
                        pos += req_len;
                        count -= req_len;
                }
-       } while (count != 0);
+       } while (count != 0 && result >= 0);
 
        kfree(pagevec);
 
@@ -692,6 +692,7 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_pageio_descriptor *d
                                nfs_release_request(req);
                                nfs_direct_release_pages(pagevec + i,
                                                         npages - i);
+                               break;
                        }
                        pgbase = 0;
                        bytes -= req_len;
@@ -700,7 +701,7 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_pageio_descriptor *d
                        pos += req_len;
                        count -= req_len;
                }
-       } while (count != 0);
+       } while (count != 0 && result >= 0);
 
        kfree(pagevec);