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: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
f805442e13
commit
ad147d011f
|
@ -71,59 +71,55 @@ __proc_file_read(struct file *file, char __user *buf, size_t nbytes,
|
||||||
count = min_t(size_t, PROC_BLOCK_SIZE, nbytes);
|
count = min_t(size_t, PROC_BLOCK_SIZE, nbytes);
|
||||||
|
|
||||||
start = NULL;
|
start = NULL;
|
||||||
if (dp->read_proc) {
|
if (!dp->read_proc)
|
||||||
/*
|
|
||||||
* How to be a proc read function
|
|
||||||
* ------------------------------
|
|
||||||
* Prototype:
|
|
||||||
* int f(char *buffer, char **start, off_t offset,
|
|
||||||
* int count, int *peof, void *dat)
|
|
||||||
*
|
|
||||||
* Assume that the buffer is "count" bytes in size.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
* (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
|
|
||||||
* absorbed.
|
|
||||||
*/
|
|
||||||
n = dp->read_proc(page, &start, *ppos,
|
|
||||||
count, &eof, dp->data);
|
|
||||||
} else
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* How to be a proc read function
|
||||||
|
* ------------------------------
|
||||||
|
* Prototype:
|
||||||
|
* int f(char *buffer, char **start, off_t offset,
|
||||||
|
* int count, int *peof, void *dat)
|
||||||
|
*
|
||||||
|
* Assume that the buffer is "count" bytes in size.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* (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
|
||||||
|
* absorbed.
|
||||||
|
*/
|
||||||
|
n = dp->read_proc(page, &start, *ppos, count, &eof, dp->data);
|
||||||
|
|
||||||
if (n == 0) /* end of file */
|
if (n == 0) /* end of file */
|
||||||
break;
|
break;
|
||||||
if (n < 0) { /* error */
|
if (n < 0) { /* error */
|
||||||
|
|
Loading…
Reference in New Issue