All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wu Fengguang <wfg@mail.ustc.edu.cn>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org, nickpiggin@yahoo.com.au
Subject: Re: [minor fix] radixtree: regulate tag get return value
Date: Sun, 4 Jun 2006 19:17:54 +0800	[thread overview]
Message-ID: <349419864.11444@ustc.edu.cn> (raw)
Message-ID: <20060604111754.GA5984@mail.ustc.edu.cn> (raw)
In-Reply-To: <20060604021105.1ce7d727.akpm@osdl.org>

On Sun, Jun 04, 2006 at 02:11:05AM -0700, Andrew Morton wrote:
> On Sun, 4 Jun 2006 16:45:48 +0800
> Wu Fengguang <wfg@mail.ustc.edu.cn> wrote:
> 
> > Andrew, this small patch makes the radixtree tester program from
> >         http://www.zip.com.au/~akpm/linux/patches/stuff/rtth.tar.gz
> > run OK, with the latest radix tree code in linux-2.6.17-rc5-mm2.
> > 
> > It regulates the return value to 0/1 for functions
> > radix_tree_tag_get() and radix_tree_tagged().
> > 
> 
> Well yes.  But it slows down the kernel.  It would be better to fix rtth.

OK. I'll send an updated patch to directly fix the for-rtth radix_tree_tag_get().

> > ---
> > 
> > --- linux.orig/lib/radix-tree.c
> > +++ linux/lib/radix-tree.c
> > @@ -156,7 +156,7 @@ static inline void tag_clear(struct radi
> >  static inline int tag_get(struct radix_tree_node *node, unsigned int tag,
> >  		int offset)
> >  {
> > -	return test_bit(offset, node->tags[tag]);
> > +	return !! test_bit(offset, node->tags[tag]);
> >  }
> 
> test_bit() is (sadly) defined to return 0 or 1.  Did this really make a difference?

Interesting. I got the following gdb outputs. Note that tag_get()
returns -1 and root_tag_get() returns 1048576.

(gdb) n
399             while (height > 0) {
(gdb) n
402                     offset = (index >> shift) & RADIX_TREE_MAP_MASK;
(gdb)
403                     if (!tag_get(slot, tag, offset))
(gdb)
404                             tag_set(slot, tag, offset);
(gdb) p tag_get(slot, tag, offset)
$14 = 0
(gdb) n
405                     slot = slot->slots[offset];
(gdb) p tag_get(slot, tag, offset)
$15 = -1
(gdb) n
406                     BUG_ON(slot == NULL);
(gdb) n
407                     shift -= RADIX_TREE_MAP_SHIFT;
(gdb) n
408                     height--;
(gdb) n
399             while (height > 0) {
(gdb) n
412             if (slot && !root_tag_get(root, tag))
(gdb) p root_tag_get(root, tag)
$16 = 0
(gdb) n
413                     root_tag_set(root, tag);
(gdb) n
415             return slot;
(gdb) p root_tag_get(root, tag)
$17 = 1048576

> >  static inline void root_tag_set(struct radix_tree_root *root, unsigned int tag)
> > @@ -177,7 +177,7 @@ static inline void root_tag_clear_all(st
> >  
> >  static inline int root_tag_get(struct radix_tree_root *root, unsigned int tag)
> >  {
> > -	return root->gfp_mask & (1 << (tag + __GFP_BITS_SHIFT));
> > +	return !! (root->gfp_mask & (1 << (tag + __GFP_BITS_SHIFT)));
> >  }
> >  
> 

  reply	other threads:[~2006-06-04 11:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-04  8:45 [minor fix] radixtree: regulate tag get return value Wu Fengguang
2006-06-04  8:45 ` Wu Fengguang
2006-06-04  9:11   ` Andrew Morton
2006-06-04 11:17     ` Wu Fengguang [this message]
2006-06-04 11:17       ` Wu Fengguang
2006-06-04 20:18         ` Andrew Morton
2006-06-04 11:26     ` [PATCH] radixtree: normalize radix_tree_tag_get() " Wu Fengguang
2006-06-04 11:26       ` Wu Fengguang
  -- strict thread matches above, loose matches on Subject: below --
2006-06-05  3:07 [minor fix] radixtree: regulate tag get " Chuck Ebbert

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=349419864.11444@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.