Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp6467772rdb; Thu, 14 Dec 2023 21:56:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IGf/dkcnyh4NQmljSo7MCp0Ze6bh2VWCSOu/2Vu4Ek6VTZGEGiqnkk7EjCqBdZeHHfD0gfs X-Received: by 2002:a05:622a:4ce:b0:425:4043:96e8 with SMTP id q14-20020a05622a04ce00b00425404396e8mr13645737qtx.117.1702619809626; Thu, 14 Dec 2023 21:56:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702619809; cv=none; d=google.com; s=arc-20160816; b=Dg6oWSzUQ8H1F31+kifclCCtSHRWgvu0uLadoW9YERJ7eKTMxA9y6MXeMO8rhOvDHg 3p8ZiF4rfGlWqBPu/mcNZUzKKnXaOb9uVqe7uq3Wbto21T7+uJDJuMBM6XhxGDsuhSY+ Izg6ZC7UxjCurAkvi5MW/Z+JpxxAUfHNVE8ZLadkLFkOCWj2LsaC0bE7euyWz6XQd1gx 6ynqiCSFF+or53H5X5khBBzbU8CpirneXjYG9qVnSis5dPJWw/NZm5WcXJWojt+GSqRE fA0C2b1cywrJDZcuINktvLl1ABlea6IccHPzL9+fhmwtzBgkZTIMRtLqAmlSPnrPzJpP de4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:cc :to:from:date:dkim-signature; bh=jobEC3jqWIpyDkINLFhovVaNZT5MWZEp2hewynNzNgs=; fh=EdqguyCCQqAW6WUPkUr1uGcM6NAXl4PEL7eC4Qa3yTM=; b=d51dyhUz+xHZ35PWV0vazm5EGP28wxCI85K98ZraT0bKlX2ksiE9b41sy1kk2cxKDK /NseyQGpCRcqir3BDl8p5WsIi+tb+3G4/SwnVjCt52WKoiIn1q0c6pNrDCa+/DZNd1U4 RrN/SLAH6YmYkNWvzyx4XeMWBj2oWHigt4eRO/yEz9dgpTqG4Yc/6HhtlHAdurRgqDiD o4Kiw4XgjjsZvH3NFNV2dWyH+/E2GCcaEa+cU31CwvzjOFdDKLduL0FtuA2Q2QM31SmM fSH+c65Fk5bi9CtnSr9K6uIutGkaeO12eN8nIbNsZPENLHXtezL2cXffo9KmcgjqVICl 6nXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=isdXMoLa; spf=pass (google.com: domain of linux-kernel+bounces-468-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-468-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id bs24-20020ac86f18000000b0042378c526a8si18104255qtb.569.2023.12.14.21.56.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Dec 2023 21:56:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-468-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=isdXMoLa; spf=pass (google.com: domain of linux-kernel+bounces-468-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-468-linux.lists.archive=gmail.com@vger.kernel.org" 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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 48D5F1C2242B for ; Fri, 15 Dec 2023 05:56:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 45D4D79DB; Fri, 15 Dec 2023 05:56:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="isdXMoLa" X-Original-To: linux-kernel@vger.kernel.org Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (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 1B339D275; Fri, 15 Dec 2023 05:56:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=jobEC3jqWIpyDkINLFhovVaNZT5MWZEp2hewynNzNgs=; b=isdXMoLa/gQ7m5FXi3d/9OdoAg XaeBzpytEaWOOM1Rv6L6Sb2AU08uyb+vJzSd5WO8o4IZ76wJduYkmLgYA4YVfdSgaBEYPwZOhSu1k T18ZDxt4M5P2pDr/JqvW3DrRznqD3gcz8g92Hzl+tVjbHSHZ9CY+KSEPJ73NRQEPxHpProYcq5bHq 0Tw4uB3Po+aKjUzhKgdCJURXmEkHYxxCfjAQJY9LYGAVYomrNiqzkIa1+7rtZmOcFNABFW2fS41xV GW2gV9vcxcoALFfII/YSkz/8Ghg4HUx9TdVvfsH5XQzCGM7NW2zzLWOY0bXu87XrmYDcCEGWORWAZ CMjym3+Q==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1rE1BU-00E4oM-QE; Fri, 15 Dec 2023 05:56:28 +0000 Date: Fri, 15 Dec 2023 05:56:28 +0000 From: Matthew Wilcox To: Vishal Verma Cc: Dan Williams , Dave Jiang , Andrew Morton , Oscar Salvador , linux-kernel@vger.kernel.org, nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, David Hildenbrand , Dave Hansen , Huang Ying , Greg Kroah-Hartman , linux-mm@kvack.org, Joao Martins Subject: Re: [PATCH v6 2/4] dax/bus: Use guard(device) in sysfs attribute helpers Message-ID: References: <20231214-vv-dax_abi-v6-0-ad900d698438@intel.com> <20231214-vv-dax_abi-v6-2-ad900d698438@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231214-vv-dax_abi-v6-2-ad900d698438@intel.com> On Thu, Dec 14, 2023 at 10:25:27PM -0700, Vishal Verma wrote: > @@ -294,13 +294,10 @@ static ssize_t available_size_show(struct device *dev, > struct device_attribute *attr, char *buf) > { > struct dax_region *dax_region = dev_get_drvdata(dev); > - unsigned long long size; > > - device_lock(dev); > - size = dax_region_avail_size(dax_region); > - device_unlock(dev); > + guard(device)(dev); > > - return sprintf(buf, "%llu\n", size); > + return sprintf(buf, "%llu\n", dax_region_avail_size(dax_region)); > } Is this an appropriate use of guard()? sprintf is not the fastest of functions, so we will end up holding the device_lock for longer than we used to. > @@ -908,9 +890,8 @@ static ssize_t size_show(struct device *dev, > struct dev_dax *dev_dax = to_dev_dax(dev); > unsigned long long size; > > - device_lock(dev); > + guard(device)(dev); > size = dev_dax_size(dev_dax); > - device_unlock(dev); > > return sprintf(buf, "%llu\n", size); > } If it is appropriate, then you can do without the 'size' variable here. > @@ -1137,21 +1117,20 @@ static ssize_t mapping_store(struct device *dev, struct device_attribute *attr, > if (rc) > return rc; > > - rc = -ENXIO; > - device_lock(dax_region->dev); > - if (!dax_region->dev->driver) { > - device_unlock(dax_region->dev); > - return rc; > - } > - device_lock(dev); > + guard(device)(dax_region->dev); > + if (!dax_region->dev->driver) > + return -ENXIO; > > + guard(device)(dev); > to_alloc = range_len(&r); > - if (alloc_is_aligned(dev_dax, to_alloc)) > - rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc); > - device_unlock(dev); > - device_unlock(dax_region->dev); > + if (!alloc_is_aligned(dev_dax, to_alloc)) > + return -ENXIO; > > - return rc == 0 ? len : rc; > + rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc); > + if (rc) > + return rc; > + > + return len; > } Have I mentioned how much I hate the "rc" naming convention? It tells you nothing useful about the contents of the variable. If you called it 'err', I'd know it was an error, and then the end of this function would make sense. if (err) return err; return len;