Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp265793ybi; Wed, 29 May 2019 20:59:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqzkgmROLa2RpkGl1hcpGunlQMDaELiEt53AfFbET68dcLR2W801bLy/OidcTrhrH0LNf1Jk X-Received: by 2002:a62:3741:: with SMTP id e62mr1612204pfa.213.1559188789700; Wed, 29 May 2019 20:59:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559188789; cv=none; d=google.com; s=arc-20160816; b=rdFXlCfD2wPOWXGDZhmsIGCs2WReVMe1Ms7mLavLdNl1ebYwi9WZhCYIYEPYq1ZB+f 5LqJX3MgYZUhEmY0V/sBgP/9+AsTz3MiSoepb3dCMVfV/fE85oColQ5Q6DBzqOMDteZ2 fFbdyjngCepgfcPPZRZ9qxEHAI2ntFwr+TK1wTGRXpO+FyNBi1IOePZjj4cwEiW8cKbc 0ouS6paIY9JFS/3lkdmkEz4MspNOLwVUJGnErL/aE7NVPCnF63jsB4Zioz4gIEEZKgfo RD3ylWMEk7cd6d9KfbUrLaDwCDLdXOsjgmUPMkJI1EMy8TKDS13MN5ZJmLSyh3TiC3HU y4tA== 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=X48BRMa1yLgZnX/FUTNpeYpq0xTlyvPto1xD5wkIH5k=; b=KglQ1piNGNWnjfndkUetoJcfQDoEx3jIoVf2LYOMqcU4v1X14de/NkSMlKapguFQgr 81keOO2brQamulVyM3BuZd9xx4vSMJNMNnKGdxtFzVdjztTL+0tZ49IodiEBZDIm4HG6 pE/TCoHGzygoHKgfkPxkJdOp307E4wkvbIHH68ASsTs5u8GY0FjwsBIU9uRiqKAdrXCg sG4jh3+btCe8m4ks5eXQAYA9IqPFPOnfsWV31A5XnodQP6NptzOCBMUz+Hv3gkYq/Std UU2wZ5brvNcDUjNF7mPNvZMdGpirkkJM8wGPj1tW+RHRshUNpj6/fTrGBiQqGcLdm8tu 6aLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=LE7qvSQ9; 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 i96si2188320plb.210.2019.05.29.20.59.34; Wed, 29 May 2019 20:59:49 -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=LE7qvSQ9; 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 S1731812AbfE3D6h (ORCPT + 99 others); Wed, 29 May 2019 23:58:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:52284 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729968AbfE3DSo (ORCPT ); Wed, 29 May 2019 23:18:44 -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 3082E24779; Thu, 30 May 2019 03:18:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559186323; bh=ycQ2WHH2xNsssHbMyy4jABS/gcIb3YQqerQeBf5PbcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LE7qvSQ9syFLac8m/qdAK/Bb8XGfVjT8XtQIAuyYKMZ/+AXsKic9a/VML3VOZgxiB JWWYFu8H76uAEQJtaIBF7IyvDVSCk04oRPf3INhSyvKpebuSqJXWcyeFtDk8l1wD24 wd8H9EC9du5MUn5OjfWQ2nxkbiuhaYRInEz3JxyI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Greg Kroah-Hartman , David Sterba Subject: [PATCH 4.14 035/193] Revert "btrfs: Honour FITRIM range constraints during free space trim" Date: Wed, 29 May 2019 20:04:49 -0700 Message-Id: <20190530030454.199169279@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030446.953835040@linuxfoundation.org> References: <20190530030446.953835040@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 b327ff8a9b5767ce39db650d468fb124b48974a5. 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 @@ -11057,9 +11057,9 @@ int btrfs_error_unpin_extent_range(struc * transaction. */ 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; @@ -11095,8 +11095,8 @@ static int btrfs_trim_free_extents(struc refcount_inc(&trans->use_count); spin_unlock(&fs_info->trans_lock); - 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) btrfs_put_transaction(trans); @@ -11108,16 +11108,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); up_read(&fs_info->commit_root_sem); mutex_unlock(&fs_info->chunk_mutex); @@ -11128,10 +11118,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; @@ -11215,7 +11201,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;