浏览代码

NFS: Ensure that we break out of read/write_schedule_segment on error

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>
Trond Myklebust 13 年之前
父节点
当前提交
71e8cc00c6
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3 2
      fs/nfs/direct.c

+ 3 - 2
fs/nfs/direct.c

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