Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3553168pxb; Mon, 24 Jan 2022 12:04:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJz0f8BFt8RlOtc0/cjX1VsIyapjezf9RvHEaMAQ7GFBjBQll70QRv5hntGgQfr+Qg3U30/s X-Received: by 2002:a17:902:70c6:b0:14a:a396:8691 with SMTP id l6-20020a17090270c600b0014aa3968691mr15844354plt.35.1643054678330; Mon, 24 Jan 2022 12:04:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643054678; cv=none; d=google.com; s=arc-20160816; b=zm81xvnc/AXcWAPRgNlab7M2Wzmk1wjgaRxs2mUwLChoMpoqleJFmIbL69XsWvrqcH 3m2eVlCYx4rnQmvosNGKjX0p1ZUX3yZ3X1DmkDKM6C8JQK5+mnMRHanUJXi85YZHZVzO CtkqNHUnxh/nw0JO6gx+qtB57PEFgTIAR17qRjz5Hdwu9n/u5D3pnVSoPPOYpsR/47XT tfj/KM8JLGLnkczo6lHMwZknACpPNz/vsv1nX+0U02iOjEDMU/zBbOomkF8mqLEtVzzk iIROylzg5LA0Ehr/8xBzKwCfHWDNZx82IRLgy/FE6zSCRj6eBwKbjrWcxofByqkGmgH4 FXMQ== 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=vfrf5Y7Wyiw27Jh5NipTn1UHsAQ8ouhdIH/E92HjdV4=; b=dHa9ju1jGJLE6eXjJRvyXs2GzxMtirhYT1qEmqiCEp69Ocm5bAz2yY4wLGKEBTUHYB 60a2ind3rRoXIc+l8e+FxnQfBSLMdk9LnjnJ5dxc+wxhKg6uhoiHR4TXgvo/afzXPArq OAQFeEM+6V8oNXvnKH83L1fKOJ3PN6dqsQn6exKIvuVz4RWGCwGKoGicelw40b46ksco Y4b517WKhXW0KgTmXIrrMrVOj1A1WRiT8DgXzRYWC365ZU0k/Y7jhXXgXp66lTTwH4cy pG1cy1X4xKJrJWIN18EqSeJ/0v/F5R/ihuliuVrJEsoyzXUEHtTJ1GgqIJArBC6F7PgY MdqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="Zox/JKMc"; 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 d10si7116881plc.432.2022.01.24.12.04.24; Mon, 24 Jan 2022 12:04:38 -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="Zox/JKMc"; 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 S1345704AbiAXTEb (ORCPT + 99 others); Mon, 24 Jan 2022 14:04:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345284AbiAXTAA (ORCPT ); Mon, 24 Jan 2022 14:00:00 -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 B0006C061772; Mon, 24 Jan 2022 10:56:48 -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 77AEEB8122F; Mon, 24 Jan 2022 18:56:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8940EC340E5; Mon, 24 Jan 2022 18:56:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643050606; bh=HxKvqnUteLCSiyLVRAp2YIgzPudHjG4+MlokUgSHc+8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zox/JKMc+OCcLPRePflYDXO+iwRWFz31Dp218IsbYwc3LCfj1KLRajqqvAghXsv7p jziWpgvDzrATBrlMSG5JUU5rI8a6hhy6zF/bdESmeAWLFeraom11lFuAQ4bEQG8603 gyEAMvyDuXiuefcH1HMHVDootNR4IqX5eTHOe3y8= 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.9 056/157] ext4: avoid trim error on fs with small groups Date: Mon, 24 Jan 2022 19:42:26 +0100 Message-Id: <20220124183934.559402099@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124183932.787526760@linuxfoundation.org> References: <20220124183932.787526760@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 75fff707beb6a..e7384a6e6a083 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -760,8 +760,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 807331da9dfc1..2a7fb2cf19b81 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5224,6 +5224,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; @@ -5242,6 +5243,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