|
@@ -1197,7 +1197,6 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
|
|
|
|
|
mapping = filp->f_mapping;
|
|
|
inode = mapping->host;
|
|
|
- retval = 0;
|
|
|
if (!count)
|
|
|
goto out; /* skip atime */
|
|
|
size = i_size_read(inode);
|
|
@@ -1209,33 +1208,30 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
|
|
}
|
|
|
if (retval > 0)
|
|
|
*ppos = pos + retval;
|
|
|
- }
|
|
|
- if (likely(retval != 0)) {
|
|
|
- file_accessed(filp);
|
|
|
- goto out;
|
|
|
+ if (retval) {
|
|
|
+ file_accessed(filp);
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- retval = 0;
|
|
|
- if (count) {
|
|
|
- for (seg = 0; seg < nr_segs; seg++) {
|
|
|
- read_descriptor_t desc;
|
|
|
+ for (seg = 0; seg < nr_segs; seg++) {
|
|
|
+ read_descriptor_t desc;
|
|
|
|
|
|
- desc.written = 0;
|
|
|
- desc.arg.buf = iov[seg].iov_base;
|
|
|
- desc.count = iov[seg].iov_len;
|
|
|
- if (desc.count == 0)
|
|
|
- continue;
|
|
|
- desc.error = 0;
|
|
|
- do_generic_file_read(filp,ppos,&desc,file_read_actor);
|
|
|
- retval += desc.written;
|
|
|
- if (desc.error) {
|
|
|
- retval = retval ?: desc.error;
|
|
|
- break;
|
|
|
- }
|
|
|
- if (desc.count > 0)
|
|
|
- break;
|
|
|
+ desc.written = 0;
|
|
|
+ desc.arg.buf = iov[seg].iov_base;
|
|
|
+ desc.count = iov[seg].iov_len;
|
|
|
+ if (desc.count == 0)
|
|
|
+ continue;
|
|
|
+ desc.error = 0;
|
|
|
+ do_generic_file_read(filp, ppos, &desc, file_read_actor);
|
|
|
+ retval += desc.written;
|
|
|
+ if (desc.error) {
|
|
|
+ retval = retval ?: desc.error;
|
|
|
+ break;
|
|
|
}
|
|
|
+ if (desc.count > 0)
|
|
|
+ break;
|
|
|
}
|
|
|
out:
|
|
|
return retval;
|