forked from luck/tmp_suning_uos_patched
cifs_iovec_read(): resubmit shouldn't restart the loop
... by that point the request we'd just resent is in the head of the list anyway. Just return to the beginning of the loop body... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
6e58e79db8
commit
74027f4a18
|
@ -2918,8 +2918,8 @@ cifs_iovec_read(struct file *file, const struct iovec *iov,
|
|||
rc = 0;
|
||||
|
||||
/* the loop below should proceed in the order of increasing offsets */
|
||||
restart_loop:
|
||||
list_for_each_entry_safe(rdata, tmp, &rdata_list, list) {
|
||||
again:
|
||||
if (!rc) {
|
||||
ssize_t copied;
|
||||
|
||||
|
@ -2927,20 +2927,20 @@ cifs_iovec_read(struct file *file, const struct iovec *iov,
|
|||
rc = wait_for_completion_killable(&rdata->done);
|
||||
if (rc)
|
||||
rc = -EINTR;
|
||||
else if (rdata->result)
|
||||
else if (rdata->result) {
|
||||
rc = rdata->result;
|
||||
else {
|
||||
/* resend call if it's a retryable error */
|
||||
if (rc == -EAGAIN) {
|
||||
rc = cifs_retry_async_readv(rdata);
|
||||
goto again;
|
||||
}
|
||||
} else {
|
||||
rc = cifs_readdata_to_iov(rdata, iov,
|
||||
nr_segs, *poffset,
|
||||
&copied);
|
||||
total_read += copied;
|
||||
}
|
||||
|
||||
/* resend call if it's a retryable error */
|
||||
if (rc == -EAGAIN) {
|
||||
rc = cifs_retry_async_readv(rdata);
|
||||
goto restart_loop;
|
||||
}
|
||||
}
|
||||
list_del_init(&rdata->list);
|
||||
kref_put(&rdata->refcount, cifs_uncached_readdata_release);
|
||||
|
|
Loading…
Reference in New Issue
Block a user