[PATCH] generic_file_aio_read cleanups

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Andrew Morton <akpm@...>
Cc: <hans-christoph.rohland@...>, <leg@...>, <pbadari@...>, <harvey.harrison@...>, <zach.brown@...>, <linux-kernel@...>
Date: Thursday, May 29, 2008 - 4:54 pm

As akpm points out, there's really no need for generic_file_aio_read to
make a special case of count 0: just loop through nr_segs doing nothing.
And as Harvey Harrison points out, there's no need to reset retval to 0
where it's already 0.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
---
Setting count (or ocount) to 0 before calling generic_segment_checks is
unnecessary too; but reluctantly I'll leave that removal to someone with
a wider range of gcc versions to hand - 4.1.2 and 4.2.1 don't warn about
it, but perhaps others do - I forget which are the warniest versions.

 mm/filemap.c |   44 ++++++++++++++++++++------------------------
 1 file changed, 20 insertions(+), 24 deletions(-)

--- 2.6.26-rc4/mm/filemap.c	2008-05-19 11:19:03.000000000 +0100
+++ linux/mm/filemap.c	2008-05-29 21:31:55.000000000 +0100
@@ -1199,7 +1199,6 @@ generic_file_aio_read(struct kiocb *iocb
 
 		mapping = filp->f_mapping;
 		inode = mapping->host;
-		retval = 0;
 		if (!count)
 			goto out; /* skip atime */
 		size = i_size_read(inode);
@@ -1208,33 +1207,30 @@ generic_file_aio_read(struct kiocb *iocb
 						iov, pos, nr_segs);
 			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;
-
-			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;
+	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;
 	}
 out:
 	return retval;
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] tmpfs: support aio, Hugh Dickins, (Wed May 28, 7:13 pm)
Re: [PATCH] tmpfs: support aio, Andrew Morton, (Wed May 28, 7:58 pm)
Re: [PATCH] tmpfs: support aio, Hugh Dickins, (Thu May 29, 2:20 pm)
[PATCH] generic_file_aio_read cleanups, Hugh Dickins, (Thu May 29, 4:54 pm)
[PATCH v2] tmpfs: support aio, Hugh Dickins, (Thu May 29, 4:57 pm)
Re: [PATCH] tmpfs: support aio, Harvey Harrison, (Wed May 28, 8:06 pm)
Re: [PATCH] tmpfs: support aio, Hugh Dickins, (Thu May 29, 2:24 pm)