Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp279462ybi; Wed, 29 May 2019 21:16:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqwqohdvMzSowFJtdRMpPniSXYgsqpCGYdCNxML45MJzUy8QXo8G7RRy5BKJAQcKn7vbDBDu X-Received: by 2002:a17:90a:a790:: with SMTP id f16mr1643376pjq.27.1559189759945; Wed, 29 May 2019 21:15:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559189759; cv=none; d=google.com; s=arc-20160816; b=Vrq5YweAEcZDUFhDTVVICFbM/k62i3jlPXZ6Dj9xyLiB7rgMPQAjOg0iMQpaz/d0vK TjGPY/ngClqRIC8a3agRlCa4isHr0ohzCXfDS2OP7DQgzGomoXt8lGLZGj29+HMU6uz9 RsVeroXEDrIkEBsaiQ67afC+VW/yZzY2qo69pLtnRAqBOoN07N229CGdoT6aQNbInf1p Bfjosw2ejgm2S2NTPYFl0P8zCPDCydY2nKxtoZCIbr3WICEqT/zICcnWjgWw882LkINJ kX6SRji6VHG6j3pKpvRUQMeZtpY7tiISP7igkEjzzBZ36yylO/YJkektmOvLQ/JqMU33 Pv7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=lzRTRuA/DjuBDAFNxDz9KJn8FFQfqc+w1+qF258fo60=; b=vKH7NQzZ5MubbHyhWoKqDTd52lfismK59O6ScVQE4Zdhf3yIyH6pJHnQdWN6GeFLRP SvpbhqKZihQ5FeWUnhH2yQmBxNH1GrCzWKzv8IklFQeIlf5yd4Y9nnjxXVQRwq9yyiO0 quisrj8j01oWBLewoEViF1pDqGiBJFG78NBT+0ZDD+CyoLaR96y2WFRAMtyFOCcESW29 Q3CvwvDI4MDSL4jcCo7sEf8JBDUT4DzPneaAW+002ZvwU8ZdMhFsF9IlcOX+3xN60E9g jmajFVEtSfeD3PJI3v+QLJCEJaIOpkAwanMaNx+ifaprjgCvUK/jwTOR2iJPLtE76/sE qM0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=is+vb4n+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v31si2291530pjb.22.2019.05.29.21.15.43; Wed, 29 May 2019 21:15:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=is+vb4n+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729432AbfE3ENn (ORCPT + 99 others); Thu, 30 May 2019 00:13:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:41638 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730653AbfE3DQU (ORCPT ); Wed, 29 May 2019 23:16:20 -0400 Received: from localhost (ip67-88-213-2.z213-88-67.customer.algx.net [67.88.213.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C23BF245D8; Thu, 30 May 2019 03:16:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559186179; bh=SsyLdrVu3g1kfXDJ3CVlT1l7yvhaQ2LxfJLp6ZCpiok=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=is+vb4n++RIssMOO6CEMXfM2+vmnmjbZDKIS7NjF2c/Yg1JG0O6xgwOzGNw7mp3ne 6AKaSDPM3GfYAF+zjbk8wGRklNayJYR/bQpWG7sICKlURNz4C/8wFgPxXWPX+j+5g/ zDWxxdyZtBSALJjoH/QirNu+uK6cXFa9VYrOloAg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Greg Kroah-Hartman , David Sterba Subject: [PATCH 4.19 043/276] Revert "btrfs: Honour FITRIM range constraints during free space trim" Date: Wed, 29 May 2019 20:03:21 -0700 Message-Id: <20190530030527.261513597@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030523.133519668@linuxfoundation.org> References: <20190530030523.133519668@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: David Sterba This reverts commit 8b13bb911f0c0c77d41e5ddc41ad3c127c356b8a. There is currently no corresponding patch in master due to additional changes that would be significantly different from plain revert in the respective stable branch. The range argument was not handled correctly and could cause trim to overlap allocated areas or reach beyond the end of the device. The address space that fitrim normally operates on is in logical coordinates, while the discards are done on the physical device extents. This distinction cannot be made with the current ioctl interface and caused the confusion. The bug depends on the layout of block groups and does not always happen. The whole-fs trim (run by default by the fstrim tool) is not affected. Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/extent-tree.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -10788,9 +10788,9 @@ int btrfs_error_unpin_extent_range(struc * held back allocations. */ static int btrfs_trim_free_extents(struct btrfs_device *device, - struct fstrim_range *range, u64 *trimmed) + u64 minlen, u64 *trimmed) { - u64 start = range->start, len = 0; + u64 start = 0, len = 0; int ret; *trimmed = 0; @@ -10833,8 +10833,8 @@ static int btrfs_trim_free_extents(struc if (!trans) up_read(&fs_info->commit_root_sem); - ret = find_free_dev_extent_start(trans, device, range->minlen, - start, &start, &len); + ret = find_free_dev_extent_start(trans, device, minlen, start, + &start, &len); if (trans) { up_read(&fs_info->commit_root_sem); btrfs_put_transaction(trans); @@ -10847,16 +10847,6 @@ static int btrfs_trim_free_extents(struc break; } - /* If we are out of the passed range break */ - if (start > range->start + range->len - 1) { - mutex_unlock(&fs_info->chunk_mutex); - ret = 0; - break; - } - - start = max(range->start, start); - len = min(range->len, len); - ret = btrfs_issue_discard(device->bdev, start, len, &bytes); mutex_unlock(&fs_info->chunk_mutex); @@ -10866,10 +10856,6 @@ static int btrfs_trim_free_extents(struc start += len; *trimmed += bytes; - /* We've trimmed enough */ - if (*trimmed >= range->len) - break; - if (fatal_signal_pending(current)) { ret = -ERESTARTSYS; break; @@ -10953,7 +10939,8 @@ int btrfs_trim_fs(struct btrfs_fs_info * mutex_lock(&fs_info->fs_devices->device_list_mutex); devices = &fs_info->fs_devices->devices; list_for_each_entry(device, devices, dev_list) { - ret = btrfs_trim_free_extents(device, range, &group_trimmed); + ret = btrfs_trim_free_extents(device, range->minlen, + &group_trimmed); if (ret) { dev_failed++; dev_ret = ret;