26 Jun, 2006

1 commit


23 Jun, 2006

3 commits

  • The comment states: 'Setting a tag on a not-present item is a BUG.' Hence
    if 'index' is larger than the maxindex; the item _cannot_ be presen; it
    should also be a BUG.

    Also, this allows the following statement (assume a fresh tree):

    radix_tree_tag_set(root, 16, 1);

    to fail silently, but when preceded by:

    radix_tree_insert(root, 32, item);

    it would BUG, because the height has been extended by the insert.

    In neither case was 16 present.

    Signed-off-by: Peter Zijlstra
    Acked-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • Reduce radix tree node memory usage by about a factor of 4 for small files
    (< 64K). There are pointer traversal and memory usage costs for large
    files with dense pagecache.

    Signed-off-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     
  • The ability to have height 0 radix trees (a direct pointer to the data item
    rather than going through a full node->slot) quietly disappeared with
    old-2.6-bkcvs commit ffee171812d51652f9ba284302d9e5c5cc14bdfd. On 64-bit
    machines this causes nearly 600 bytes to be used for every gfp_mask bits.

    Simplify radix_tree_delete's complex tag clearing arrangement (which would
    become even more complex) by just falling back to tag clearing functions
    (the pagecache radix-tree never uses this path anyway, so the icache
    savings will mean it's actually a speedup).

    On my 4GB G5, this saves 8MB RAM per kernel kernel source+object tree in
    pagecache.

    Pagecache lookup, insertion, and removal speed for small files will also be
    improved.

    This makes RCU radix tree harder, but it's worth it.

    Signed-off-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     

26 Mar, 2006

1 commit

  • Documentation changes to help radix tree users avoid overrunning the tags
    array. RADIX_TREE_TAGS moves to linux/radix-tree.h and is now known as
    RADIX_TREE_MAX_TAGS (Nick Piggin's idea). Tag parameters are changed to
    unsigned, and some comments are updated.

    Signed-off-by: Jonathan Corbet
    Cc: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jonathan Corbet
     

17 Feb, 2006

1 commit

  • If a tag is set for a node being deleted from a radix_tree, then that
    tag gets cleared from the parent of the node, even if it is set for some
    siblings of the node begin deleted.

    This patch changes the logic to include a test for any_tag_set similar
    to the logic a little futher down. Care is taken to ensure that
    'nr_cleared_tags' remains equals to the number of entries in the 'tags'
    array which are set to '0' (which means that this tag is not set in the
    tree below pathp->node, and should be cleared at pathp->node and
    possibly above.

    [ Nick says: "Linus FYI, I was able to modify the radix tree test
    harness to catch the bug and can no longer trigger it after the fix.
    Resulting code passes all other harness tests as well of course." ]

    Signed-off-by: Neil Brown
    Acked-by: Nick Piggin
    Signed-off-by: Linus Torvalds

    NeilBrown
     

09 Jan, 2006

3 commits

  • Shrink the height of a radix tree when it is partially truncated - we only do
    shrinkage of full truncation at present.

    Signed-off-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     
  • Correctly determine the tags to be cleared in radix_tree_delete() so we
    don't keep moving up the tree clearing tags that we don't need to. For
    example, if a tag is simply not set in the deleted item, nor anywhere up
    the tree, radix_tree_delete() would attempt to clear it up the entire
    height of the tree.

    Also, tag_set() was made conditional so as not to dirty too many cachelines
    high up in the radix tree. Instead, put this logic into
    radix_tree_tag_set().

    Signed-off-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     
  • Introduce helper any_tag_set() rather than repeat the same code sequence 4
    times.

    Signed-off-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     

07 Nov, 2005

1 commit

  • Reiser4 uses radix trees to solve a trouble reiser4_readdir has serving nfs
    requests.

    Unfortunately, radix tree api lacks an operation suitable for modifying
    existing entry. This patch adds radix_tree_lookup_slot which returns pointer
    to found item within the tree. That location can be then updated.

    Both Nick and Christoph Lameter have patches which need this as well.

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Hans Reiser
     

09 Oct, 2005

1 commit

  • - added typedef unsigned int __nocast gfp_t;

    - replaced __nocast uses for gfp flags with gfp_t - it gives exactly
    the same warnings as far as sparse is concerned, doesn't change
    generated code (from gcc point of view we replaced unsigned int with
    typedef) and documents what's going on far better.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

11 Sep, 2005

1 commit


08 Sep, 2005

2 commits

  • Simple patch to radix_tree_tag_get() to return different values for non
    present node and tag unset.

    The function is not used by any in-kernel callers (yet), but this
    information is definitely useful.

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Marcelo Tosatti
     
  • - There is frequent use of indirections in the radix code. This patch
    removes those indirections, makes the code more readable and allows
    the compilers to generate better code.

    - Removing indirections allows the removal of several casts.

    - Removing indirections allows the reduction of the radix_tree_path
    size from 3 to 2 words.

    - Use pathp-> consistently.

    - Remove unnecessary tmp variable in radix_tree_insert

    - Separate the upper layer processing from the lowest layer in __lookup()
    in order to make it easier to understand what is going on and allow
    compilers to generate better code for the loop.

    Signed-off-by: Christoph Lameter
    Cc: Nick Piggin
    Cc: James Bottomley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

08 Jul, 2005

1 commit

  • Add a new section called ".data.read_mostly" for data items that are read
    frequently and rarely written to like cpumaps etc.

    If these maps are placed in the .data section then these frequenly read
    items may end up in cachelines with data is is frequently updated. In that
    case all processors in an SMP system must needlessly reload the cachelines
    again and again containing elements of those frequently used variables.

    The ability to share these cachelines will allow each cpu in an SMP system
    to keep local copies of those shared cachelines thereby optimizing
    performance.

    Signed-off-by: Alok N Kataria
    Signed-off-by: Shobhit Dayal
    Signed-off-by: Christoph Lameter
    Signed-off-by: Shai Fultheim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds