BTRFS: Implement BTree::Path and change _Find.
commit3216460dec5447c463e617b5dd537ac496dc0370
authorhyche <cvghy116@gmail.com>
Sat, 12 Aug 2017 17:30:06 +0000 (13 00:30 +0700)
committerAugustin Cavalier <waddlesplash@gmail.com>
Sun, 10 Dec 2017 15:56:11 +0000 (10 10:56 -0500)
tree5baea54be32664c79e0fcfdeb9b8479ee188c972
parent8160f31fc102e46f9c3387b708a51b8807c90b72
BTRFS: Implement BTree::Path and change _Find.

Remove attribute fCurrentSlot in BTree::Node as it will be handled by Path explicitly. BTree control Path by passing its type in
BTree's method, Path also hold BTree type as its attribute to do some internal actions.
Add constant BTREE_KEY_TYPE_ANY, find search key has this type will success regardless of the found key's type.

Split the  the _Find function into Traverse and GetEntry. Traverse will fill in the Path (nodes and slots) along way its finding,
GetEntry will get the item data, item size, key from leaf, if the slot is valid, that we have from Traverse. The _Find function also
check type if is correct and then retrieve. Doing this way there will be more flexible, the "read" flag is not needed as we only
need Path to manipulate tree, and it also enhance the performance at some points, because Path caches all the nodes from root to leaf,
so that we don't have to block_cache_put and block_cache_get after each finding.

Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
src/add-ons/kernel/file_systems/btrfs/Attribute.cpp
src/add-ons/kernel/file_systems/btrfs/BTree.cpp
src/add-ons/kernel/file_systems/btrfs/BTree.h
src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp
src/add-ons/kernel/file_systems/btrfs/Inode.cpp
src/add-ons/kernel/file_systems/btrfs/Volume.cpp
src/add-ons/kernel/file_systems/btrfs/btrfs.h