public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org, Nick Piggin <nickpiggin@yahoo.com.au>
Subject: [PATCH 04/10] radixtree: introduce radix_tree_scan_hole()
Date: Tue, 24 Jul 2007 10:00:13 +0800	[thread overview]
Message-ID: <385243123.22147@ustc.edu.cn> (raw)
Message-ID: <20070724020042.319225909@mail.ustc.edu.cn> (raw)
In-Reply-To: 20070724020009.677809022@mail.ustc.edu.cn

[-- Attachment #1: radixtree-introduce-scan-hole-data-functions.patch --]
[-- Type: text/plain, Size: 2552 bytes --]

Introduce radix_tree_scan_hole(root, index, max_scan) to scan radix tree
for the first hole. It will be used in interleaved readahead.

The implementation is dumb and obviously correct.
It can help debug(and document) the possible smart one in future.

Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
---

 include/linux/radix-tree.h |    2 +
 lib/radix-tree.c           |   36 +++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)

--- linux-2.6.22-rc6-mm1.orig/include/linux/radix-tree.h
+++ linux-2.6.22-rc6-mm1/include/linux/radix-tree.h
@@ -155,6 +155,8 @@ void *radix_tree_delete(struct radix_tre
 unsigned int
 radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
 			unsigned long first_index, unsigned int max_items);
+unsigned long radix_tree_next_hole(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,
--- linux-2.6.22-rc6-mm1.orig/lib/radix-tree.c
+++ linux-2.6.22-rc6-mm1/lib/radix-tree.c
@@ -601,6 +601,42 @@ int radix_tree_tag_get(struct radix_tree
 EXPORT_SYMBOL(radix_tree_tag_get);
 #endif
 
+/**
+ *	radix_tree_next_hole    -    find the next hole (not-present entry)
+ *	@root:		tree root
+ *	@index:		index key
+ *	@max_scan:	maximum range to search
+ *
+ *	Search the set [index, min(index+max_scan-1, MAX_INDEX)] for the lowest
+ *	indexed hole.
+ *
+ *	Returns: the index of the hole if found, otherwise returns an index
+ *	outside of the set specified (in which case 'return - index >= max_scan'
+ *	will be true).
+ *
+ *	radix_tree_next_hole may be called under rcu_read_lock. However, like
+ *	radix_tree_gang_lookup, this will not atomically search a snapshot of the
+ *	tree at a single point in time. For example, if a hole is created at index
+ *	5, then subsequently a hole is created at index 10, radix_tree_next_hole
+ *	covering both indexes may return 10 if called under rcu_read_lock.
+ */
+unsigned long radix_tree_next_hole(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_hole);
+
 static unsigned int
 __lookup(struct radix_tree_node *slot, void **results, unsigned long index,
 	unsigned int max_items, unsigned long *next_index)

--

  parent reply	other threads:[~2007-07-24  2:12 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20070724020009.677809022@mail.ustc.edu.cn>
2007-07-24  2:00 ` [PATCH 00/10] readahead cleanups and interleaved readahead take 4 Fengguang Wu
     [not found] ` <20070724020041.774421091@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 01/10] readahead: compacting file_ra_state Fengguang Wu
     [not found] ` <20070724020042.028909529@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 02/10] readahead: mmap read-around simplification Fengguang Wu
     [not found] ` <20070724020042.135275161@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 03/10] readahead: combine file_ra_state.prev_index/prev_offset into prev_pos Fengguang Wu
2007-07-24  3:52     ` Andrew Morton
     [not found]       ` <20070724034801.GA7310@mail.ustc.edu.cn>
2007-07-24  3:48         ` Fengguang Wu
2007-07-24  3:55     ` Andrew Morton
     [not found]       ` <20070724043215.GA6317@mail.ustc.edu.cn>
2007-07-24  4:32         ` Fengguang Wu
2007-07-24  4:53           ` Andrew Morton
     [not found]             ` <20070724062744.GA6686@mail.ustc.edu.cn>
2007-07-24  6:27               ` Fengguang Wu
     [not found]         ` <20070724043708.GA6627@mail.ustc.edu.cn>
2007-07-24  4:37           ` Fengguang Wu
     [not found] ` <20070724020042.319225909@mail.ustc.edu.cn>
2007-07-24  2:00   ` Fengguang Wu [this message]
     [not found] ` <20070724020042.426486651@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 05/10] readahead: basic support of interleaved reads Fengguang Wu
     [not found] ` <20070724020042.588573597@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 06/10] readahead: remove the local copy of ra in do_generic_mapping_read() Fengguang Wu
     [not found] ` <20070724020042.758542876@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 07/10] readahead: remove several readahead macros Fengguang Wu
     [not found] ` <20070724020042.882116065@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 08/10] readahead: remove the limit max_sectors_kb imposed on max_readahead_kb Fengguang Wu
     [not found] ` <20070724020043.064974174@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 09/10] filemap: trivial code cleanups Fengguang Wu
     [not found] ` <20070724020043.189132028@mail.ustc.edu.cn>
2007-07-24  2:00   ` [PATCH 10/10] filemap: convert some unsigned long to pgoff_t Fengguang Wu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=385243123.22147@ustc.edu.cn \
    --to=wfg@mail.ustc.edu.cn \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nickpiggin@yahoo.com.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox