From: Oleg Nesterov This lock is used in sigqueue_free(), but it is always equal to current->sighand->siglock, so we don't need to keep it in the struct sigqueue. Signed-off-by: Oleg Nesterov Signed-off-by: Andrew Morton --- include/linux/signal.h | 1 - kernel/signal.c | 10 ++++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff -puN include/linux/signal.h~kill-sigqueue-lock include/linux/signal.h --- devel/include/linux/signal.h~kill-sigqueue-lock 2005-10-11 00:34:48.000000000 -0700 +++ devel-akpm/include/linux/signal.h 2005-10-11 00:34:48.000000000 -0700 @@ -25,7 +25,6 @@ struct sigqueue { struct list_head list; - spinlock_t *lock; int flags; siginfo_t info; struct user_struct *user; diff -puN kernel/signal.c~kill-sigqueue-lock kernel/signal.c --- devel/kernel/signal.c~kill-sigqueue-lock 2005-10-11 00:34:48.000000000 -0700 +++ devel-akpm/kernel/signal.c 2005-10-11 00:34:48.000000000 -0700 @@ -277,7 +277,6 @@ static struct sigqueue *__sigqueue_alloc } else { INIT_LIST_HEAD(&q->list); q->flags = 0; - q->lock = NULL; q->user = get_uid(t->user); } return(q); @@ -1381,11 +1380,12 @@ void sigqueue_free(struct sigqueue *q) * pending queue. */ if (unlikely(!list_empty(&q->list))) { - read_lock(&tasklist_lock); - spin_lock_irqsave(q->lock, flags); + spinlock_t *lock = ¤t->sighand->siglock; + read_lock(&tasklist_lock); + spin_lock_irqsave(lock, flags); if (!list_empty(&q->list)) list_del_init(&q->list); - spin_unlock_irqrestore(q->lock, flags); + spin_unlock_irqrestore(lock, flags); read_unlock(&tasklist_lock); } q->flags &= ~SIGQUEUE_PREALLOC; @@ -1416,7 +1416,6 @@ send_sigqueue(int sig, struct sigqueue * goto out; } - q->lock = &p->sighand->siglock; list_add_tail(&q->list, &p->pending.list); sigaddset(&p->pending.signal, sig); if (!sigismember(&p->blocked, sig)) @@ -1459,7 +1458,6 @@ send_group_sigqueue(int sig, struct sigq * We always use the shared queue for process-wide signals, * to avoid several races. */ - q->lock = &p->sighand->siglock; list_add_tail(&q->list, &p->signal->shared_pending.list); sigaddset(&p->signal->shared_pending.signal, sig); _