sys/vfs/hammer: Fix and add comments on btree
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sat, 7 Mar 2015 22:46:49 +0000 (07:46 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sun, 8 Mar 2015 01:29:28 +0000 (10:29 +0900)
- hunk1-2: These two seem to be old ones. At this point *node is
  a pointer to cursor->node->ondisk which is not invalid or stale.

- hunk3: This isn't necessary since now this function just returns
  EINVAL if the cursor's node is internal. It didn't have this check
  when this comment was written.

- hunk4: It's hammer_btree_lookup() that could return ENOSPC when
  no space is available, but not this function. Moving this comment
  to the previous paragraph makes better sense.

- hunk5: Leaf nodes have no idea of boundaries to start with so
  replace it with the comment being used in hammer_btree_delete()
  which also deals with bcopy() of elements.

- hunk6: Fix a typo.

- hunk7: Refer to a leaf node's count in addition to internal node.

sys/vfs/hammer/hammer_btree.c
sys/vfs/hammer/hammer_btree.h

index cc7bca2..49c5b48 100644 (file)
@@ -359,9 +359,6 @@ hammer_btree_iterate(hammer_cursor_t cursor)
                        if (error)
                                break;
                }
-               /*
-                * node pointer invalid after loop
-                */
 
                /*
                 * Return entry
@@ -602,9 +599,6 @@ hammer_btree_iterate_reverse(hammer_cursor_t cursor)
                        if (error)
                                break;
                }
-               /*
-                * node pointer invalid after loop
-                */
 
                /*
                 * Return entry
@@ -755,7 +749,6 @@ hammer_btree_last(hammer_cursor_t cursor)
 /*
  * Extract the record and/or data associated with the cursor's current
  * position.  Any prior record or data stored in the cursor is replaced.
- * The cursor must be positioned at a leaf node.
  *
  * NOTE: All extractions occur at the leaf of the B-Tree.
  */
@@ -852,12 +845,10 @@ hammer_btree_extract(hammer_cursor_t cursor, int flags)
  *
  * The caller must call hammer_btree_lookup() with the HAMMER_CURSOR_INSERT
  * flag set and that call must return ENOENT before this function can be
- * called.
+ * called. ENOSPC is returned if there is no room to insert a new record.
  *
  * The caller may depend on the cursor's exclusive lock after return to
  * interlock frontend visibility (see HAMMER_RECF_CONVERT_DELETE).
- *
- * ENOSPC is returned if there is no room to insert a new record.
  */
 int
 hammer_btree_insert(hammer_cursor_t cursor, hammer_btree_leaf_elm_t elm,
@@ -879,8 +870,7 @@ hammer_btree_insert(hammer_cursor_t cursor, hammer_btree_leaf_elm_t elm,
         * possible.  The root inode can never be deleted so the leaf should
         * never be empty.
         *
-        * Remember that the right-hand boundary is not included in the
-        * count.
+        * Remember that leaf nodes do not have boundaries.
         */
        hammer_modify_node_all(cursor->trans, cursor->node);
        node = cursor->node->ondisk;
@@ -1009,7 +999,7 @@ hammer_btree_delete(hammer_cursor_t cursor)
 }
 
 /*
- * PRIMAY B-TREE SEARCH SUPPORT PROCEDURE
+ * PRIMARY B-TREE SEARCH SUPPORT PROCEDURE
  *
  * Search the filesystem B-Tree for cursor->key_beg, return the matching node.
  *
index b90e2ba..c3091f4 100644 (file)
@@ -188,7 +188,8 @@ typedef union hammer_btree_elm *hammer_btree_elm_t;
  * then leaf nodes.
  *
  * 'count' always refers to the number of elements and is non-inclusive of
- * the right-hand boundary for an internal node.
+ * the right-hand boundary for an internal node. For a leaf node, 'count'
+ * refers to the number of elements and there is no idea of boundaries.
  *
  * The use of a fairly large radix is designed to reduce the number of
  * discrete disk accesses required to locate something.  Keep in mind