Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad147d01 authored by David Howells's avatar David Howells Committed by Al Viro
Browse files

procfs: Clean up huge if-statement in __proc_file_read()



Switch huge if-statement in __proc_file_read() around.  This then puts the
single line loop break immediately after the if-statement and allows us to
de-indent the huge comment and make it take fewer lines.  The code following
the if-statement then follows naturally from the call to dp->read_proc().

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent f805442e
Loading
Loading
Loading
Loading
+47 −51
Original line number Diff line number Diff line
@@ -71,9 +71,10 @@ __proc_file_read(struct file *file, char __user *buf, size_t nbytes,
		count = min_t(size_t, PROC_BLOCK_SIZE, nbytes);

		start = NULL;
		if (dp->read_proc) {
			/*
			 * How to be a proc read function
		if (!dp->read_proc)
			break;

		/* How to be a proc read function
		 * ------------------------------
		 * Prototype:
		 *    int f(char *buffer, char **start, off_t offset,
@@ -81,48 +82,43 @@ __proc_file_read(struct file *file, char __user *buf, size_t nbytes,
		 *
		 * Assume that the buffer is "count" bytes in size.
		 *
			 * If you know you have supplied all the data you
			 * have, set *peof.
		 * If you know you have supplied all the data you have, set
		 * *peof.
		 *
		 * You have three ways to return data:
			 * 0) Leave *start = NULL.  (This is the default.)
			 *    Put the data of the requested offset at that
			 *    offset within the buffer.  Return the number (n)
			 *    of bytes there are from the beginning of the
			 *    buffer up to the last byte of data.  If the
			 *    number of supplied bytes (= n - offset) is 
			 *    greater than zero and you didn't signal eof
			 *    and the reader is prepared to take more data
			 *    you will be called again with the requested
			 *    offset advanced by the number of bytes 
			 *    absorbed.  This interface is useful for files
			 *    no larger than the buffer.
			 * 1) Set *start = an unsigned long value less than
			 *    the buffer address but greater than zero.
			 *    Put the data of the requested offset at the
			 *    beginning of the buffer.  Return the number of
			 *    bytes of data placed there.  If this number is
			 *    greater than zero and you didn't signal eof
			 *    and the reader is prepared to take more data
			 *    you will be called again with the requested
			 *    offset advanced by *start.  This interface is
			 *    useful when you have a large file consisting
			 *    of a series of blocks which you want to count
			 *    and return as wholes.
		 *
		 * 0) Leave *start = NULL.  (This is the default.)  Put the
		 *    data of the requested offset at that offset within the
		 *    buffer.  Return the number (n) of bytes there are from
		 *    the beginning of the buffer up to the last byte of data.
		 *    If the number of supplied bytes (= n - offset) is greater
		 *    than zero and you didn't signal eof and the reader is
		 *    prepared to take more data you will be called again with
		 *    the requested offset advanced by the number of bytes
		 *    absorbed.  This interface is useful for files no larger
		 *    than the buffer.
		 *
		 * 1) Set *start = an unsigned long value less than the buffer
		 *    address but greater than zero.  Put the data of the
		 *    requested offset at the beginning of the buffer.  Return
		 *    the number of bytes of data placed there.  If this number
		 *    is greater than zero and you didn't signal eof and the
		 *    reader is prepared to take more data you will be called
		 *    again with the requested offset advanced by *start.  This
		 *    interface is useful when you have a large file consisting
		 *    of a series of blocks which you want to count and return
		 *    as wholes.
		 *    (Hack by Paul.Russell@rustcorp.com.au)
			 * 2) Set *start = an address within the buffer.
			 *    Put the data of the requested offset at *start.
			 *    Return the number of bytes of data placed there.
			 *    If this number is greater than zero and you
			 *    didn't signal eof and the reader is prepared to
			 *    take more data you will be called again with the
			 *    requested offset advanced by the number of bytes
		 *
		 * 2) Set *start = an address within the buffer.  Put the data
		 *    of the requested offset at *start.  Return the number of
		 *    bytes of data placed there.  If this number is greater
		 *    than zero and you didn't signal eof and the reader is
		 *    prepared to take more data you will be called again with
		 *    the requested offset advanced by the number of bytes
		 *    absorbed.
		 */
			n = dp->read_proc(page, &start, *ppos,
					  count, &eof, dp->data);
		} else
			break;
		n = dp->read_proc(page, &start, *ppos, count, &eof, dp->data);

		if (n == 0)   /* end of file */
			break;