From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751943AbbJYOa7 (ORCPT ); Sun, 25 Oct 2015 10:30:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53130 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751530AbbJYOaS (ORCPT ); Sun, 25 Oct 2015 10:30:18 -0400 Date: Sun, 25 Oct 2015 16:26:41 +0100 From: Oleg Nesterov To: Andrew Morton , Markus Pargmann Cc: nbd-general@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: [PATCH -mm 3/3] nbd: don't abuse irqsave/irqrestore while taking nbd->tasks_lock Message-ID: <20151025152641.GA1405@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151025152625.GA1385@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Both nbd_thread_recv() and nbd_thread_send() are might_sleep() and called with irqs enabled(), irqsave/irqrestore make no sense and imo look confusing. Signed-off-by: Oleg Nesterov --- drivers/block/nbd.c | 22 ++++++++++------------ 1 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 0ffd73c..fd79405 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -406,23 +406,22 @@ static int nbd_thread_recv(struct nbd_device *nbd) { struct request *req; int ret; - unsigned long flags; BUG_ON(nbd->magic != NBD_MAGIC); sk_set_memalloc(nbd->sock->sk); - spin_lock_irqsave(&nbd->tasks_lock, flags); + spin_lock_irq(&nbd->tasks_lock); nbd->task_recv = current; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); + spin_unlock_irq(&nbd->tasks_lock); ret = device_create_file(disk_to_dev(nbd->disk), &pid_attr); if (ret) { dev_err(disk_to_dev(nbd->disk), "device_create_file failed!\n"); - spin_lock_irqsave(&nbd->tasks_lock, flags); + spin_lock_irq(&nbd->tasks_lock); nbd->task_recv = NULL; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); + spin_unlock_irq(&nbd->tasks_lock); return ret; } @@ -439,9 +438,9 @@ static int nbd_thread_recv(struct nbd_device *nbd) device_remove_file(disk_to_dev(nbd->disk), &pid_attr); - spin_lock_irqsave(&nbd->tasks_lock, flags); + spin_lock_irq(&nbd->tasks_lock); nbd->task_recv = NULL; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); + spin_unlock_irq(&nbd->tasks_lock); if (signal_pending(current)) { dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal", @@ -543,11 +542,10 @@ static int nbd_thread_send(void *data) { struct nbd_device *nbd = data; struct request *req; - unsigned long flags; - spin_lock_irqsave(&nbd->tasks_lock, flags); + spin_lock_irq(&nbd->tasks_lock); nbd->task_send = current; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); + spin_unlock_irq(&nbd->tasks_lock); set_user_nice(current, MIN_NICE); while (!kthread_should_stop() || !list_empty(&nbd->waiting_queue)) { @@ -581,9 +579,9 @@ static int nbd_thread_send(void *data) nbd_handle_req(nbd, req); } - spin_lock_irqsave(&nbd->tasks_lock, flags); + spin_lock_irq(&nbd->tasks_lock); nbd->task_send = NULL; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); + spin_unlock_irq(&nbd->tasks_lock); return 0; } -- 1.5.5.1