Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp985560ybz; Fri, 1 May 2020 12:10:52 -0700 (PDT) X-Google-Smtp-Source: APiQypI78DJ//2/uy4j8m4QmPE28SpE+zVGz5YBiEdoTW7ITE5Q6R1Qov2Q6OIfHbdxC+mwiTFXg X-Received: by 2002:a17:906:9450:: with SMTP id z16mr4479221ejx.166.1588360252213; Fri, 01 May 2020 12:10:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588360252; cv=none; d=google.com; s=arc-20160816; b=fbjH2paA3rcyDmmnB41PFPUwIB+uch+QRR+dYyq0YR14h1bnHsu09Sif9bFaH02xhr TgC7esX/QWBDErrvBpOq0gwn6uGVd9CEBvFguA+37rw5iHPIYg5EYr9RuT8KijAsld8K 9TOGAeoE63wYiEYBwN2IQ4UlmKpWkY2yf3l3s/Qq/epMtCcgOcwh62uRbBTmEfff8mge FAG39VNbuf8twDhvQAPesKakWNNeLd1/XXD9BqhaMTEPIHQT6bLtZ313gNLzZmaBd/Uk VNfHlQbKIT9tWOLJzpnnnLOfV2q8H4kYjhKtlP639K7Q3KAfvUbke/0Np41NuXo3yx4B ZU8g== 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=12753pvCs41oaRWN2f3fDLkKSoGRm3fE1KHXq7bPLrQ=; b=lp5IrvMJ+w4B0OdRkv7hi6tF/aFBa3y16tdkA3lvesrq3WKRxY7aXaoRYBrG/gXTd1 JwXM8FolXe8HqvdEcmCasGml7wCsQ+fj6bNTrTew47T34aRlfnoH+mXsfsfg/dug4zRu PiN+tdx1epKO1k5j6vwGa1iLGP7vcp1QVbCY8WhiSQ84JkUaVh+3G6Q2aUcwTd/KEyVu R0xdKDffCeyA4uPy4P6Es6nIIHwYI9lrpV7lqu1zJZi3vZUTkX3nUPU9ZacLRfHxwxX3 k2kwaluaY81/s63RKHegqDDklEcZBqDq2uKSysKtuPeYvntRjT3YmzghrVDNzZC8iaua N7Yg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel-dk.20150623.gappssmtp.com header.s=20150623 header.b=bkY90fbn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p16si2302124ejz.195.2020.05.01.12.10.28; Fri, 01 May 2020 12:10:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel-dk.20150623.gappssmtp.com header.s=20150623 header.b=bkY90fbn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730368AbgEATIX (ORCPT + 99 others); Fri, 1 May 2020 15:08:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47612 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729766AbgEATIW (ORCPT ); Fri, 1 May 2020 15:08:22 -0400 Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A803C061A0E for ; Fri, 1 May 2020 12:08:21 -0700 (PDT) Received: by mail-pf1-x443.google.com with SMTP id 18so1953154pfv.8 for ; Fri, 01 May 2020 12:08:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=12753pvCs41oaRWN2f3fDLkKSoGRm3fE1KHXq7bPLrQ=; b=bkY90fbnY1XYGa0d8K57hg+77EDktHM/phFxEqzYengai1tDm2GYhy/LwgmaVg32Gt bXngLucaA7iU/uc/3atFx5qMMYxYMkWf6Z81h/gVnbxlDB8bwW5UFxXTkf7XFq7SbSOx dF6fGsVNyR1WoY5gQ0kZrqdFGP/Ml8YhyIWR2X/j/rSaE79SvpAmjqauJPVhCRN+9QYb /7Oqqs35izW8u3pE3Ay5FCOzefx1NnwZDo+n4xowCBqmPEJX/sQbXqlpcOvltF3DGupG 3z1Hy/DceEFd1t1T19Yh+gPIw6oVbCTtGT5HTNi1Ln1b2zUEcHPFIWoaYX76/7vRSZVk xfhQ== 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=12753pvCs41oaRWN2f3fDLkKSoGRm3fE1KHXq7bPLrQ=; b=SNpVK+hqDnD/j+gE/pXflwuJkDYYUpOCMqkpVbwCUhKUFm0s9X51Z3xFFRca2VgEwM baLC6DHGpRFWSkDqP3FzAIF4g06SYmN1LwE5OCtvy/Tzl0U12LTNm34ycTugzqReH4HX u/LjVa3RSlSI1RRoqSp3dnJslqerFPIjDrrhWAb2qleoRkSvI2JlOiJ+LCai4QTn2EbJ Noeew/fqjA3zklq+K51CwX0DReNheqLexv/lRnWEOd8vDMCFPdO2JQ3sUtO64NAwon62 IWX1+BtjqPgK0up5gTyHoKIYi6sjj2aYh+fInYfkmEqicxTCfdkCM2CIiN7Bi+D/XyyF 0rTw== X-Gm-Message-State: AGi0PuayQpGhGWMqlCcjBF6XmfMSZc9uq+5ZBzakpQrfsOTDHGK/8zcb X3evr4xJ/uGLeSQNwtW94qxy+/nhvRmaZA== X-Received: by 2002:a63:c00a:: with SMTP id h10mr5776405pgg.238.1588360100452; Fri, 01 May 2020 12:08:20 -0700 (PDT) Received: from [192.168.1.188] ([66.219.217.145]) by smtp.gmail.com with ESMTPSA id u8sm321012pjy.16.2020.05.01.12.08.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 01 May 2020 12:08:19 -0700 (PDT) Subject: Re: [PATCH v3b] eventfd: convert to f_op->read_iter() To: Al Viro Cc: linux-fsdevel , "linux-kernel@vger.kernel.org" References: <97a28bdb-284a-c215-c04d-288bcef66376@kernel.dk> <20200501190018.GN23230@ZenIV.linux.org.uk> From: Jens Axboe Message-ID: Date: Fri, 1 May 2020 13:08:18 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200501190018.GN23230@ZenIV.linux.org.uk> 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 5/1/20 1:00 PM, Al Viro wrote: > On Fri, May 01, 2020 at 11:54:01AM -0600, Jens Axboe wrote: > >> @@ -427,8 +424,17 @@ static int do_eventfd(unsigned int count, int flags) >> >> fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx, >> O_RDWR | (flags & EFD_SHARED_FCNTL_FLAGS)); >> - if (fd < 0) >> + if (fd < 0) { >> eventfd_free_ctx(ctx); >> + } else { >> + struct file *file; >> + >> + file = fget(fd); >> + if (file) { >> + file->f_mode |= FMODE_NOWAIT; >> + fput(file); >> + } > > No. The one and only thing you can do to return value of anon_inode_getfd() is to > return the fscker to userland. You *CAN* *NOT* assume that descriptor table is > still pointing to whatever you've just created. > > As soon as it's in descriptor table, it's out of your hands. And frankly, if you > are playing with descriptors, you should be very well aware of that. > > Descriptor tables are fundamentally shared objects; they *can* be accessed and > modified by other threads, right behind your back. > > *IF* you are going to play with ->f_mode, you must use get_unused_fd_flags(), > anon_inode_getfile(), modify ->f_mode of the result and use fd_install() to > put it into descriptor table. With put_unused_fd() as cleanup in case > of allocation failure. OK, that makes sense, so we've got f_mode set before the fd_install() and fd visibility. I wrote that up, will test, and send out a v4... Thanks Al, this is very helpful. -- Jens Axboe