Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp3242847ybc; Thu, 14 Nov 2019 06:16:16 -0800 (PST) X-Google-Smtp-Source: APXvYqzntaH+9zeDkkgxMpN8o/5e0V+HwUQDjeWjRmHNGyE03BwJKcJGg+uKbVoB5gJPdTTZEmoj X-Received: by 2002:a50:b6e1:: with SMTP id f30mr1481160ede.212.1573740976220; Thu, 14 Nov 2019 06:16:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573740976; cv=none; d=google.com; s=arc-20160816; b=LcpjjXyBggDT9Wnwb6S9KlGCKRjRdk5anlY01Lq8I6hGKqjaWS87qI/5a2x54obP6a hHFddFcbORO5Y/teVhJCK99xRAnNUB87JNH4cmdtTngcB55rRsvZ98TTVUGag7nmpkbB WHgqnvIo9ATSaN0twlqxf54YBjJTUUYniVDevTkUH2ci/8xJpGABMwKwUqDyzS2O7JqU 7Dwg7/3xvnEcSYwzmFpXL7lwLFQIFbjQBMGJRhQhOB4IBLa2KdDc5L66h0LRQvQOmNVv EYU5xW65DGAl+y1rklvOMsh6goR43LhUr5J/hNiIuAeDw6Iv2DeFUUNR2awgNHfl2tbn QvWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=EmOEKPkWsDxJa2wDMuLQCZmoxOFNjV+aIVNikHtlQFg=; b=X0ZpoX9PKJH4pHIggJtQNpQPCpgwhEweXU2lVK3kx3O7+lC51kbX4I3HCg/E+CFxYc f8Og2BrF3y844yWjHqddQp2fvX+ZeDQG6+n6x3hqWZFwxdJJofH1wEV+mxGR7Xcf4d8o VlpWdV6eRZjFOUSGiag+uPYyGluPra3IcRSzwNI5Wt4cJYLvibcoJMNMjQRfQcG4XQFk TcJyzs0tw8X4FAIwOqjRech1D73dyzqN3GdHFX67WsJUuFiYBlIUiOLBK+2X/eEOkTh8 EavSBCHvjXevUin+Uc2ORTprEqWskzu/aGHJgpZyZqdoqpOA+0XknEq45d2KgTOpMiGJ QQ8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=OZAvCUki; 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 14si3902772edz.130.2019.11.14.06.15.51; Thu, 14 Nov 2019 06:16:16 -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; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=OZAvCUki; 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 S1727264AbfKNOMi (ORCPT + 99 others); Thu, 14 Nov 2019 09:12:38 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:36130 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727237AbfKNOMi (ORCPT ); Thu, 14 Nov 2019 09:12:38 -0500 Received: by mail-lf1-f68.google.com with SMTP id x22so1037315lfa.3 for ; Thu, 14 Nov 2019 06:12:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=EmOEKPkWsDxJa2wDMuLQCZmoxOFNjV+aIVNikHtlQFg=; b=OZAvCUkinGNJMi0yfM5j380tLkdf3Nvf9dXfwD53dRIWfqgy9w1GQ5ZtYSasJ7qEZq HTE+5qbBejQYkgBWdCQhKLgoL+7O2wunQlgX+mJaWL7AN8ebe+2tv2ORKqj4ibYB3Hmg Qrnc1CNXFv/7qAPW/KW95kqh2eZ/cUaSZZUzM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=EmOEKPkWsDxJa2wDMuLQCZmoxOFNjV+aIVNikHtlQFg=; b=ZpwlP5OgP93pTefiDExBhjZElRz3gUg+Yf9mn2MnWncsw7s34uE/XpxqT1qy1CsLR2 9Eebv1p8iILbu7sK4VtUDyDr9PfTXhulIC/0NOi959dJAT+qPvQdMjNUQTzo+GoAPiqc ZVF/mUAHKxu8szMYAH7ZX52SE1KZaxbMFMPmerScIxKEnw0bRmMboX58e6YRuMwF3pNU heAT7OTnWreIHeao2nBFhuj6mwwNmJfJ0eygtJ5aG7KdDU6a2UjOcMvgvcxkvcYEpVGy +VtRmAPzqFfmaRfUfpy3Ab/MIk5PP+sAjML2jX/Dmek+wpYLKeyQXcv6tl512nDDsvC2 SVQg== X-Gm-Message-State: APjAAAUxF8QHJ9ifA9YtSZzUpNPfK9JCdNRhNdxSxrMidrWM/JJ+jBOD TbmBLF0LhqqpgrJB34NLSoqV5A== X-Received: by 2002:ac2:4c2b:: with SMTP id u11mr6961692lfq.171.1573740755398; Thu, 14 Nov 2019 06:12:35 -0800 (PST) Received: from [172.16.11.28] ([81.216.59.226]) by smtp.gmail.com with ESMTPSA id g21sm2437151ljh.2.2019.11.14.06.12.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Nov 2019 06:12:34 -0800 (PST) Subject: Re: [PATCH RFC] io_uring: make signalfd work with io_uring (and aio) POLL To: Jann Horn Cc: Jens Axboe , io-uring@vger.kernel.org, "linux-kernel@vger.kernel.org" , Alexander Viro , Andrew Morton , linux-fsdevel , Christoph Hellwig References: <58059c9c-adf9-1683-99f5-7e45280aea87@kernel.dk> <58246851-fa45-a72d-2c42-7e56461ec04e@kernel.dk> From: Rasmus Villemoes Message-ID: Date: Thu, 14 Nov 2019 15:12:33 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 14/11/2019 14.46, Jann Horn wrote: > On Thu, Nov 14, 2019 at 10:20 AM Rasmus Villemoes > wrote: >> On 14/11/2019 05.49, Jens Axboe wrote: >>> On 11/13/19 9:31 PM, Jens Axboe wrote: >>>> This is a case of "I don't really know what I'm doing, but this works >>>> for me". Caveat emptor, but I'd love some input on this. >>>> >>>> I got a bug report that using the poll command with signalfd doesn't >>>> work for io_uring. The reporter also noted that it doesn't work with the >>>> aio poll implementation either. So I took a look at it. >>>> >>>> What happens is that the original task issues the poll request, we call >>>> ->poll() (which ends up with signalfd for this fd), and find that >>>> nothing is pending. Then we wait, and the poll is passed to async >>>> context. When the requested signal comes in, that worker is woken up, >>>> and proceeds to call ->poll() again, and signalfd unsurprisingly finds >>>> no signals pending, since it's the async worker calling it. >>>> >>>> That's obviously no good. The below allows you to pass in the task in >>>> the poll_table, and it does the right thing for me, signal is delivered >>>> and the correct mask is checked in signalfd_poll(). >>>> >>>> Similar patch for aio would be trivial, of course. >>> >>> From the probably-less-nasty category, Jann Horn helpfully pointed out >>> that it'd be easier if signalfd just looked at the task that originally >>> created the fd instead. That looks like the below, and works equally >>> well for the test case at hand. >> >> Eh, how should that work? If I create a signalfd() and fork(), the >> child's signalfd should only be concerned with signals sent to the >> child. Not to mention what happens after the parent dies and the child >> polls its fd. >> >> Or am I completely confused? > > I think the child should not be getting signals for the child when > it's reading from the parent's signalfd. read() and write() aren't > supposed to look at properties of `current`. That may be, but this has always been the semantics of signalfd(), quite clearly documented in 'man signalfd'. > Of course, if someone does rely on the current (silly) semantics, this > might break stuff. That, and Jens' patch only seemed to change the poll callback, so the child (or whoever else got a hand on that signalfd) would wait for the parent to get a signal, but then a subsequent read would attempt to dequeue from the child itself. So, I can't really think of anybody that might be relying on inheriting a signalfd instead of just setting it up in the child, but changing the semantics of it now seems rather dangerous. Also, I _can_ imagine threads in a process sharing a signalfd (initial thread sets it up and blocks the signals, all threads subsequently use that same fd), and for that case it would be wrong for one thread to dequeue signals directed at the initial thread. Plus the lifetime problems. Rasmus