public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] workqueue: fix double unlock bug
@ 2014-04-14  0:58 Daeseok Youn
  2014-04-14  6:50 ` Lai Jiangshan
  0 siblings, 1 reply; 3+ messages in thread
From: Daeseok Youn @ 2014-04-14  0:58 UTC (permalink / raw)
  To: tj; +Cc: linux-kernel


mutex_unlock() and put_pwq_unlocked() do not need to be called
when alloc_unbound_pwq() is failed.

Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
---
 kernel/workqueue.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 0ee63af..e6e9f6a 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -4100,7 +4100,7 @@ static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu,
 	if (!pwq) {
 		pr_warning("workqueue: allocation failed while updating NUMA affinity of \"%s\"\n",
 			   wq->name);
-		goto out_unlock;
+		return;
 	}
 
 	/*
-- 
1.7.4.4



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] workqueue: fix double unlock bug
  2014-04-14  0:58 [PATCH] workqueue: fix double unlock bug Daeseok Youn
@ 2014-04-14  6:50 ` Lai Jiangshan
  2014-04-14  7:58   ` DaeSeok Youn
  0 siblings, 1 reply; 3+ messages in thread
From: Lai Jiangshan @ 2014-04-14  6:50 UTC (permalink / raw)
  To: Daeseok Youn; +Cc: tj, linux-kernel

On 04/14/2014 08:58 AM, Daeseok Youn wrote:
> 
> mutex_unlock() and put_pwq_unlocked() do not need to be called
> when alloc_unbound_pwq() is failed.
> 
> Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> ---
>  kernel/workqueue.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index 0ee63af..e6e9f6a 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -4100,7 +4100,7 @@ static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu,
>  	if (!pwq) {
>  		pr_warning("workqueue: allocation failed while updating NUMA affinity of \"%s\"\n",
>  			   wq->name);
> -		goto out_unlock;
> +		return;
>  	}
>  
>  	/*


Nice catch!!!

The supposed correct behavior is documented in the head of
this function. We forgot to do it.

 * If NUMA affinity can't be adjusted due to memory allocation failure, it
 * falls back to @wq->dfl_pwq which may not be optimal but is always
 * correct.

Could you use the following code instead of "goto out_unlock":
		mutex_lock(&wq->mutex);
		if (pwq == wq->dfl_pwq)
			goto out_unlock;
		else
			goto use_dfl_pwq;

Correct&BAD. There are two blocks of suck code in this function:
		if (pwq == wq->dfl_pwq)
			goto out_unlock;
		else
			goto use_dfl_pwq;

You can replace both these two blocks code to the following code:
		goto use_dfl_pwq;

The result is the same as before except it adds some small overhead.
I don't care the small overhead in this function.

Thanks
Lai
		

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] workqueue: fix double unlock bug
  2014-04-14  6:50 ` Lai Jiangshan
@ 2014-04-14  7:58   ` DaeSeok Youn
  0 siblings, 0 replies; 3+ messages in thread
From: DaeSeok Youn @ 2014-04-14  7:58 UTC (permalink / raw)
  To: Lai Jiangshan; +Cc: tj, linux-kernel

2014-04-14 15:50 GMT+09:00 Lai Jiangshan <laijs@cn.fujitsu.com>:
> On 04/14/2014 08:58 AM, Daeseok Youn wrote:
>>
>> mutex_unlock() and put_pwq_unlocked() do not need to be called
>> when alloc_unbound_pwq() is failed.
>>
>> Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
>> ---
>>  kernel/workqueue.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
>> index 0ee63af..e6e9f6a 100644
>> --- a/kernel/workqueue.c
>> +++ b/kernel/workqueue.c
>> @@ -4100,7 +4100,7 @@ static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu,
>>       if (!pwq) {
>>               pr_warning("workqueue: allocation failed while updating NUMA affinity of \"%s\"\n",
>>                          wq->name);
>> -             goto out_unlock;
>> +             return;
>>       }
>>
>>       /*
>
>
> Nice catch!!!
>
> The supposed correct behavior is documented in the head of
> this function. We forgot to do it.
>
>  * If NUMA affinity can't be adjusted due to memory allocation failure, it
>  * falls back to @wq->dfl_pwq which may not be optimal but is always
>  * correct.
>
> Could you use the following code instead of "goto out_unlock":
>                 mutex_lock(&wq->mutex);
>                 if (pwq == wq->dfl_pwq)
>                         goto out_unlock;
>                 else
>                         goto use_dfl_pwq;
>
> Correct&BAD. There are two blocks of suck code in this function:
>                 if (pwq == wq->dfl_pwq)
>                         goto out_unlock;
>                 else
>                         goto use_dfl_pwq;
>
> You can replace both these two blocks code to the following code:
>                 goto use_dfl_pwq;
OK. I will remove that "if-else" condition and just use "goto use_dfl_pwq" and
send this patch as V2.

Thanks.
Daeseok Youn
>
> The result is the same as before except it adds some small overhead.
> I don't care the small overhead in this function.
>
> Thanks
> Lai
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-04-14  7:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-14  0:58 [PATCH] workqueue: fix double unlock bug Daeseok Youn
2014-04-14  6:50 ` Lai Jiangshan
2014-04-14  7:58   ` DaeSeok Youn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox