瀏覽代碼

btrfs: don't attempt to trim devices that don't support it

We check whether any device the file system is using supports discard in
the ioctl call, but then we attempt to trim free extents on every device
regardless of whether discard is supported.  Due to the way we mask off
EOPNOTSUPP, we can end up issuing the trim operations on each free range
on devices that don't support it, just wasting time.

Fixes: 499f377f49f08 ("btrfs: iterate over unused chunk space in FITRIM")
CC: stable@vger.kernel.org # 4.4+
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Jeff Mahoney 7 年之前
父節點
當前提交
0be88e367f
共有 1 個文件被更改,包括 4 次插入0 次删除
  1. 4 0
      fs/btrfs/extent-tree.c

+ 4 - 0
fs/btrfs/extent-tree.c

@@ -10772,6 +10772,10 @@ static int btrfs_trim_free_extents(struct btrfs_device *device,
 
 
 	*trimmed = 0;
 	*trimmed = 0;
 
 
+	/* Discard not supported = nothing to do. */
+	if (!blk_queue_discard(bdev_get_queue(device->bdev)))
+		return 0;
+
 	/* Not writeable = nothing to do. */
 	/* Not writeable = nothing to do. */
 	if (!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state))
 	if (!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state))
 		return 0;
 		return 0;