2010-12-24 18:47:06

by Jesper Juhl

[permalink] [raw]
Subject: [PATCH] reiserfs: Make sure va_end() is always called after va_start().

Greetings,

A call to va_start() must always be followed by a call to va_end() in the
same function. In fs/reiserfs/prints.c::print_block() this is not always
the case. If 'bh' is NULL we'll return without calling va_end().
One could add a call to va_end() before the 'return' statement, but it's
nicer to just move the call to va_start() after the test for 'bh' being
NULL.

Signed-off-by: Jesper Juhl <[email protected]>
---
prints.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
index adbc6f5..45de98b 100644
--- a/fs/reiserfs/prints.c
+++ b/fs/reiserfs/prints.c
@@ -586,13 +586,13 @@ void print_block(struct buffer_head *bh, ...) //int print_mode, int first, int l
va_list args;
int mode, first, last;

- va_start(args, bh);
-
if (!bh) {
printk("print_block: buffer is NULL\n");
return;
}

+ va_start(args, bh);
+
mode = va_arg(args, int);
first = va_arg(args, int);
last = va_arg(args, int);



--
Jesper Juhl <[email protected]> http://www.chaosbits.net/
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please.


2010-12-24 22:13:45

by Edward Shishkin

[permalink] [raw]
Subject: Re: [PATCH] reiserfs: Make sure va_end() is always called after va_start().

Jesper Juhl wrote:
> Greetings,
>
> A call to va_start() must always be followed by a call to va_end() in the
> same function. In fs/reiserfs/prints.c::print_block() this is not always
> the case. If 'bh' is NULL we'll return without calling va_end().
> One could add a call to va_end() before the 'return' statement, but it's
> nicer to just move the call to va_start() after the test for 'bh' being
> NULL.
>
> Signed-off-by: Jesper Juhl <[email protected]>
>

Acked-by: Edward Shishkin <[email protected]>

> ---
> prints.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
> index adbc6f5..45de98b 100644
> --- a/fs/reiserfs/prints.c
> +++ b/fs/reiserfs/prints.c
> @@ -586,13 +586,13 @@ void print_block(struct buffer_head *bh, ...) //int print_mode, int first, int l
> va_list args;
> int mode, first, last;
>
> - va_start(args, bh);
> -
> if (!bh) {
> printk("print_block: buffer is NULL\n");
> return;
> }
>
> + va_start(args, bh);
> +
> mode = va_arg(args, int);
> first = va_arg(args, int);
> last = va_arg(args, int);
>
>
>
>