Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3547582pxb; Mon, 24 Jan 2022 11:57:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJzhN7VmM9ImFOTI4D0pRC4luA7dSpv2S+AbmfJoYstsnrzTgg1PzXShhHHVMsxTZvXZZLLY X-Received: by 2002:a17:90a:5a0e:: with SMTP id b14mr3457869pjd.148.1643054245935; Mon, 24 Jan 2022 11:57:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643054245; cv=none; d=google.com; s=arc-20160816; b=amKBjSv9A72eNOqWWFOr6JvKJ+O/1bufjfpy52S6rgd5k2brBF27hHy9UIvh1b8EiP 2xY3QDk1BSD98Oa8H8adg9lIbuK+jcc01SEwos8yvhrVa4gVp3DE7eATgtnLzgLhbFnw PVLpj7Mz16lYTf8gqfJm57IlDw8zfjienl1aG3tfAibzQvLSr89w5gH0NZA43FjA+OdV TG44bHoAy0/GU3ViDIWQf8/zF2zAmKtIlU2txBLkazikJyp/cvoYOgSe8QnpbpWpXgCI ST3dHjDSEvphZS/q6BHz3DVqkNZBmseDok9JKih66MjznebrKAsmPo4WDchDrglDOnmT KF6w== 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=IzfUSXLcThQmLtyo8fw/nnTfad3KkrAlQePdQCJ8pMw=; b=z0Z5aF1hsNkiogIX8h+MdALwOds/VGE5udbvG8Pf4I4/6IRumCw4Vq0emJNBMYeRl1 vYAYW+g5RDVejrklN+3WaQY/Mktv58hCtZL1EVP0I3TB7yhs/3gdx2haiWZJXPdRtZP2 kemIuTVjBStyTqd9KxKZQpnVTe4qUHNP5zZElD9Aqzvo08CI2412onmm8gjnK7hw4QnE EoS/Wu3VKvJosfhV+pl22dJZxBGqr5WbhGfV8vhFnXT5knz5hhLmrAUNlJHpfn6y6/1g fLee7fOdeK8Wxf4Qxrb4JM+f4DMHdqpLpPQ6kyMBLKOWgG8Q5hE2Zgssc15oM/8HXIF6 VwwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="khCj/zUQ"; 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 p2si12285984pld.445.2022.01.24.11.57.13; Mon, 24 Jan 2022 11:57:25 -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="khCj/zUQ"; 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 S1343690AbiAXSv0 (ORCPT + 99 others); Mon, 24 Jan 2022 13:51:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245603AbiAXSuQ (ORCPT ); Mon, 24 Jan 2022 13:50:16 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E6B8C06177F; Mon, 24 Jan 2022 10:50:07 -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 ams.source.kernel.org (Postfix) with ESMTPS id 57ED9B81223; Mon, 24 Jan 2022 18:50:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8F3FFC340E5; Mon, 24 Jan 2022 18:50:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643050205; bh=G+qescP4ZkOlDYSWHuyWyHuhkYEpB4EQDZFd4VMvkEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=khCj/zUQvP5pizOfa+KKkseY8kWzk1J2D/y8byD5kf1WRuMT3sR0wsdcdnZXjcuEc isp4NC4sSl65VrL8+YLNbbJ2i83R0NPT9UVCXc8lm319ZGaGjhY95uQkTklos9aIY8 Au4bxTq6xEVZ9NUF9JCpTjQC5UcW8muL/1MkX6tE= 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 4.4 042/114] ext4: avoid trim error on fs with small groups Date: Mon, 24 Jan 2022 19:42:17 +0100 Message-Id: <20220124183928.406825806@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124183927.095545464@linuxfoundation.org> References: <20220124183927.095545464@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 84f8d07302efa..a224d6efb5a6d 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -610,8 +610,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 ac87f7e5d6a4f..c7be47ed71144 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5223,6 +5223,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; @@ -5241,6 +5242,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