lkml.org 
[lkml]   [2021]   [May]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH] locking/mutex: clear MUTEX_FLAGS if wait_list is empty due to signal
Date
On 5/14/21 10:30 PM, qiang.zhang@windriver.com wrote:
> From: Zqiang <qiang.zhang@windriver.com>
>
> Clear MUTEX_FLAGS when call mutex_lock_interruptible()
> interrupted by a signal and the lock->wait_list is empty.
>
> Signed-off-by: Zqiang <qiang.zhang@windriver.com>
> ---
> kernel/locking/mutex.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
> index cb6b112ce155..4ac354ca092b 100644
> --- a/kernel/locking/mutex.c
> +++ b/kernel/locking/mutex.c
> @@ -1081,6 +1081,8 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
> err:
> __set_current_state(TASK_RUNNING);
> mutex_remove_waiter(lock, &waiter, current);
> + if (likely(list_empty(&lock->wait_list)))
> + __mutex_clear_flag(lock, MUTEX_FLAGS);
> err_early_kill:
> spin_unlock(&lock->wait_lock);
> debug_mutex_free_waiter(&waiter);

I can see that the error path is missing the flag clearing code. As
Peter had said, you have to be more clear of what problem you are trying
to fix. Do you have any reproducer? How often do you see this kind of
problem?

Cheers,
Longman

\
 
 \ /
  Last update: 2021-05-15 21:03    [W:0.097 / U:0.600 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site