Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3123220imm; Fri, 20 Jul 2018 10:31:20 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfnY+rcxIzOiLdTJdsloPeVjrPHu1yppJO4eAX3jT+SkQR4kA65gRLAYkHAvukyvr8hGY38 X-Received: by 2002:a63:d401:: with SMTP id a1-v6mr2871181pgh.414.1532107880301; Fri, 20 Jul 2018 10:31:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532107880; cv=none; d=google.com; s=arc-20160816; b=J1Gazc3dXhntLyHHSZ2b+RZa6lUt0W5WTtwDA11+w/8XIFhzl3Qh94runjsjklG8hy EpjYw1outx0jN9MsvUECb9ofasKvTvogxB6Wc8JVP445qvHvI72UlVFMMbTKWctas7fI 7Pa/XcOWL0fLzB+vnmaigDBT0iwZs+swW/weyzYllnlX1Z2aOQ4R8FJ2QVps6dfjGt71 w6D49Ireq6a4OXCKcr6HW14brFZcSSwYNzUzXKdzfE9LvRHHqueaYK0oqtdnmwFJxxaS OeZa9HcCzg/N3LYo0nan3+t+YOIidQgEJtGSoK2c8e/EN1zcuCAec9ZXXe/ubC0unGUg oc2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=D5tCUapt0qVbDcgPMP6YozDhvAmzPfoDIkX1jajw6RM=; b=fe1GGvn41/dy1XSf3J93cvASKmCAx7feZfD86MUbjGdfZ7h0+yI3i5dO4hOtboTtIE ScPFP+Iog1KOKfX3UFyBjvE03iPM4DJ5k2QQ9dCTX4TRUXfPjajHho5MBUsv5i6cm6mH ipMj2SgScZA8XYeVVu0GgF1rskepHPDql43Cb6wY7uFH3WqLTA7xLqVzJWKvnNdVI7Xf QAwgqjgNwJXQgI+3S0n+/vSB0ErlmTuJ6rpE//WmR/NGluu1DK0hCROtFvihA7BO1dxT PyN4CHtRsEX8Iaz2XpGn2t/mCfWgxFYe8leyFjaNJb+zEelJnPJEcxfDSZAVg/Ym3wUh FE1g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l88-v6si2233503pfi.179.2018.07.20.10.31.05; Fri, 20 Jul 2018 10:31:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388209AbeGTSTp (ORCPT + 99 others); Fri, 20 Jul 2018 14:19:45 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:57339 "EHLO smtp2.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387868AbeGTSTk (ORCPT ); Fri, 20 Jul 2018 14:19:40 -0400 Received: from linux-r8p5.suse.de (prv-ext-foundry1int.gns.novell.com [137.65.251.240]) by smtp2.provo.novell.com with ESMTP (TLS encrypted); Fri, 20 Jul 2018 11:30:19 -0600 From: Davidlohr Bueso To: akpm@linux-foundation.org Cc: jbaron@akamai.com, viro@zeniv.linux.org.uk, linux-kernel@vger.kernel.org, dave@stgolabs.net, Davidlohr Bueso Subject: [PATCH 2/2] fs/epoll: loosen irq safety in epoll_insert() and epoll_remove() Date: Fri, 20 Jul 2018 10:29:56 -0700 Message-Id: <20180720172956.2883-3-dave@stgolabs.net> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180720172956.2883-1-dave@stgolabs.net> References: <20180720172956.2883-1-dave@stgolabs.net> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Both functions are similar to the context of ep_modify(), called via epoll_ctl(2). Just like ep_modify(), saving and restoring interrupts is an overkill in these calls as it will never be called with irqs disabled. While ep_remove() can be called directly from EPOLL_CTL_DEL, it can also be called when releasing the file, but this also complies with the above. Signed-off-by: Davidlohr Bueso --- fs/eventpoll.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 2247769eb941..1b1abc461fc0 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -762,7 +762,6 @@ static void epi_rcu_free(struct rcu_head *head) */ static int ep_remove(struct eventpoll *ep, struct epitem *epi) { - unsigned long flags; struct file *file = epi->ffd.file; /* @@ -777,10 +776,10 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi) rb_erase_cached(&epi->rbn, &ep->rbr); - spin_lock_irqsave(&ep->wq.lock, flags); + spin_lock_irq(&ep->wq.lock); if (ep_is_linked(&epi->rdllink)) list_del_init(&epi->rdllink); - spin_unlock_irqrestore(&ep->wq.lock, flags); + spin_unlock_irq(&ep->wq.lock); wakeup_source_unregister(ep_wakeup_source(epi)); /* @@ -1409,7 +1408,6 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event, { int error, pwake = 0; __poll_t revents; - unsigned long flags; long user_watches; struct epitem *epi; struct ep_pqueue epq; @@ -1476,7 +1474,7 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event, goto error_remove_epi; /* We have to drop the new item inside our item list to keep track of it */ - spin_lock_irqsave(&ep->wq.lock, flags); + spin_lock_irq(&ep->wq.lock); /* record NAPI ID of new item if present */ ep_set_busy_poll_napi_id(epi); @@ -1493,7 +1491,7 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event, pwake++; } - spin_unlock_irqrestore(&ep->wq.lock, flags); + spin_unlock_irq(&ep->wq.lock); atomic_long_inc(&ep->user->epoll_watches); @@ -1519,10 +1517,10 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event, * list, since that is used/cleaned only inside a section bound by "mtx". * And ep_insert() is called with "mtx" held. */ - spin_lock_irqsave(&ep->wq.lock, flags); + spin_lock_irq(&ep->wq.lock); if (ep_is_linked(&epi->rdllink)) list_del_init(&epi->rdllink); - spin_unlock_irqrestore(&ep->wq.lock, flags); + spin_unlock_irq(&ep->wq.lock); wakeup_source_unregister(ep_wakeup_source(epi)); -- 2.16.4