From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@osdl.org>,
linux-kernel@vger.kernel.org,
Nick Piggin <nickpiggin@yahoo.com.au>
Subject: [PATCH 7/8] introduce radix_tree_scan_hole()
Date: Sat, 21 Jul 2007 11:57:40 +0800 [thread overview]
Message-ID: <384990325.64908@ustc.edu.cn> (raw)
Message-ID: <20070721035851.946351617@mail.ustc.edu.cn> (raw)
In-Reply-To: 20070721035733.951838089@mail.ustc.edu.cn
[-- Attachment #1: radixtree-introduce-scan-hole-data-functions.patch --]
[-- Type: text/plain, Size: 2263 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 | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
--- linux-2.6.22-git15.orig/include/linux/radix-tree.h
+++ linux-2.6.22-git15/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_scan_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-git15.orig/lib/radix-tree.c
+++ linux-2.6.22-git15/lib/radix-tree.c
@@ -599,6 +599,40 @@ int radix_tree_tag_get(struct radix_tree
EXPORT_SYMBOL(radix_tree_tag_get);
#endif
+static unsigned long
+radix_tree_scan_hole_dumb(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;
+ if (++index == 0)
+ break;
+ }
+
+ return index;
+}
+
+/**
+ * radix_tree_scan_hole - scan for hole
+ * @root: radix tree root
+ * @index: index key
+ * @max_scan: advice on max items to scan (it may scan a little more)
+ *
+ * Scan forward from @index for a hole/empty item, stop when
+ * - hit hole
+ * - wrap-around to index 0
+ * - @max_scan or more items scanned
+ */
+unsigned long radix_tree_scan_hole(struct radix_tree_root *root,
+ unsigned long index, unsigned long max_scan)
+{
+ return radix_tree_scan_hole_dumb(root, index, max_scan);
+}
+EXPORT_SYMBOL(radix_tree_scan_hole);
+
static unsigned int
__lookup(struct radix_tree_node *slot, void **results, unsigned long index,
unsigned int max_items, unsigned long *next_index)
--
next prev parent reply other threads:[~2007-07-21 4:01 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20070721035733.951838089@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 0/8] readahead cleanups and interleaved readahead take 2 Fengguang Wu
[not found] ` <20070721035850.977231489@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 1/8] compacting file_ra_state Fengguang Wu
[not found] ` <20070721040644.GA9750@mail.ustc.edu.cn>
2007-07-21 4:06 ` Fengguang Wu
2007-07-21 4:27 ` Linus Torvalds
[not found] ` <20070721042939.GA28875@mail.ustc.edu.cn>
2007-07-21 4:29 ` Fengguang Wu
2007-07-21 5:57 ` Andi Kleen
2007-07-21 6:03 ` Andrew Morton
2007-07-21 6:13 ` Linus Torvalds
2007-07-21 6:17 ` Andi Kleen
[not found] ` <20070721035851.185553787@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 2/8] mmap read-around simplification Fengguang Wu
[not found] ` <20070721035851.321030363@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 3/8] combine file_ra_state.prev_index/prev_offset into prev_pos Fengguang Wu
[not found] ` <20070721035851.461364420@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 4/8] trivial filemap.c cleanups Fengguang Wu
[not found] ` <20070721035851.638623804@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 5/8] remove several readahead macros Fengguang Wu
[not found] ` <20070721035851.791763729@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 6/8] remove the limit max_sectors_kb imposed on max_readahead_kb Fengguang Wu
[not found] ` <20070721035851.946351617@mail.ustc.edu.cn>
2007-07-21 3:57 ` Fengguang Wu [this message]
[not found] ` <20070721035852.104255316@mail.ustc.edu.cn>
2007-07-21 3:57 ` [PATCH 8/8] basic support of interleaved reads 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=384990325.64908@ustc.edu.cn \
--to=wfg@mail.ustc.edu.cn \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--cc=torvalds@linux-foundation.org \
/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