Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932202Ab3GCIfa (ORCPT ); Wed, 3 Jul 2013 04:35:30 -0400 Received: from LGEMRELSE1Q.lge.com ([156.147.1.111]:62627 "EHLO LGEMRELSE1Q.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754824Ab3GCIf1 (ORCPT ); Wed, 3 Jul 2013 04:35:27 -0400 X-AuditID: 9c93016f-b7b26ae000002351-e6-51d3e2444bd3 From: Joonsoo Kim To: Andrew Morton Cc: Mel Gorman , David Rientjes , Glauber Costa , Johannes Weiner , KOSAKI Motohiro , Rik van Riel , Hugh Dickins , Minchan Kim , Jiang Liu , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Joonsoo Kim , Joonsoo Kim Subject: [RFC PATCH 3/5] radix-tree: introduce radix_tree_[next/prev]_present() Date: Wed, 3 Jul 2013 17:34:18 +0900 Message-Id: <1372840460-5571-4-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1372840460-5571-1-git-send-email-iamjoonsoo.kim@lge.com> References: <1372840460-5571-1-git-send-email-iamjoonsoo.kim@lge.com> X-Brightmail-Tracker: AAAAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2139 Lines: 70 Signed-off-by: Joonsoo Kim diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index ffc444c..045b325 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h @@ -230,6 +230,10 @@ unsigned long radix_tree_next_hole(struct radix_tree_root *root, unsigned long index, unsigned long max_scan); unsigned long radix_tree_prev_hole(struct radix_tree_root *root, unsigned long index, unsigned long max_scan); +unsigned long radix_tree_next_present(struct radix_tree_root *root, + unsigned long index, unsigned long max_scan); +unsigned long radix_tree_prev_present(struct radix_tree_root *root, + unsigned long index, unsigned long max_scan); int radix_tree_preload(gfp_t gfp_mask); void radix_tree_init(void); void *radix_tree_tag_set(struct radix_tree_root *root, diff --git a/lib/radix-tree.c b/lib/radix-tree.c index e796429..e02e3b8 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -984,6 +984,40 @@ unsigned long radix_tree_prev_hole(struct radix_tree_root *root, } EXPORT_SYMBOL(radix_tree_prev_hole); +unsigned long radix_tree_next_present(struct radix_tree_root *root, + unsigned long index, unsigned long max_scan) +{ + unsigned long i; + + for (i = 0; i < max_scan; i++) { + if (radix_tree_lookup(root, index)) + break; + index++; + if (index == 0) + break; + } + + return index; +} +EXPORT_SYMBOL(radix_tree_next_present); + +unsigned long radix_tree_prev_present(struct radix_tree_root *root, + unsigned long index, unsigned long max_scan) +{ + unsigned long i; + + for (i = 0; i < max_scan; i++) { + if (radix_tree_lookup(root, index)) + break; + index--; + if (index == ULONG_MAX) + break; + } + + return index; +} +EXPORT_SYMBOL(radix_tree_prev_present); + /** * radix_tree_gang_lookup - perform multiple lookup on a radix tree * @root: radix tree root -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/