Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp288377ybh; Thu, 12 Mar 2020 02:00:26 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvjchvz8/r1++4FbQ6A7m3UvPZJxtc6foIOlthXnEwrMvL/JLUp1SshMRZk3LB1qvPuqUnO X-Received: by 2002:a9d:264:: with SMTP id 91mr5675566otb.216.1584003625985; Thu, 12 Mar 2020 02:00:25 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1584003625; cv=pass; d=google.com; s=arc-20160816; b=nbE+FFqDqsiuAi1uPBet850GB06TMfze1RMOWM+tUz3mJPOsuFHDny+uj0mOND8xgA tSJlYvAvABUQmKv5uWxmZRZHXeu3uG6prtXJ5abdfDV7HAzD3ZmiV8d1fqpkZRhMDHRz XcofRPrVQX6oMniTsJvMRNaMk2BSiOxNlwzAl+Ya7bLvB2D0MUlLhOENmg5M173aBjPf eEfefAV/PFvfi8rFD2P0Y7CHeEcAYmZrf66HJvikeJLT0itlNLX3kImanlkZaFd9yLc1 iBaxIGBHuA92bWJBYKq3zT5TdusJ4zt4DopXmkgMpDmIuX8FlxjNqFnb7wEyVWgwk2OK QlfQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :message-id:date:subject:cc:to:from:dkim-signature; bh=bVIyJifZ+Mj6NeWUOmYREnc7pAoXEmmx5oIlpEy+W3E=; b=nNSu5IXkaZicNrRujvl3F5z3/bq1MRZ+1XJvu4lkj+2SQTqXR8kuHrclzSlxBKF+Pi ZM8wBFiV67UCR1ZaIh5hzpK5r43FHaxRBdyXSGJ2yRBdUR5D94BvevINqP6XTCm3L7F9 2KIHnSmXTEcHK4V0KlapM12c163SSGjK78u672E2cHuQkzRXHqV0Ub8wOu0simCypopi oMKRKO7atJUclVAPIG9yC5BZ/pbhyVSiHknIMq/0cbuBnMDltzP6yIDZpKDpM0m6dswP 51rq6czgMCYSecHrrzHTule8RRqNKDy2hoEZ6ADhMDj5rFqVMms9kW88HixEGdOcUpnF Rr4A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nokia.onmicrosoft.com header.s=selector1-nokia-onmicrosoft-com header.b=xxGrbk+Y; arc=pass (i=1 spf=pass spfdomain=nokia.com dkim=pass dkdomain=nokia.com dmarc=pass fromdomain=nokia.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nokia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l143si934669oih.269.2020.03.12.02.00.13; Thu, 12 Mar 2020 02:00:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nokia.onmicrosoft.com header.s=selector1-nokia-onmicrosoft-com header.b=xxGrbk+Y; arc=pass (i=1 spf=pass spfdomain=nokia.com dkim=pass dkdomain=nokia.com dmarc=pass fromdomain=nokia.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nokia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726605AbgCLI7P (ORCPT + 99 others); Thu, 12 Mar 2020 04:59:15 -0400 Received: from mail-db8eur05on2128.outbound.protection.outlook.com ([40.107.20.128]:24687 "EHLO EUR05-DB8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726310AbgCLI7O (ORCPT ); Thu, 12 Mar 2020 04:59:14 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nqC+mO/AYUiPcNXJGRKBuYbtugdxzd88iDpv41xlsnEMKUycamUvCzpo5JMZk0b540QMtlYRUIBVBi5kXp2QV7bJJjcNxBfZzMFSKp1mmRsSw8mpG+UR5SP3EwQrcEkKH5Md5rEXKGk4NUHkPz9RGvBUIkVnikEttSL2w4cx245zX69rq8k5nUXpXjo8bwzZoJJot4zL7Hepz4oXr390PSbaW0kMEV0FGDrX37DpUOiG9/scor+eLx8/pJ6jpNqZ2LXD8puO5XNQyqLV7qafMOh8R7id3ocTFGcE3+PIiRxYNQ9giiI77HotPHOGhgOjjOfahnf6wtLMD/Ju/A+/xQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bVIyJifZ+Mj6NeWUOmYREnc7pAoXEmmx5oIlpEy+W3E=; b=WsL+2vrI8CJEaUQlpuSFJq/sKHzZWR6qLSG92ECYG5vBKGHyjGagAsRXVGXvcJ9ocIyQNo2jM1JTHZ0atrxydDMj+UyUHYMpxZ0Lu440JTz0dLaJQ/lu4cbuEVpRNZCYYbsOWftE6SpZSZuQ/8/unGTn2mhNxTSRBowbQchK20SYhU3g+dky00mWSdE+7DIgWIZ0EyWUZLVOf6ibvZTkzf5qoPQO3BAXUxaEVtK7hB6zkCrZGxg3x8egFpA/6LaHKq8L3wx68AjeRCB3raUt5C7fb70Gyy4b04M6TcC0q6KTx0ut3uPpjpNxrlKj+9VF8xBhiRmJWP9Nl3voAKquRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nokia.com; dmarc=pass action=none header.from=nokia.com; dkim=pass header.d=nokia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bVIyJifZ+Mj6NeWUOmYREnc7pAoXEmmx5oIlpEy+W3E=; b=xxGrbk+Yw/cF2/E241lR7GPCqi7CKVFhoNwCczQCCvZsh/zsdKJV6hk7blYeEfIL5bVuG+rMYlbYJTJr5MnsYk0ysOxo6GPFUfxJzLWWTZQQHoGbi0YvUY/Xyhn/e6sod3icrI6cstmcBbT3oIgbWWLNwqqJ3uxgG7DGa58PtuU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=tommi.t.rantala@nokia.com; Received: from HE1PR0702MB3675.eurprd07.prod.outlook.com (10.167.127.12) by HE1PR0702MB3674.eurprd07.prod.outlook.com (10.167.125.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.10; Thu, 12 Mar 2020 08:59:10 +0000 Received: from HE1PR0702MB3675.eurprd07.prod.outlook.com ([fe80::2806:c34c:d469:8e87]) by HE1PR0702MB3675.eurprd07.prod.outlook.com ([fe80::2806:c34c:d469:8e87%5]) with mapi id 15.20.2814.007; Thu, 12 Mar 2020 08:59:10 +0000 From: Tommi Rantala To: Christoph Hellwig Cc: Tommi Rantala , "Darrick J. Wong" , linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] xfs: fix regression in "cleanup xfs_dir2_block_getdents" Date: Thu, 12 Mar 2020 10:57:28 +0200 Message-Id: <20200312085728.22187-1-tommi.t.rantala@nokia.com> X-Mailer: git-send-email 2.21.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: HE1PR05CA0220.eurprd05.prod.outlook.com (2603:10a6:3:fa::20) To HE1PR0702MB3675.eurprd07.prod.outlook.com (2603:10a6:7:85::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from trfedora.emea.nsn-net.net (131.228.2.19) by HE1PR05CA0220.eurprd05.prod.outlook.com (2603:10a6:3:fa::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2793.20 via Frontend Transport; Thu, 12 Mar 2020 08:59:10 +0000 X-Mailer: git-send-email 2.21.1 X-Originating-IP: [131.228.2.19] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: ed8da60a-f3f3-4309-64cb-08d7c663a136 X-MS-TrafficTypeDiagnostic: HE1PR0702MB3674: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-Forefront-PRVS: 0340850FCD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4636009)(346002)(39860400002)(376002)(366004)(396003)(136003)(199004)(6506007)(4326008)(6512007)(2906002)(316002)(66946007)(103116003)(478600001)(81156014)(66476007)(8676002)(66556008)(6666004)(36756003)(81166006)(2616005)(86362001)(8936002)(956004)(5660300002)(186003)(52116002)(26005)(54906003)(16526019)(6486002)(6916009)(1076003);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0702MB3674;H:HE1PR0702MB3675.eurprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1; Received-SPF: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GAmWhk5zZ37hujHAPkg5a8AcRZglTG9Aqdgg7VLYvtapAS3Rvo/iLdZ3UO25dlmXtSqBwqZCxpVTFGskyYCfvSId0cWuEPErbOCuoG7sL8uUj5kUhc3IFiXJ0eQIou01Nww+Jzy9MtqF6ibDLEOZEkSAIZ8zBGwf0/CKe6Z5fm2r+hM0dHrWcYs1i/IfJl5W0VIipZKeomPg7NLPYRUjSpBXqcLE2bI1qizFaeC6HvVdY1BI9+T8Uczv948RfLztwAAN1c8vJek+FLwIQctqDQltbLw4kSyvc2XyLQFusCkjKNFciUR0uieHqOKt0g9Cl3epvJZZLId+WELmDG5Ly9ML25CDq1tnUUD9eKr+tMiCxxf7OO+PkWiZi8HQG1jRYeM/2Ak2rWnVZIUvkdOUQHLSnTxlf0TUE3isaqppLRs068rwLmyYttsIQoXu16Od X-MS-Exchange-AntiSpam-MessageData: WhqjOolZcj//+918zHG9P8uNdF/nd+sY+Hqo7NJdzh9tz4q73kI8p6z3SsDC04JK4d6kiqeu+RXJbK8aw3r1DYakWnSY2XFit5nuzfqKTuA239CfLS/eT1WK8U90ZfwgGdkp56Y3AFrmOTGeF1mJxg== X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed8da60a-f3f3-4309-64cb-08d7c663a136 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2020 08:59:10.7011 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EO/3iy18H+PhgctFE8dsFT+dTJOslF60gYSnL41mqbcOiuQ2MXN52thN/OFqs4V4zMqaqBR9LY0OFIpEbCAuLdbIXpUeXFLGh9WHA7DHFcg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0702MB3674 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 263dde869bd09 ("xfs: cleanup xfs_dir2_block_getdents") introduced a getdents regression, when it converted the pointer arithmetics to offset calculations: offset is updated in the loop already for the next iteration, but the updated offset value is used incorrectly in two places, where we should have used the not-yet-updated value. This caused for example "git clean -ffdx" failures to cleanup certain directory structures when running in a container. Fix the regression by making sure we use proper offset in the loop body. Thanks to Christoph Hellwig for suggestion how to best fix the code. Cc: Christoph Hellwig Fixes: 263dde869bd09 ("xfs: cleanup xfs_dir2_block_getdents") Signed-off-by: Tommi Rantala --- fs/xfs/xfs_dir2_readdir.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c index 0d3b640cf1cc..871ec22c9aee 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c @@ -147,7 +147,7 @@ xfs_dir2_block_getdents( xfs_off_t cook; struct xfs_da_geometry *geo = args->geo; int lock_mode; - unsigned int offset; + unsigned int offset, next_offset; unsigned int end; /* @@ -173,9 +173,10 @@ xfs_dir2_block_getdents( * Loop over the data portion of the block. * Each object is a real entry (dep) or an unused one (dup). */ - offset = geo->data_entry_offset; end = xfs_dir3_data_end_offset(geo, bp->b_addr); - while (offset < end) { + for (offset = geo->data_entry_offset; + offset < end; + offset = next_offset) { struct xfs_dir2_data_unused *dup = bp->b_addr + offset; struct xfs_dir2_data_entry *dep = bp->b_addr + offset; uint8_t filetype; @@ -184,14 +185,15 @@ xfs_dir2_block_getdents( * Unused, skip it. */ if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) { - offset += be16_to_cpu(dup->length); + next_offset = offset + be16_to_cpu(dup->length); continue; } /* * Bump pointer for the next iteration. */ - offset += xfs_dir2_data_entsize(dp->i_mount, dep->namelen); + next_offset = offset + + xfs_dir2_data_entsize(dp->i_mount, dep->namelen); /* * The entry is before the desired starting point, skip it. -- 2.21.1