From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-288557-1516221027-2-15323077790842034219 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES unknown, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='org', MailFrom='org' X-Spam-charsets: X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1516221027; b=p/CWW2ltDgVJpz6xF7uP9Z70CNnvWIwox7IcHQdeswbwsQi wUU6MRegtfzPtD/OixeLfzf3/q8aG6F8Aci0b9QzBm7rdtfcyjV/BnsbC8cS6CY8 3pFodl+gBGpsLcdZlueAFF1P0+vr9vFZXCpjBSkHWs2LryKLjrkRKYaHhnAgBmAG DoRkTyz5UnD/j5/TtKI5twrlkM7nFau1gmO4DKkGhnCIW/jmgxZ9DfzWxSO0LluS 54DaBYKLDRnLdmCKg7ALDdfiW2FlVMUrRKbjA2qHgv/p502s8UyYRlxZlLUdxR2k 0oZZi46qc5RvF4PytgCEdXM3uN8PqRL9Gx63bnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :in-reply-to:references:sender:list-id; s=arctest; t=1516221027; bh=CyedNFJHULvSUsZJq7jg50u0IbgZEUa01dy2xlHrYtQ=; b=tIAa8RjgY5p5 haVIygvQovCdY8pcvPRXLlMlefSDd+Z/H5y0OgBgwfi7hI0IscaekfhC0wVtWzc8 Z9ZgK8WRJJXqLRIKLelu6k2iU45hMst7zTSggS3EuuguuDjR+8/Zs0v/HFd6KH6J 48cVQys0gaHxbuMc+wjRmntocqaeRlWzp8+WJqU3Hi3Z4/VG6hgPzix4TKI8hBab tqnWM37pm+0BCIdXJ6e1Y63aFVA+vpoN5Fo49uZO+QreMV8buIJpS+KsC8HQWBd1 iuWIlWPp/i8+/Jsw4dpiMk9AGSc3YjVfTn0eTF9cZqAwpPwa46LJiYzxhdjQl8Hs bhJjXFf/Xg== ARC-Authentication-Results: i=1; mx1.messagingengine.com; arc=none (no signatures found); dkim=fail (message has been altered; 2048-bit rsa key sha256) header.d=infradead.org header.i=@infradead.org header.b=G7iW+sEW x-bits=2048 x-keytype=rsa x-algorithm=sha256 x-selector=bombadil.20170209; dmarc=none (p=none,has-list-id=yes,d=none) header.from=infradead.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=infradead.org header.result=pass header_is_org_domain=yes Authentication-Results: mx1.messagingengine.com; arc=none (no signatures found); dkim=fail (message has been altered; 2048-bit rsa key sha256) header.d=infradead.org header.i=@infradead.org header.b=G7iW+sEW x-bits=2048 x-keytype=rsa x-algorithm=sha256 x-selector=bombadil.20170209; dmarc=none (p=none,has-list-id=yes,d=none) header.from=infradead.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=infradead.org header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932194AbeAQU36 (ORCPT ); Wed, 17 Jan 2018 15:29:58 -0500 Received: from bombadil.infradead.org ([65.50.211.133]:40935 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753995AbeAQUXD (ORCPT ); Wed, 17 Jan 2018 15:23:03 -0500 From: Matthew Wilcox To: linux-kernel@vger.kernel.org Cc: Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-nilfs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-usb@vger.kernel.org, Bjorn Andersson , Stefano Stabellini , iommu@lists.linux-foundation.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, intel-gfx@lists.freedesktop.org, cgroups@vger.kernel.org, linux-sh@vger.kernel.org, David Howells Subject: [PATCH v6 87/99] btrfs: Convert reada_extents to XArray Date: Wed, 17 Jan 2018 12:21:51 -0800 Message-Id: <20180117202203.19756-88-willy@infradead.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180117202203.19756-1-willy@infradead.org> References: <20180117202203.19756-1-willy@infradead.org> Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: From: Matthew Wilcox Straightforward conversion. Signed-off-by: Matthew Wilcox --- fs/btrfs/reada.c | 32 +++++++++++++++++--------------- fs/btrfs/volumes.c | 2 +- fs/btrfs/volumes.h | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/fs/btrfs/reada.c b/fs/btrfs/reada.c index ef8e84ff2012..8100f1565250 100644 --- a/fs/btrfs/reada.c +++ b/fs/btrfs/reada.c @@ -438,13 +438,14 @@ static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info, continue; } prev_dev = dev; - ret = radix_tree_insert(&dev->reada_extents, index, re); + ret = xa_insert(&dev->reada_extents, index, re, + GFP_NOFS & ~__GFP_DIRECT_RECLAIM); if (ret) { while (--nzones >= 0) { dev = re->zones[nzones]->device; BUG_ON(dev == NULL); /* ignore whether the entry was inserted */ - radix_tree_delete(&dev->reada_extents, index); + xa_erase(&dev->reada_extents, index); } radix_tree_delete(&fs_info->reada_tree, index); spin_unlock(&fs_info->reada_lock); @@ -504,7 +505,7 @@ static void reada_extent_put(struct btrfs_fs_info *fs_info, for (i = 0; i < re->nzones; ++i) { struct reada_zone *zone = re->zones[i]; - radix_tree_delete(&zone->device->reada_extents, index); + xa_erase(&zone->device->reada_extents, index); } spin_unlock(&fs_info->reada_lock); @@ -644,6 +645,7 @@ static int reada_start_machine_dev(struct btrfs_device *dev) int mirror_num = 0; struct extent_buffer *eb = NULL; u64 logical; + unsigned long index; int ret; int i; @@ -660,19 +662,19 @@ static int reada_start_machine_dev(struct btrfs_device *dev) * a contiguous block of extents, we could also coagulate them or use * plugging to speed things up */ - ret = radix_tree_gang_lookup(&dev->reada_extents, (void **)&re, - dev->reada_next >> PAGE_SHIFT, 1); - if (ret == 0 || re->logical > dev->reada_curr_zone->end) { + index = dev->reada_next >> PAGE_SHIFT; + re = xa_find(&dev->reada_extents, &index, ULONG_MAX, XA_PRESENT); + if (!re || re->logical > dev->reada_curr_zone->end) { ret = reada_pick_zone(dev); if (!ret) { spin_unlock(&fs_info->reada_lock); return 0; } - re = NULL; - ret = radix_tree_gang_lookup(&dev->reada_extents, (void **)&re, - dev->reada_next >> PAGE_SHIFT, 1); + index = dev->reada_next >> PAGE_SHIFT; + re = xa_find(&dev->reada_extents, &index, ULONG_MAX, + XA_PRESENT); } - if (ret == 0) { + if (!re) { spin_unlock(&fs_info->reada_lock); return 0; } @@ -828,11 +830,11 @@ static void dump_devs(struct btrfs_fs_info *fs_info, int all) cnt = 0; index = 0; while (all) { - struct reada_extent *re = NULL; + struct reada_extent *re; - ret = radix_tree_gang_lookup(&device->reada_extents, - (void **)&re, index, 1); - if (ret == 0) + re = xa_find(&device->reada_extents, &index, ULONG_MAX, + XA_PRESENT); + if (!re) break; pr_debug(" re: logical %llu size %u empty %d scheduled %d", re->logical, fs_info->nodesize, @@ -848,7 +850,7 @@ static void dump_devs(struct btrfs_fs_info *fs_info, int all) } } pr_cont("\n"); - index = (re->logical >> PAGE_SHIFT) + 1; + index++; if (++cnt > 15) break; } diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 8e683799b436..304c2ef4c557 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -248,7 +248,7 @@ static struct btrfs_device *__alloc_device(void) atomic_set(&dev->dev_stats_ccnt, 0); btrfs_device_data_ordered_init(dev); xa_init(&dev->reada_zones); - INIT_RADIX_TREE(&dev->reada_extents, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); + xa_init(&dev->reada_extents); return dev; } diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index aeabe03d3e44..0e0c04e2613c 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -140,7 +140,7 @@ struct btrfs_device { u64 reada_next; struct reada_zone *reada_curr_zone; struct xarray reada_zones; - struct radix_tree_root reada_extents; + struct xarray reada_extents; /* disk I/O failure stats. For detailed description refer to * enum btrfs_dev_stat_values in ioctl.h */ -- 2.15.1