Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3610694pxb; Mon, 24 Jan 2022 13:29:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJyQXPDqk5YtoY1y6nB4GoTdyx7JeuMR66/KX/yG7HIC6B3N7swpPdIsuFv/UEKHG33UxtKt X-Received: by 2002:a17:903:18b:b0:14b:2aa6:d36 with SMTP id z11-20020a170903018b00b0014b2aa60d36mr12736375plg.127.1643059757267; Mon, 24 Jan 2022 13:29:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643059757; cv=none; d=google.com; s=arc-20160816; b=T7dDwlvl6XLmjYr3CrwZo9m9SQMcnAGsJyFdwTUwn22sd4UUtzi4ElBjF0zryQmGMB 3sc/NJSveKGAhv2xqMovYcq6ViSJiZwNOcNJEepL/hUQCCr/3PgjDjjAW5m0S7jO3OBe BR/yVOOpz7a9tDl76A70tqGwJ07+L66y5hgkMiVd2fC2eHNAmwwMkLwCSeYM583HfJLx DV3X67GBbTMaEhcpYOBTzh21mH2kmT297YpnbM6yCkIB/sVr9cPmGk6sQ+P3hTYg/z4M 0QdbrcbmrtrBfjyzcOvRuZ0Xn9Ump7pBPGe2jh7DjbWe4fKC77c2EJ7ACNEJKYdpCSwz G6wg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/C0iyZMvhSXxpFik8b37vUVt7GvXo3BGFCOKF+Qr6bQ=; b=iaHTLNB+ZO16sXcLHIXC5eFZ9Xhzrsjs4yk7Sp5e9vWUoO8KuYdfYXWbuD3k3YAqeR lEhvy2lWA1EVcZ8EFvheWxuAlpsu4CTqz92N2EnxG5n94sm7OWuHYeSbrDoBfehLB/VU JoYF1NRZWM1incf0aJwLODJSPdAP5dWO5Nb8d8aAuOAhEP7XyMBNUqEEgX6qSHUka/we D5pxKR++f8VeypawCDR06jjUQscjDgtfxiWsUPlFYjuFQSMkpMROsXYnqY5VELGjnRnd Yqvhot/pv/0V0NkUPq7xUF52WraTpzViYH2F+Qx8+PXJbnLf7zcMUNjkkEqIIZAypa1k qMWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=SZgEKaoa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bo22si415820pjb.14.2022.01.24.13.29.03; Mon, 24 Jan 2022 13:29:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=SZgEKaoa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1446407AbiAXVII (ORCPT + 99 others); Mon, 24 Jan 2022 16:08:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358518AbiAXUmZ (ORCPT ); Mon, 24 Jan 2022 15:42:25 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62F1FC04966E; Mon, 24 Jan 2022 11:52:56 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id F3D3360B43; Mon, 24 Jan 2022 19:52:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC940C340E8; Mon, 24 Jan 2022 19:52:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643053975; bh=stAZSoMPzPSb71CrbNvLWrWhQ3nE4fD5aHfcj2BwaxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SZgEKaoam9ojbWuVvHT7zYb6PRW7Xm9pav5Qlrp863Gss8KZ3pM89ubHxFpprqALY RWv0Nn/qrqfPbrWEoVT53UosoSDiwWnwGKmkv4rh+eX38LQlg6Lw5lcrd3Op7seDFM 6Y8cj4ykqkUkEOajxN3CuqB4LGPPJgP6xNDI2EvE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lukas Czerner , Jan Kara , Theodore Tso , Sasha Levin Subject: [PATCH 5.10 238/563] ext4: avoid trim error on fs with small groups Date: Mon, 24 Jan 2022 19:40:03 +0100 Message-Id: <20220124184032.672243166@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184024.407936072@linuxfoundation.org> References: <20220124184024.407936072@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Kara [ Upstream commit 173b6e383d2a204c9921ffc1eca3b87aa2106c33 ] A user reported FITRIM ioctl failing for him on ext4 on some devices without apparent reason. After some debugging we've found out that these devices (being LVM volumes) report rather large discard granularity of 42MB and the filesystem had 1k blocksize and thus group size of 8MB. Because ext4 FITRIM implementation puts discard granularity into minlen, ext4_trim_fs() declared the trim request as invalid. However just silently doing nothing seems to be a more appropriate reaction to such combination of parameters since user did not specify anything wrong. CC: Lukas Czerner Fixes: 5c2ed62fd447 ("ext4: Adjust minlen with discard_granularity in the FITRIM ioctl") Signed-off-by: Jan Kara Link: https://lore.kernel.org/r/20211112152202.26614-1-jack@suse.cz Signed-off-by: Theodore Ts'o Signed-off-by: Sasha Levin --- fs/ext4/ioctl.c | 2 -- fs/ext4/mballoc.c | 8 ++++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index cb54ea6461fd8..413bf3d2f7844 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -1123,8 +1123,6 @@ resizefs_out: sizeof(range))) return -EFAULT; - range.minlen = max((unsigned int)range.minlen, - q->limits.discard_granularity); ret = ext4_trim_fs(sb, &range); if (ret < 0) return ret; diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index d7cb7d719ee58..60aef7fdd61d0 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5815,6 +5815,7 @@ out: */ int ext4_trim_fs(struct super_block *sb, struct fstrim_range *range) { + struct request_queue *q = bdev_get_queue(sb->s_bdev); struct ext4_group_info *grp; ext4_group_t group, first_group, last_group; ext4_grpblk_t cnt = 0, first_cluster, last_cluster; @@ -5833,6 +5834,13 @@ int ext4_trim_fs(struct super_block *sb, struct fstrim_range *range) start >= max_blks || range->len < sb->s_blocksize) return -EINVAL; + /* No point to try to trim less than discard granularity */ + if (range->minlen < q->limits.discard_granularity) { + minlen = EXT4_NUM_B2C(EXT4_SB(sb), + q->limits.discard_granularity >> sb->s_blocksize_bits); + if (minlen > EXT4_CLUSTERS_PER_GROUP(sb)) + goto out; + } if (end >= max_blks) end = max_blks - 1; if (end <= first_data_blk) -- 2.34.1