Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp780369pxp; Fri, 11 Mar 2022 14:58:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJyokLml4UzbeZjJ3T0ftsoFjIvddaGxMwV/csRyI0JM44f+gxFmVv4nOhOiY3edVPUGnRBu X-Received: by 2002:aa7:82d0:0:b0:4f6:72c7:ff61 with SMTP id f16-20020aa782d0000000b004f672c7ff61mr12254910pfn.46.1647039528019; Fri, 11 Mar 2022 14:58:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1647039528; cv=none; d=google.com; s=arc-20160816; b=mEqjx+czqVpgV8A7bAjo1GzJ+D0okQrutNq1im77lnmNrDhFyVseFLKRR2tbLIYXOq 7lwQCnlIAZKZVP86+LLnudx7Y20kHEUVK1C5/wKNuYKGYYtJxo1UzSPbi1qomxKprLkW aloC8zaMYihqSNtDASgzNcSAx7dwFbU8s9KEivtTBSR9OrMMAhjS2H1yGyFTRr3EhkYB xtxfzkEDhB4MmdvqySkMjRc62RgaFn/oCt7mZJ8Qj/tsTAZr3ZmrfQHWXASB6Cw6xpIH MnlPSwPOkE9xj3i6ODiMGo0i8dmb3x6Mf5py0+/LgkYSlXeSaupQjv6x9DAmcXQvJywR 0Ghg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=3Xe/TObzCyIpMz+gsrdFN4FAYpTVbp6ttT/yAt6pqXM=; b=zmD6uFaxsgB/1Y12Xwz6GgYwGWBpmR+n4tkrMdNGBPe3EPySYwQJDA9OO3HIZFOoSZ owMOOcQY1PFysIgi5vcYcUtmVMn4YtwuNjwfsT5JvTx7jwXZaLmCoo0TLBOnCDYzhiZ1 Ambnx+Hqg1ptXPqCoge5sVGQnOP8zgjdfwr0Rtf2VBwA5/wCDaPVLDsYbbLkK0z/28Jn Yc1xfxUTfI6MZVF1i58aTkVEJl0bd1VUQ5eFRLesypoyR6SmDUJ6pv20PFmyiHOc1s3z zrvotzM28i29o9Wv8xpgCDVM3H12VdcyhRYCsTZ2xasFR4+P9mu1Gssno+292C0Jv6iv mP9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=WYBrp34Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id q101-20020a17090a1b6e00b001bd14e01fa6si9096073pjq.148.2022.03.11.14.58.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Mar 2022 14:58:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=WYBrp34Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 16D20371A4F; Fri, 11 Mar 2022 13:55:54 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233053AbiCKHOx (ORCPT + 99 others); Fri, 11 Mar 2022 02:14:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50782 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345209AbiCKHOv (ORCPT ); Fri, 11 Mar 2022 02:14:51 -0500 Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1EFCF115963 for ; Thu, 10 Mar 2022 23:13:47 -0800 (PST) Received: by mail-pl1-x62d.google.com with SMTP id q13so6973643plk.12 for ; Thu, 10 Mar 2022 23:13:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3Xe/TObzCyIpMz+gsrdFN4FAYpTVbp6ttT/yAt6pqXM=; b=WYBrp34ZMpvN3EqOVtxjQPlFUSwiquPN+sa04OJ/pXjQBR65wj651cRBi1+ffL4KWV sJPiV/Be/MOEkOsZHVRF/OLpO0C/mQDVZ8REsfucG7lBIukeRY3P78OkjAvKkwuqgVhx pkMOcEwvpyNy5BS48CilZUN52WT97Cf9YERJPKaLydgzq5/Ar06Qni9Zl2kkbD1lnelX HgSmifYb9DQ27tCiq97eao3hMrpoawRtKAGMMyVr9Z5wfhjYbExF4ynn9IOmkKCfZJrF 7T575iMvtSl0MUGAj8Nv7zEipoJgG8fjWSfMTDuWLQf1acpyVX2dL9I7b6udtnRlha5U 3N5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3Xe/TObzCyIpMz+gsrdFN4FAYpTVbp6ttT/yAt6pqXM=; b=wd0T8OMdEvyTo8WNEOrOki7UrxnJ6Y/Z0yD/lQVjX1ZWSRvDxnq0MbgUXUgbSyZypH GKT6+/DDDobMK4csU10sTLCq9aLMcMd3z+KC+kKW7HwO7e+zpJHHrIcwDcB0dlrgJSwA +wCen9tl+iHXZ02oUlZ6zJbpnysFrg2qWCvLR4dIfcyNvUXSqvEFolQMqc6O6FyN7SJ5 7QR1/xjR1wVinWDx/nIovuMqm36h58gVZYKkniLLWdXdQK/2gZ71MlvqKqtg07bGAy40 kjWIwAxVV01Sl0OqrsN7VIublSqxTznSeghKUQDZsi8bddmU9p9pE8gQU8W0kaRzn9Bt xDBg== X-Gm-Message-State: AOAM531DXUvYe6BTZhzuxlQnNwJDYRWlSIyTdK/sxzPWqWgdzYjbyiOy E9bP62pXH3B+oZxEVOyP0k4= X-Received: by 2002:a17:90b:1811:b0:1bf:582e:443c with SMTP id lw17-20020a17090b181100b001bf582e443cmr20459312pjb.0.1646982827181; Thu, 10 Mar 2022 23:13:47 -0800 (PST) Received: from localhost ([103.220.76.197]) by smtp.gmail.com with ESMTPSA id o5-20020a655bc5000000b00372f7ecfcecsm7381854pgr.37.2022.03.10.23.13.45 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 10 Mar 2022 23:13:46 -0800 (PST) Date: Fri, 11 Mar 2022 15:12:32 +0800 From: Yue Hu To: Gao Xiang Cc: linux-erofs@lists.ozlabs.org, Chao Yu , LKML , zhangwen@coolpad.com, huyue2@coolpad.com Subject: Re: [PATCH 1/2] erofs: clean up z_erofs_extent_lookback Message-ID: <20220311151232.00003619.zbestahu@gmail.com> In-Reply-To: <20220310182743.102365-1-hsiangkao@linux.alibaba.com> References: <20220310182743.102365-1-hsiangkao@linux.alibaba.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; i686-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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 Fri, 11 Mar 2022 02:27:42 +0800 Gao Xiang wrote: > Avoid the unnecessary tail recursion since it can be converted into > a loop directly in order to prevent potential stack overflow. > > It's a pretty straightforward conversion. > > Signed-off-by: Gao Xiang > --- > fs/erofs/zmap.c | 67 ++++++++++++++++++++++++------------------------- > 1 file changed, 33 insertions(+), 34 deletions(-) > > diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c > index b4059b9c3bac..572f0b8151ba 100644 > --- a/fs/erofs/zmap.c > +++ b/fs/erofs/zmap.c > @@ -431,48 +431,47 @@ static int z_erofs_extent_lookback(struct z_erofs_maprecorder *m, > unsigned int lookback_distance) > { > struct erofs_inode *const vi = EROFS_I(m->inode); > - struct erofs_map_blocks *const map = m->map; > const unsigned int lclusterbits = vi->z_logical_clusterbits; > - unsigned long lcn = m->lcn; > - int err; > > - if (lcn < lookback_distance) { > - erofs_err(m->inode->i_sb, > - "bogus lookback distance @ nid %llu", vi->nid); > - DBG_BUGON(1); > - return -EFSCORRUPTED; > - } > + while (m->lcn >= lookback_distance) { > + unsigned long lcn = m->lcn - lookback_distance; > + int err; may better to declare variable 'lclusterbits' in loop just like 'err' usage? > > - /* load extent head logical cluster if needed */ > - lcn -= lookback_distance; > - err = z_erofs_load_cluster_from_disk(m, lcn, false); > - if (err) > - return err; > + /* load extent head logical cluster if needed */ > + err = z_erofs_load_cluster_from_disk(m, lcn, false); > + if (err) > + return err; > > - switch (m->type) { > - case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD: > - if (!m->delta[0]) { > + switch (m->type) { > + case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD: > + if (!m->delta[0]) { > + erofs_err(m->inode->i_sb, > + "invalid lookback distance 0 @ nid %llu", > + vi->nid); > + DBG_BUGON(1); > + return -EFSCORRUPTED; > + } > + lookback_distance = m->delta[0]; > + continue; > + case Z_EROFS_VLE_CLUSTER_TYPE_PLAIN: > + case Z_EROFS_VLE_CLUSTER_TYPE_HEAD1: > + case Z_EROFS_VLE_CLUSTER_TYPE_HEAD2: > + m->headtype = m->type; > + m->map->m_la = (lcn << lclusterbits) | m->clusterofs; > + return 0; > + default: > erofs_err(m->inode->i_sb, > - "invalid lookback distance 0 @ nid %llu", > - vi->nid); > + "unknown type %u @ lcn %lu of nid %llu", > + m->type, lcn, vi->nid); > DBG_BUGON(1); > - return -EFSCORRUPTED; > + return -EOPNOTSUPP; > } > - return z_erofs_extent_lookback(m, m->delta[0]); > - case Z_EROFS_VLE_CLUSTER_TYPE_PLAIN: > - case Z_EROFS_VLE_CLUSTER_TYPE_HEAD1: > - case Z_EROFS_VLE_CLUSTER_TYPE_HEAD2: > - m->headtype = m->type; > - map->m_la = (lcn << lclusterbits) | m->clusterofs; > - break; > - default: > - erofs_err(m->inode->i_sb, > - "unknown type %u @ lcn %lu of nid %llu", > - m->type, lcn, vi->nid); > - DBG_BUGON(1); > - return -EOPNOTSUPP; > } > - return 0; > + > + erofs_err(m->inode->i_sb, "bogus lookback distance @ nid %llu", > + vi->nid); > + DBG_BUGON(1); > + return -EFSCORRUPTED; > } > > static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,