Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp6404395rwi; Tue, 18 Oct 2022 11:58:19 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4f/NfN+0ph8QUlxqsNrT650b5y+4GsGljHdIYQOaix8QJKoDezYpgzYCL0j4ABwPniNzIW X-Received: by 2002:a05:6402:27c7:b0:45d:45f0:e6c4 with SMTP id c7-20020a05640227c700b0045d45f0e6c4mr3875910ede.325.1666119499041; Tue, 18 Oct 2022 11:58:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666119499; cv=none; d=google.com; s=arc-20160816; b=EbigDre4XP8DSmLTe4IAYbwoe6i0SuMdVtkMewVsGpjOhMgLn+re7E6v7fJWacbb93 35WQUtswMh4S/szFKlJDwyfq5R6Wig+VCAcL8n6YuyKHb6v9CjHLhFB+V7nNAgCDCoYt eXlEnw23Mu/he5ddNLcX8L6nwu1AtxtqXyJ/CoTAl1r7aits6jau1p3L3q2fGP4xWJEk 53QvDMVzKVWVNpRBorK4xJBO8XTR2rqdfPAjVbXEPnIftMYirvNwmsKh3UYvpj48w5aq jvgmMQuSmn4DVVPMoKviw46IHqa9S160Rm+achbYLtx1Dg4/JG6rJPuOc1UoAxvnL4t2 dRzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=JU/d6aV8CwgbPTzPcET8vyAl1h66wtbam5+BBeLcbDk=; b=Icey3XA8b6VkQLLXmA62Mnb620x9CIhY5ajjHyllDyGIItANxMl4CS+7mMkiJwdXBB nvw04o4bVKsnr3t8JXRl+NmGMiwuC8b+QrJPPO93eC1QOFaGPuc1RrmBFae9TiOorG9x RXnL6GlZsgOvuJQdPdokNGsvPiWpm11OnYObBOqK8/zIWb1UO24EMOWSj9fp9UwsJde7 tzw8EKxFmHlzOlpit8n+czv+NnxugcsCDqQPATtRykK8Dsa0Tf9sZnv14iZEHkFoVKcN 9s2xU9USsSLg5eExsR+9Be3bar0dEmgME+MM9EqozfV34eBrQ4r/OjfjI43dW/tLPf5m AmLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cloudflare.com header.s=google header.b=IBr4moAT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=cloudflare.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id he18-20020a1709073d9200b0078243145257si13466065ejc.921.2022.10.18.11.57.53; Tue, 18 Oct 2022 11:58:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cloudflare.com header.s=google header.b=IBr4moAT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=cloudflare.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229635AbiJRSvQ (ORCPT + 99 others); Tue, 18 Oct 2022 14:51:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229453AbiJRSvO (ORCPT ); Tue, 18 Oct 2022 14:51:14 -0400 Received: from mail-yw1-x1130.google.com (mail-yw1-x1130.google.com [IPv6:2607:f8b0:4864:20::1130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B07EB2659 for ; Tue, 18 Oct 2022 11:51:13 -0700 (PDT) Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-333a4a5d495so146022757b3.10 for ; Tue, 18 Oct 2022 11:51:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloudflare.com; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JU/d6aV8CwgbPTzPcET8vyAl1h66wtbam5+BBeLcbDk=; b=IBr4moATCsSqkh4S4rNSqkkPZ56PhrLVTrSIcxblAQDAEUgjJqwgRm63PUQWsMQqaI gp+d7XA+SsI8iSOCBhRrgclMgHONu1C0evDKP310ZDtgW9XyDEDOltQvXg/5XTkgPf1b x0sm1dTrzX+GDItg71BxwGpJomq4Vvp2TdM/g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JU/d6aV8CwgbPTzPcET8vyAl1h66wtbam5+BBeLcbDk=; b=xXN5m6kXnj4pk88MPONENjzbkviD1TlWPiLb9NdSPSJReTxtHQRppnQOpJmZR+eeCt NAj1V3jvIUcXemTaRLTbTF0LNOqaAxAWEoHDFbqnoY17mGRryZnWJOgnTIUq8ro+NuyF RGCS0TLVyL4Oxom02rylDplGZgFHBEby/DzywHZ0eGAOUQlU/oZ+FxCZ0S611qMiOf4V nKqP7awCOcdF/RXekUgzTqZdNK9iXP+NCum6lEfBk8rgq5rUew3NYCcsh4uB1KW6UWO6 7WIt/+4k+Pel/EK3GKwm059+qn2hN4u2RlVd78/y6tVYZ7/hkCKb26/cqLa0QBFDOY40 UyVQ== X-Gm-Message-State: ACrzQf3QL8N5xUUU/XtI1NXxgpNbr2hzLxf3Df/POH4Koq8xvT2+Y0Fe tPiEsjZxgKqU/GllAnnqTXNQpQl78Xjoof+Mv3yQrg== X-Received: by 2002:a81:4c6:0:b0:358:a206:f1fd with SMTP id 189-20020a8104c6000000b00358a206f1fdmr3762584ywe.104.1666119072935; Tue, 18 Oct 2022 11:51:12 -0700 (PDT) MIME-Version: 1.0 References: <20221018045844.37697-1-ivan@cloudflare.com> In-Reply-To: From: Ivan Babrou Date: Tue, 18 Oct 2022 11:51:02 -0700 Message-ID: Subject: Re: [PATCH v3] proc: report open files as size in stat() for /proc/pid/fd To: Brian Foster Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@cloudflare.com, Alexey Dobriyan , Al Viro , "Theodore Ts'o" , David Laight , Jonathan Corbet , Andrew Morton , David Hildenbrand , Johannes Weiner , Christoph Anton Mitterer , Mike Rapoport , Paul Gortmaker , Kalesh Singh Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Oct 18, 2022 at 11:16 AM Brian Foster wrote: > > +static int proc_readfd_count(struct inode *inode) > > +{ > > + struct task_struct *p = get_proc_task(inode); > > + struct fdtable *fdt; > > + unsigned int open_fds = 0; > > + > > + if (!p) > > + return -ENOENT; > > Maybe this shouldn't happen, but do you mean to assign the error code to > stat->size in the caller? Otherwise this seems reasonable to me. You are right. As unlikely as it is to happen, we shouldn't return negative size. What's the idiomatic way to make this work? My two options are: 1. Pass &stat->size into proc_readfd_count: if (S_ISDIR(inode->i_mode)) { rv = proc_readfd_count(inode, &stat->size); if (rv < 0) goto out; } out: return rv; OR without a goto: if (S_ISDIR(inode->i_mode)) { rv = proc_readfd_count(inode, &stat->size)); if (rv < 0) return rv; } return rv; 2. Return negative count as error (as we don't expect negative amount of files open): if (S_ISDIR(inode->i_mode)) { size = proc_readfd_count(inode); if (size < 0) return size; stat->size = size; }