Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6620905imu; Mon, 21 Jan 2019 12:18:33 -0800 (PST) X-Google-Smtp-Source: ALg8bN55T+P7IGn2uBhO6jt+SCnBYXSjWgsjLVIYay1jn06eBstZw8+SrdpOMc/Jom/JQYAt5iTJ X-Received: by 2002:a65:5286:: with SMTP id y6mr29268508pgp.439.1548101913900; Mon, 21 Jan 2019 12:18:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548101913; cv=none; d=google.com; s=arc-20160816; b=yuzEAFWbV3D2tfIHBmSDjRkmGtcWvHUUWW4AHTVXyQyW3e6NIWg7nWlNGWfN5n0BQ/ DdPM83WG/of+3yCDR3m64UHhJA+U3HuthYlIza7InqnjAjQrW5qP+GxjB3vRkJUnnVIR uQHRrKXpQ1tM2Si+irYh5+N4R8XKaELCKmJs9TFhjoS0W2LpAkeMr8j2+lMC7BIMMa0q MyfrEFFqwUfhxraujogBuP4M2sWo0qbkrbtEUlU7M3SeGxAL5LE9jRFFvJqDgDlEO101 UlLPEQjLTaiM55AdzLGvJ6YYUUwDfPl2QulsLW9UVJF8qBnp0zX1UcfLSm2jAbceaWfx xGsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from; bh=5otRAAiitYrEH1JasZhOjRzWbRvRpkag+DZCSKrDbkU=; b=XGXc04dYXDHDSM+c/PdO7tutoNAJpkg2XqVlDxuNZXfvC76scfFhJqRrjcV9KjMkP6 8nyxawOZMHfXb8HH9wrq8OBbzzq3t5fxMpMk6sbloUJsctqnbQ1vmv/uAG1LOPuMQv3r gT+h9cHteR8+e/KMDcxW1Poz7kPJKrhiCG2kr8Fzgo6oszSHDdMgCg2XTPSQXR10RZme QjTCdlEDLL9ZjzqByhsMNbrwYjyPi2ugOGnAk04OQ8vv0rmvepzEPXvncNxyxdf+21MK Jlh1EXIyCBlo5Xv8PA+iRHAVwku8LRdknDu+QXQ5gjeyjlxbv+yxm3lf6YDFoGfEq5FR CkXw== 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 f17si6652134pff.171.2019.01.21.12.18.18; Mon, 21 Jan 2019 12:18:33 -0800 (PST) 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 S1728346AbfAUUQF (ORCPT + 99 others); Mon, 21 Jan 2019 15:16:05 -0500 Received: from mx2.suse.de ([195.135.220.15]:55654 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728278AbfAUUPR (ORCPT ); Mon, 21 Jan 2019 15:15:17 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 148FDAFFB; Mon, 21 Jan 2019 20:15:16 +0000 (UTC) From: Roman Penyaev Cc: Roman Penyaev , Andrew Morton , Davidlohr Bueso , Jason Baron , Al Viro , "Paul E. McKenney" , Linus Torvalds , Andrea Parri , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 09/13] epoll: support polling from userspace for ep_remove() Date: Mon, 21 Jan 2019 21:14:52 +0100 Message-Id: <20190121201456.28338-10-rpenyaev@suse.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121201456.28338-1-rpenyaev@suse.de> References: <20190121201456.28338-1-rpenyaev@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On ep_remove() simply mark a user item with EPOLLREMOVE if the item was ready (i.e. has some bits set). That will prevent further user index entry creation on item ->bit reuse. Signed-off-by: Roman Penyaev Cc: Andrew Morton Cc: Davidlohr Bueso Cc: Jason Baron Cc: Al Viro Cc: "Paul E. McKenney" Cc: Linus Torvalds Cc: Andrea Parri Cc: linux-fsdevel@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- fs/eventpoll.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 628a2cadfad6..b9f51f4b94e7 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -1025,10 +1025,14 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi) rb_erase_cached(&epi->rbn, &ep->rbr); - write_lock_irq(&ep->lock); - if (ep_is_linked(epi)) - list_del_init(&epi->rdllink); - write_unlock_irq(&ep->lock); + if (ep_polled_by_user(ep)) { + ep_remove_user_item(epi); + } else { + write_lock_irq(&ep->lock); + if (ep_is_linked(epi)) + list_del_init(&epi->rdllink); + write_unlock_irq(&ep->lock); + } wakeup_source_unregister(ep_wakeup_source(epi)); /* -- 2.19.1