char name[BTRFS_INO_LOOKUP_PATH_MAX];
 };
 
+/* Search criteria for the btrfs SEARCH ioctl family. */
 struct btrfs_ioctl_search_key {
-       /* which root are we searching.  0 is the tree of tree roots */
-       __u64 tree_id;
-
-       /* keys returned will be >= min and <= max */
-       __u64 min_objectid;
-       __u64 max_objectid;
-
-       /* keys returned will be >= min and <= max */
-       __u64 min_offset;
-       __u64 max_offset;
-
-       /* max and min transids to search for */
-       __u64 min_transid;
-       __u64 max_transid;
+       /*
+        * The tree we're searching in. 1 is the tree of tree roots, 2 is the
+        * extent tree, etc...
+        *
+        * A special tree_id value of 0 will cause a search in the subvolume
+        * tree that the inode which is passed to the ioctl is part of.
+        */
+       __u64 tree_id;          /* in */
 
-       /* keys returned will be >= min and <= max */
-       __u32 min_type;
-       __u32 max_type;
+       /*
+        * When doing a tree search, we're actually taking a slice from a
+        * linear search space of 136-bit keys.
+        *
+        * A full 136-bit tree key is composed as:
+        *   (objectid << 72) + (type << 64) + offset
+        *
+        * The individual min and max values for objectid, type and offset
+        * define the min_key and max_key values for the search range. All
+        * metadata items with a key in the interval [min_key, max_key] will be
+        * returned.
+        *
+        * Additionally, we can filter the items returned on transaction id of
+        * the metadata block they're stored in by specifying a transid range.
+        * Be aware that this transaction id only denotes when the metadata
+        * page that currently contains the item got written the last time as
+        * result of a COW operation.  The number does not have any meaning
+        * related to the transaction in which an individual item that is being
+        * returned was created or changed.
+        */
+       __u64 min_objectid;     /* in */
+       __u64 max_objectid;     /* in */
+       __u64 min_offset;       /* in */
+       __u64 max_offset;       /* in */
+       __u64 min_transid;      /* in */
+       __u64 max_transid;      /* in */
+       __u32 min_type;         /* in */
+       __u32 max_type;         /* in */
 
        /*
-        * how many items did userland ask for, and how many are we
-        * returning
+        * input: The maximum amount of results desired.
+        * output: The actual amount of items returned, restricted by any of:
+        *  - reaching the upper bound of the search range
+        *  - reaching the input nr_items amount of items
+        *  - completely filling the supplied memory buffer
         */
-       __u32 nr_items;
+       __u32 nr_items;         /* in/out */
 
        /* align to 64 bits */
        __u32 unused;