]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - lib/radix-tree.c
[PATCH] Fix over-zealous tag clearing in radix_tree_delete
[linux-2.6-omap-h63xx.git] / lib / radix-tree.c
index c0bd4a91480387e0c22d43b65d7f75fc2a522188..1e5b17dc7e3d5c6da19bdb2376e7a0a120cbc722 100644 (file)
@@ -752,12 +752,14 @@ void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
         */
        nr_cleared_tags = 0;
        for (tag = 0; tag < RADIX_TREE_TAGS; tag++) {
+               tags[tag] = 1;
                if (tag_get(pathp->node, tag, pathp->offset)) {
                        tag_clear(pathp->node, tag, pathp->offset);
-                       tags[tag] = 0;
-                       nr_cleared_tags++;
-               } else
-                       tags[tag] = 1;
+                       if (!any_tag_set(pathp->node, tag)) {
+                               tags[tag] = 0;
+                               nr_cleared_tags++;
+                       }
+               }
        }
 
        for (pathp--; nr_cleared_tags && pathp->node; pathp--) {