Received: by 2002:ab2:604e:0:b0:1f4:60f3:cb4a with SMTP id a14csp10444lqm; Fri, 5 Apr 2024 07:24:21 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWVBdTqYcjBHOW3f+xthyQUT3Jz78pOWh8XkF6eaJmFmZV6v8vnne3AxGPVCQqjNQZn44F/Mzi0fY8R/lH0sE5g/Gx9Pupt8oXNmIkkeg== X-Google-Smtp-Source: AGHT+IGZartJ8Zgz7wmr6R/RUodm8T2VKc3Nnh0qwXXGcJIatlAGv90jnCMe7xybfBkBMjthFptn X-Received: by 2002:a9d:6d05:0:b0:6e6:9783:bba9 with SMTP id o5-20020a9d6d05000000b006e69783bba9mr1701803otp.22.1712327061229; Fri, 05 Apr 2024 07:24:21 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712327061; cv=pass; d=google.com; s=arc-20160816; b=y8hwHWHLXUe4/+JN5VcbIVJB/OuHAn15J9J9eOmdlUXWITGkrn2gJZSKysbkwROEKd x/y7kh2JRakwnv/kbF5TSuF04jIqlv2n+sf/g3Fz3S3S2ai9lekHwyzeQWk7XvsEQTgo 82HdwJvs0pLmwdHoERRM/6sKBKqUqSI1BSS4bl74J9aENUkxwbmHqhM16lCurArnwrxN 0Yzd83P+/srH2Dd3j5tzINwEf7dgs4CrwCBWz3kREbgWLnVh1zz+/bsME1/5OMQeTvgL 1NYDU+giZOdYMch7pQtjm0uCMn5GwxU/JtsGujUFGBNMGiK/CYXOk3NV2BvugP1iElEZ CWgQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=WhnFM4FfFSVqaDsm4zl/Ss6PMlAqm2ARJf8bLZnxGKQ=; fh=mFjBxWtsA9NPNe3Gkwd5L+dWph7pq0ADh54Ay2V+KKY=; b=lBGSZ49w6FRIW/drAxuRkd1WyEIQs1+Xya5aR9gBNkg+XaoBU93idKlGElBDO2db2O qtQKHLmsGJ20ZDuJzjxytF8TmgWg1DdKq/EhsTxemEcFZQhhbDGy9XeUuyJHn8ZRcxR2 PmZCl8MSMWKpIC3OcwFRPuv8Rl4YHoJzaYYq3dlTZqCRGIgiVt3QtW/o/7AxV+ObhGki 7dBNWp1lGVLQ8E9erNBIt91/yQ1GL6Nz6lCyFTskdghPY/xAdwFWqD1kz27qLVoepFi3 xeTqKzEpoonrMu3DzJeKd7hTtEk0cXVOkk96Mkgf/7ScRYenFmHBeIC7RxyBHiMrivVR qT5g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=GehEy9or; arc=pass (i=1 spf=pass spfdomain=linux.dev dkim=pass dkdomain=linux.dev dmarc=pass fromdomain=linux.dev); spf=pass (google.com: domain of linux-ext4+bounces-1900-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-ext4+bounces-1900-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id s15-20020ad44b2f000000b0069906840dd4si1789821qvw.517.2024.04.05.07.24.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 07:24:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-ext4+bounces-1900-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=@linux.dev header.s=key1 header.b=GehEy9or; arc=pass (i=1 spf=pass spfdomain=linux.dev dkim=pass dkdomain=linux.dev dmarc=pass fromdomain=linux.dev); spf=pass (google.com: domain of linux-ext4+bounces-1900-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-ext4+bounces-1900-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev 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 5D0EE1C2297E for ; Fri, 5 Apr 2024 14:24:20 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B759116EC02; Fri, 5 Apr 2024 14:24:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="GehEy9or" X-Original-To: linux-ext4@vger.kernel.org Received: from out-186.mta1.migadu.com (out-186.mta1.migadu.com [95.215.58.186]) (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 872A016EBE8 for ; Fri, 5 Apr 2024 14:24:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.186 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712327053; cv=none; b=JVunROVnB4CodkHSMUi3gkCpv9vZQuXXbrj1jvDWbPM8ajeibJnUnVyB01jFOwan5Y8FBVxFp337spS7ncYdE9dpduKvw07wsykNMhAqgsdvf5m6zZ97PL7Sfk9TnR4mUI/monBvOLflFvc8P3ynB4R4Z+ZY9o6QqZFGu8/VVls= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712327053; c=relaxed/simple; bh=2R4bn6h/V9QwnqF8wFmKHZ/kWIHOLLv5epWCfrESK1A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WmI79UX8pWYtmW0SdWIqLCwEir843X1xSXA43mqQo7sy0qxzsv1yUZLC91m0QISgoi1EgRXFVBfxVfoZFZwApRkuRg6jcNyUNd2OdjRBCjzOUyhwiTlypnG18C35xCibpvjBINyu2ftBglgAKRtpQ4VUnwspxIxXv+wieRYDXC0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=GehEy9or; arc=none smtp.client-ip=95.215.58.186 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1712327049; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WhnFM4FfFSVqaDsm4zl/Ss6PMlAqm2ARJf8bLZnxGKQ=; b=GehEy9orb6IBMwrVfiZKS+Swt93Pd852Awsk4SJYrTeD0dUofhk3AEzqttQ0piwgHio9TH Q/51z0dztbDfXsLh+iy41ilSvPoCptRWVNQ6TJCLX5Gm2jNmvcfcCmJI/SIK4hnxvnDLJ0 PrnrSu91RhqBAldbEjaGuVd42Cn746k= From: "Luis Henriques (SUSE)" To: Theodore Ts'o , Andreas Dilger Cc: linux-ext4@vger.kernel.org, "Luis Henriques (SUSE)" Subject: [PATCH v3 1/4] e2fsck: update quota accounting after directory optimization Date: Fri, 5 Apr 2024 15:24:02 +0100 Message-ID: <20240405142405.12312-2-luis.henriques@linux.dev> In-Reply-To: <20240405142405.12312-1-luis.henriques@linux.dev> References: <20240405142405.12312-1-luis.henriques@linux.dev> Precedence: bulk X-Mailing-List: linux-ext4@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT In "Pass 3A: Optimizing directories", a directory may have it's size reduced. If that happens and quota is enabled in the filesystem, the quota information will be incorrect because it doesn't take the rehash into account. This issue was detected by running fstest ext4/014. This patch simply updates the quota data accordingly, after the directory is written and it's size has been updated. Link: https://bugzilla.kernel.org/show_bug.cgi?id=218626 Signed-off-by: Luis Henriques (SUSE) --- e2fsck/rehash.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c index c1da7d52724e..4847d172e5fe 100644 --- a/e2fsck/rehash.c +++ b/e2fsck/rehash.c @@ -987,14 +987,18 @@ errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino, { ext2_filsys fs = ctx->fs; errcode_t retval; - struct ext2_inode inode; + struct ext2_inode_large inode; char *dir_buf = 0; struct fill_dir_struct fd = { NULL, NULL, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0 }; struct out_dir outdir = { 0, 0, 0, 0 }; - struct name_cmp_ctx name_cmp_ctx = {0, NULL}; + struct name_cmp_ctx name_cmp_ctx = {0, NULL}; + __u64 osize; - e2fsck_read_inode(ctx, ino, &inode, "rehash_dir"); + e2fsck_read_inode_full(ctx, ino, EXT2_INODE(&inode), + sizeof(inode), "rehash_dir"); + + osize = EXT2_I_SIZE(&inode); if (ext2fs_has_feature_inline_data(fs->super) && (inode.i_flags & EXT4_INLINE_DATA_FL)) @@ -1013,7 +1017,7 @@ errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino, fd.ino = ino; fd.ctx = ctx; fd.buf = dir_buf; - fd.inode = &inode; + fd.inode = EXT2_INODE(&inode); fd.dir = ino; if (!ext2fs_has_feature_dir_index(fs->super) || (inode.i_size / fs->blocksize) < 2) @@ -1092,14 +1096,25 @@ resort: goto errout; } - retval = write_directory(ctx, fs, &outdir, ino, &inode, fd.compress); + retval = write_directory(ctx, fs, &outdir, ino, EXT2_INODE(&inode), + fd.compress); if (retval) goto errout; + if ((osize > EXT2_I_SIZE(&inode)) && + (ino != quota_type2inum(PRJQUOTA, fs->super)) && + (ino != fs->super->s_orphan_file_inum) && + (ino == EXT2_ROOT_INO || ino >= EXT2_FIRST_INODE(ctx->fs->super)) && + !(inode.i_flags & EXT4_EA_INODE_FL)) { + quota_data_sub(ctx->qctx, &inode, + ino, osize - EXT2_I_SIZE(&inode)); + } + if (ctx->options & E2F_OPT_CONVERT_BMAP) retval = e2fsck_rebuild_extents_later(ctx, ino); else - retval = e2fsck_check_rebuild_extents(ctx, ino, &inode, pctx); + retval = e2fsck_check_rebuild_extents(ctx, ino, + EXT2_INODE(&inode), pctx); errout: ext2fs_free_mem(&dir_buf); ext2fs_free_mem(&fd.harray);