Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3593803pxb; Mon, 24 Jan 2022 13:04:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJwnVnf4KQnhp9LuRPCFDSmkmBlY683BdcWDjYSmBsjbe7BDGn1QOtPgpy3KZI3+S6r0wsK3 X-Received: by 2002:a17:90a:2ec4:: with SMTP id h4mr155374pjs.173.1643058271159; Mon, 24 Jan 2022 13:04:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643058271; cv=none; d=google.com; s=arc-20160816; b=OpdRAIh0/2AqKi8ioQEFM0Q9VXcxRd85GWEaFVCcnG3oYb1fD62D+6/176k2VyPmlV hDT2+myg4VHboZ+g1oQ73qiFCtUsI0+dWm7zcrR1FfABr9xoyiFBXaS+5leFFv1oyyl0 DFSvWXAnUeWjYQe3puin7JA8KNftzVG8gtj91gbklBUYyamFSp+Y6az74HvZlL/+LCMt Uqrcq15B7LeDHNaE+BWwrvpuLN8X3+JveQz/LMKvq7kdNAepxuolU8p36o4CqEnby4MD 2nT4ZJwAM+RnM4plhvwHmJFQT5FvTCyD0t96P2K9Vv8XqIY4ooGIp7sRgUT3pSHApdzy 7eCg== 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=FDYwS3o/UJYPOeCT3uI1t1TUfRRVZDTEvs/71H3ltNE=; b=JYWAjlxztL/jLc3MtEy1/u2emfPqOak1zcNZvsQ/Cjb/Nql8yz22xOttAck0Z8yfJG ZyjZ+18DTnobGaDkMzJ8lQWfbTI2QNXNSsx3QNfb/3wYTyo38myUfWxzrj3K45E3IxUj l7QBOODGl5yvIE+/irFl6cbnl0e0Sr/nfhvkEnS0A6DBkXRTUQdQLzsDF5uvXGDUzm7k Q2ylmy5H50z95exKIreyWkhHuJo3oE8T1675DH2sWgRpp0/VKAmew5cOkaanl1jxPlfV ov37j2tQTntGs3pLvKRSEb0xFHNHtaBU25pMxIl62C/ZYw5TK3H5qXKxL5eec0/ZHhqT VI3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=C96JYqPN; 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 e19si15212019pgl.818.2022.01.24.13.04.17; Mon, 24 Jan 2022 13:04:31 -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=C96JYqPN; 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 S1382819AbiAXU0V (ORCPT + 99 others); Mon, 24 Jan 2022 15:26:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376449AbiAXUEB (ORCPT ); Mon, 24 Jan 2022 15:04:01 -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 57117C02B746; Mon, 24 Jan 2022 11:30:31 -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 20122B8121B; Mon, 24 Jan 2022 19:30:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3C86EC340E5; Mon, 24 Jan 2022 19:30:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643052628; bh=vqngZsueMLG4oC2+ytBbZp2PDn5MOvaO/WQkUAEK5qM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C96JYqPNzUJZEOUMbWOZH7U7AMkKjf2JO+qi+tKbLNN13U8ykvyn+xhSJ+aTQ/get kzImV1qXn8tBbIZZIlU66v3GOI1nqFcEdgKq7LnlJPNMpzOkE7YXoFYKTGQjhBIHzw ypub8CG1tE+qNbxBbPIqJPnkzHN+uE8eqMI8McbY= 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.4 122/320] ext4: avoid trim error on fs with small groups Date: Mon, 24 Jan 2022 19:41:46 +0100 Message-Id: <20220124183957.835668821@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124183953.750177707@linuxfoundation.org> References: <20220124183953.750177707@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 ba13fbb443d58..9fa20f9ba52b5 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -1120,8 +1120,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 b67ea979f0cf7..0307702d114db 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -5270,6 +5270,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; @@ -5288,6 +5289,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