2006-08-20 10:45:28

by Oleg Nesterov

[permalink] [raw]
Subject: [PATCH] sys_ioprio_set: minor do_each_thread+break fix

>From include/linux/sched.h:
/*
* Careful: do_each_thread/while_each_thread is a double loop so
* 'break' will not work as expected - use goto instead.
*/

Signed-off-by: Oleg Nesterov <[email protected]>

--- 2.6.18-rc4/fs/ioprio.c~2_break 2006-07-16 01:53:08.000000000 +0400
+++ 2.6.18-rc4/fs/ioprio.c 2006-08-20 18:57:38.000000000 +0400
@@ -111,9 +111,9 @@ asmlinkage long sys_ioprio_set(int which
continue;
ret = set_task_ioprio(p, ioprio);
if (ret)
- break;
+ goto free_uid;
} while_each_thread(g, p);
-
+free_uid:
if (who)
free_uid(user);
break;


2006-08-21 06:26:21

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] sys_ioprio_set: minor do_each_thread+break fix

On Sun, Aug 20 2006, Oleg Nesterov wrote:
> From include/linux/sched.h:
> /*
> * Careful: do_each_thread/while_each_thread is a double loop so
> * 'break' will not work as expected - use goto instead.
> */
>
> Signed-off-by: Oleg Nesterov <[email protected]>
>
> --- 2.6.18-rc4/fs/ioprio.c~2_break 2006-07-16 01:53:08.000000000 +0400
> +++ 2.6.18-rc4/fs/ioprio.c 2006-08-20 18:57:38.000000000 +0400
> @@ -111,9 +111,9 @@ asmlinkage long sys_ioprio_set(int which
> continue;
> ret = set_task_ioprio(p, ioprio);
> if (ret)
> - break;
> + goto free_uid;
> } while_each_thread(g, p);
> -
> +free_uid:
> if (who)
> free_uid(user);
> break;

Good catch, applied!

--
Jens Axboe