Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp310391ybi; Wed, 29 May 2019 22:01:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqykttH3lBnUoCavNooliH5aw80W/vEAzgi/4jP6mVWeC3rMHtLNw5aqr0EFlrlmOCjb154O X-Received: by 2002:a63:e04:: with SMTP id d4mr1956147pgl.331.1559192464392; Wed, 29 May 2019 22:01:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559192464; cv=none; d=google.com; s=arc-20160816; b=cJqiTtRLkoXpfvkcBoopmINo2wcDda9za8LHRhWBU4NhfHd0g5ffrkkDvZ7TXWeAa8 sjp9yi2ixP5V2eXalsNkcCHf4ucHc7gQ1+Gx4ZCvNMcPsKG0jR0Yk25IxfS4LYWxXZlj Aq86/MG3qnm5zTbm5YdN70q2wbCQOKJdPKidNirBMwAXaUmajhY0VoMYihkg6fAjLSrB fAkgNoPzG/+OkDB5huxwxdEE9L2lJv2+gWjAA21eXe7IcFEpCiMJJ3mJXu37pCBUn37P /H5IwUqoZoOh+piGjGg1n9Iy3skKrV5GSaATxG7u8ZkKfdHSyWq8R2RcllQ6wFqUaJUF KFEw== 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=rG4PKejhW6De4nOa0i8tp9DDo7tZDhlflVlko628yN8=; b=eAAK6F7NFrwV/DeLWcIEj6PZygB1WueTC34TBXwxUK7WhEiNYQVZjIw9s5F066YHn/ 0BTkL5nQOSmoS50IFefJJmTpF3IL+u4NkmZQqcl1UGKsIDuUjJ8hq+q3na4TPeVdiLVV tTCIG/mUHxt6ZJN/6M8OozgZQ9mzkik81wijIHXZRyFtU8YeeyC7Y6BfEaSwH1Q5szE3 hi6n8Y67+2NUQB4+IZSLGc4PGW2r1qINJcnQSidJdhCQMTWtgoROeoPwVGwJZ8qeyr2d CtH8ykVkX8CQ4qhsDpDu6Fhzvv2nUwFpy4ayZZzY8hlBEyMxszGcG7cAY2uFOeeOt1aZ mLSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kKyPDGIB; 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 f7si2062567pgi.408.2019.05.29.22.00.47; Wed, 29 May 2019 22:01:04 -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=kKyPDGIB; 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 S1728103AbfE3E6w (ORCPT + 99 others); Thu, 30 May 2019 00:58:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:45216 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727755AbfE3DJq (ORCPT ); Wed, 29 May 2019 23:09:46 -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 A0C0D24494; Thu, 30 May 2019 03:09:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559185785; bh=abn3KPBKo2qCIsra1vlSiSXXwMXs7kTg20znn22MDr0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kKyPDGIByBBXfIjMSd0pP9I7KXuh6nk5qz6W2gBZovWBdIF7bxktOTiljlYfvYpsp 1ME6TneSbcTSmkEoWxe0Wvgd0KqYED1Z9u1AkyzmjOJ2STnu2ASufNzZo0bJKHBPj7 WCP3EqN2I5Tl/bUBURTjTJkGcooe0zjgBByavh4Q= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Greg Kroah-Hartman , David Sterba Subject: [PATCH 5.1 044/405] Revert "btrfs: Honour FITRIM range constraints during free space trim" Date: Wed, 29 May 2019 20:00:42 -0700 Message-Id: <20190530030543.025644816@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030540.291644921@linuxfoundation.org> References: <20190530030540.291644921@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 eb432217d775a90c061681c0dfa3c7abfba75123. 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 @@ -11314,9 +11314,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; @@ -11359,8 +11359,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); @@ -11373,16 +11373,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); @@ -11392,10 +11382,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; @@ -11479,7 +11465,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;