From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0B14C4332F for ; Tue, 13 Dec 2022 07:11:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234374AbiLMHLK (ORCPT ); Tue, 13 Dec 2022 02:11:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233843AbiLMHLG (ORCPT ); Tue, 13 Dec 2022 02:11:06 -0500 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [IPv6:2a03:a000:7:0:5054:ff:fe1c:15ff]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D673129 for ; Mon, 12 Dec 2022 23:11:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=OtUnH8puMoigAwnSYIolqkRd6u4feH/uNXVMZiHt9uQ=; b=XoiqYhncV4I3m31iL7plQmDCx3 HRJuT65Chgb7HFFH1dpfnRiUeV67PHNZ8VKF1GqSk3/OqsZTQet1c2A/GWfopxm4yxteoeOMnzSG6 cP25trUIAwmQ7fUAF0zvErgXIlLVyVGD79uBy1Oy8TVQMUBhFIwh80ryB0suLlN2iPULbiM1HMqw5 MHp5MAq1GBMjFYN4oLWACBmE1gUcBzhPL67SytL11p3kXFJ5RetE6rbPH4/+xNhmpxxrypx3uAUlg DnhftcZykZVB5XrQPg3zxra4dbs3GB9HPiUTCkykDT1ZXaKPuW/88lnaQx0T49UtvfcOnD0IbGT6r awBXhMDw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.96 #2 (Red Hat Linux)) id 1p4zRK-00BYAu-2L; Tue, 13 Dec 2022 07:10:58 +0000 Date: Tue, 13 Dec 2022 07:10:58 +0000 From: Al Viro To: "Fabio M. De Francesco" Cc: Evgeniy Dushistov , Ira Weiny , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 2/3] fs/ufs: Change the signature of ufs_get_page() Message-ID: References: <20221212231906.19424-1-fmdefrancesco@gmail.com> <20221212231906.19424-3-fmdefrancesco@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20221212231906.19424-3-fmdefrancesco@gmail.com> Sender: Al Viro Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Dec 13, 2022 at 12:19:05AM +0100, Fabio M. De Francesco wrote: > +static void *ufs_get_page(struct inode *dir, unsigned long n, struct page **page) > { > struct address_space *mapping = dir->i_mapping; > - struct page *page = read_mapping_page(mapping, n, NULL); > - if (!IS_ERR(page)) { > - kmap(page); > - if (unlikely(!PageChecked(page))) { > - if (!ufs_check_page(page)) > + *page = read_mapping_page(mapping, n, NULL); > + if (!IS_ERR(*page)) { > + kmap(*page); > + if (unlikely(!PageChecked(*page))) { > + if (!ufs_check_page(*page)) > goto fail; > } > } > - return page; > + return page_address(*page); Er... You really don't want to do that when you've got ERR_PTR() from read_mapping_page(). > > fail: > - ufs_put_page(page); > + ufs_put_page(*page); > return ERR_PTR(-EIO); > } IDGI... static void *ufs_get_page(struct inode *dir, unsigned long n, struct page **p) { struct address_space *mapping = dir->i_mapping; struct page *page = read_mapping_page(mapping, n, NULL); if (!IS_ERR(page)) { kmap(page); if (unlikely(!PageChecked(page))) { if (!ufs_check_page(page)) goto fail; } *p = page; return page_address(page); } return ERR_CAST(page); fail: ufs_put_page(page); return ERR_PTR(-EIO); } all there is to it... The only things you need to change are 1) type of function 2) make sure to store the page into that pointer to pointer to page on success 3) return page_address(page) instead of page on success 4) use ERR_CAST() to convert ERR_PTR() that is struct page * into equal ERR_PTR() that is void * (the last one is optional, just makes the intent more clear).