Message ID | 20240205141348.GA16539@redhat.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-52798-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp906059dyb; Mon, 5 Feb 2024 06:21:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IHUaDwR+E2lRcleT5YVKfVTihAC1aa8ZpSA2EIN9caRWVuARMY+dXN7MBV68QkYtKL1te5W X-Received: by 2002:a05:6512:368f:b0:511:5569:680d with SMTP id d15-20020a056512368f00b005115569680dmr649440lfs.22.1707142916814; Mon, 05 Feb 2024 06:21:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707142916; cv=pass; d=google.com; s=arc-20160816; b=q8YbSf7u+oCFGRiYfygY5iMS/txtMOHcVBdUhhA67e8ovFHidR1KJgrrON60dKKfli 2069RBaxhYSH/T1R50xFZGWSEUgpuokgno3deR1qOaB6oYkpUuMHCk1KEt6M4a2RmbY0 E5+JdkI77x8TO12rsSW1AZogACOndmedNAu0esddPMoScOUEacvDUs7tZN0qtL0emJ6G RTv9sAsKCb9zdEUcNvY8ugqbLOAQCLlZWOg/LJVtqTNaDX8LJUeycMimkWrbCWu9YwXV Yf1VqAB8QQcy+jHitmcxX2vj6PuvCSKUxFOYGv6NcfQDMDwqZ9/k7oRLCH93PZy2hyJ9 fXVg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:subject:cc:to:from :date:dkim-signature; bh=11pxIPHjBBl92wQMC3DFzCqQJYEHlgWDIYJq9X2o8Gc=; fh=o9rBcq69Dv/SDXZPjLdJWzdny7VC3dtwZ4sSaMRh6sQ=; b=bNvRHZCXJ2xy+EhDrA/PS4nsfq3hzBSPRUpRXXNJy0C7FcDvnRkgbEvyVE/XAxj7/F 9e9ZKmR4VfAU+HTqfnLv04nB/gDaZuhLoQee42jVgSriRB6prZS+xoYxdMBRnN8gTYj3 3d6uUTVym52iBk2pfNL40SLcUXVTYHyvMd8WkEDQ1bi5sChFNmMLXANoWkvruzjWRSBO iK7bxEGgsnzh36p1nWn7S1IAmTaYG4qqdbG25aLSd2HBbDjZyuehZerwt/53ANEWazbW UJwAUxTyvEyHTm/gCZUqvjAX0EVSxVMdKZkcRkAXatb5coXGl47EATjhCj1OOiMy8vXy g1Cg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="a/gSCdSr"; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-52798-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-52798-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Forwarded-Encrypted: i=1; AJvYcCWhEbiK0BCiB7PcR+j9xuNxQmGX6855GC4sDAM543bw0G3bEuunz7/nFWHR6ay/zktDeNgBEuScrimdSihTBCmPRYChJw== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id j6-20020a170906474600b00a36c39234bdsi3937387ejs.488.2024.02.05.06.21.56 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Feb 2024 06:21:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-52798-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="a/gSCdSr"; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-52798-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-52798-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 50B271F2629F for <ouuuleilei@gmail.com>; Mon, 5 Feb 2024 14:15:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BE6B32C19C; Mon, 5 Feb 2024 14:15:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="a/gSCdSr" Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8241A2374E for <linux-kernel@vger.kernel.org>; Mon, 5 Feb 2024 14:15:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707142513; cv=none; b=L/jhz5xJIpfnWayL5BZpw878M1H4eDTi/W2yqIwlnto5Pd1hIaM4laW5cHRgI67fnOi+71y0Gp9dufWCp36aEt+9GPXfUrMZJAIIcAR4euMl3hw7cjWAzdx1CM2gfoBv10q6WJ83oG7mfyoFXE9/bXptaW6LgBo4DG+XUS45fzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707142513; c=relaxed/simple; bh=iqDeabfWw4JAl1GsXp6xX7i80knJmS9R0n4Vk6rDw10=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=FVnFVL/WGooTJUWq/Qt8uKuNKESHajtxCM8fLj9MUsymVEUrJXiQmrl28Ra05Z3VRQUPk4O5QLIlZPQWhNLr7gfm5iT5Wy8I6al6dRemRJ5yZMJJgk1Ki9qcg9vbSQACIfypIoqEZd5Tyb+LhlQGdwnwvYqj4mRIZy6r+w18Wy8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=a/gSCdSr; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707142510; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=11pxIPHjBBl92wQMC3DFzCqQJYEHlgWDIYJq9X2o8Gc=; b=a/gSCdSruePTTeg4NkAWMk0n2XnKuYdqvmFKp4jGl5bXCxvLWduVwxRDKeWpcYIcY3Mnm0 as1A3/b6lXooSn04G9Il14HOgaNfEBQtuQ53RHKrcb+Jv4e1VodogscGfmIJ1/C/dGxHE/ dciO8LWdptfKlt/Ui5qu5p6eCbnrzu0= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-640-WEhRXOPpNoGlqpJ5BlKlMw-1; Mon, 05 Feb 2024 09:15:06 -0500 X-MC-Unique: WEhRXOPpNoGlqpJ5BlKlMw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 50C2EB42B26; Mon, 5 Feb 2024 14:15:06 +0000 (UTC) Received: from dhcp-27-174.brq.redhat.com (unknown [10.45.225.165]) by smtp.corp.redhat.com (Postfix) with SMTP id 1979C2166B31; Mon, 5 Feb 2024 14:15:04 +0000 (UTC) Received: by dhcp-27-174.brq.redhat.com (nbSMTP-1.00) for uid 1000 oleg@redhat.com; Mon, 5 Feb 2024 15:13:50 +0100 (CET) Date: Mon, 5 Feb 2024 15:13:48 +0100 From: Oleg Nesterov <oleg@redhat.com> To: Christian Brauner <brauner@kernel.org> Cc: Andy Lutomirski <luto@amacapital.net>, "Eric W. Biederman" <ebiederm@xmission.com>, Tycho Andersen <tycho@tycho.pizza>, linux-kernel@vger.kernel.org Subject: [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN)) Message-ID: <20240205141348.GA16539@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.6 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790069091451554149 X-GMAIL-MSGID: 1790069091451554149 |
Series |
pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN))
|
|
Commit Message
Oleg Nesterov
Feb. 5, 2024, 2:13 p.m. UTC
rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the
POLLHUP-only waiters which wait for pid_task() == NULL.
TODO:
- as Christian pointed out, this asks for the new wake_up_all_poll()
helper, it can already have other users.
- we can probably discriminate the PIDFD_THREAD and non-PIDFD_THREAD
waiters, but this needs more work. See
https://lore.kernel.org/all/20240205140848.GA15853@redhat.com/
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
kernel/signal.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Comments
On Mon, 05 Feb 2024 15:13:48 +0100, Oleg Nesterov wrote: > rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the > POLLHUP-only waiters which wait for pid_task() == NULL. > > TODO: > - as Christian pointed out, this asks for the new wake_up_all_poll() > helper, it can already have other users. > > [...] Applied to the vfs.pidfd branch of the vfs/vfs.git tree. Patches in the vfs.pidfd branch should appear in linux-next soon. Please report any outstanding bugs that were missed during review in a new review to the original patch series allowing us to drop it. It's encouraged to provide Acked-bys and Reviewed-bys even though the patch has now been applied. If possible patch trailers will be updated. Note that commit hashes shown below are subject to change due to rebase, trailer updates or similar. If in doubt, please check the listed branch. tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git branch: vfs.pidfd [1/1] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN)) https://git.kernel.org/vfs/vfs/c/e1358f104c9e
On Mon, Feb 05, 2024 at 03:13:48PM +0100, Oleg Nesterov wrote: > rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the > POLLHUP-only waiters which wait for pid_task() == NULL. > > TODO: > - as Christian pointed out, this asks for the new wake_up_all_poll() > helper, it can already have other users. > > - we can probably discriminate the PIDFD_THREAD and non-PIDFD_THREAD > waiters, but this needs more work. See > https://lore.kernel.org/all/20240205140848.GA15853@redhat.com/ > > Signed-off-by: Oleg Nesterov <oleg@redhat.com> Reviewed-by: Tycho Andersen <tandersen@netflix.com>
diff --git a/kernel/signal.c b/kernel/signal.c index 9b40109f0c56..c3fac06937e2 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2021,11 +2021,12 @@ int send_sigqueue(struct sigqueue *q, struct pid *pid, enum pid_type type) void do_notify_pidfd(struct task_struct *task) { - struct pid *pid; + struct pid *pid = task_pid(task); WARN_ON(task->exit_state == 0); - pid = task_pid(task); - wake_up_all(&pid->wait_pidfd); + + __wake_up(&pid->wait_pidfd, TASK_NORMAL, 0, + poll_to_key(EPOLLIN | EPOLLRDNORM)); } /*