[haiku-commits] haiku: hrev51308 - in src: add-ons/kernel/file_systems/btrfs tools/btrfs_shell system/kernel/util

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 25 Jul 2017 20:53:20 +0200 (CEST)

hrev51308 adds 8 changesets to branch 'master'
old head: 548a0d80a04ec741e4aaad15231d66dbb701fe2f
new head: 0c2d2d7f0fb65dffb9d3cafaeab889d45aa4654d
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=0c2d2d7f0fb6+%5E548a0d80a04e

----------------------------------------------------------------------------

7698541e6beb: btrfs_shell: Added cat command

370ee09fe561: BTRFS: Added logical address (root) for BTree

9f9ba0bdc16c: btrfs_shell: Support AVLTree

052a981c147e: BTRFS: Added more on-disk data structures

4ba7b70ff3fc: BTRFS: Added more flags and key types

a4a1be758af3: BTRFS: Added retrieve Volume from BTree

46eba5c02d2a: BTRFS: Some modifications of BTree _Find
  
  * Added "read" argument, may change variable type in the future instead of 
just bool variable.
  * Now search key's objectId is changed to found key's objectId.

0c2d2d7f0fb6: btrfs_shell: remove BEOS_COMPATIBLE as Haiku doesn't support 
anymore

                                              [ hyche <cvghy116@xxxxxxxxx> ]

----------------------------------------------------------------------------

11 files changed, 307 insertions(+), 53 deletions(-)
headers/private/kernel/util/AVLTreeBase.h        |   7 +-
src/add-ons/kernel/file_systems/btrfs/BTree.cpp  |  38 ++---
src/add-ons/kernel/file_systems/btrfs/BTree.h    |  15 +-
src/add-ons/kernel/file_systems/btrfs/Volume.h   |  18 +--
src/add-ons/kernel/file_systems/btrfs/btrfs.h    | 137 ++++++++++++++++++-
.../file_systems/btrfs/system_dependencies.h     |   2 +
src/system/kernel/util/AVLTreeBase.cpp           |  28 ++--
src/tools/btrfs_shell/Jamfile                    |  18 ++-
src/tools/btrfs_shell/additional_commands.cpp    |  19 +++
src/tools/btrfs_shell/command_cat.cpp            |  61 +++++++++
src/tools/btrfs_shell/command_cat.h              |  17 +++

############################################################################

Commit:      7698541e6beb9133c5841593681f5e9595ef354e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=7698541e6beb
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Sun Jun  4 16:07:38 2017 UTC

btrfs_shell: Added cat command

----------------------------------------------------------------------------

diff --git a/src/tools/btrfs_shell/Jamfile b/src/tools/btrfs_shell/Jamfile
index a3786e6..dcf071e 100644
--- a/src/tools/btrfs_shell/Jamfile
+++ b/src/tools/btrfs_shell/Jamfile
@@ -26,8 +26,11 @@ if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
        fsShellCommandLibs = $(HOST_NETWORK_LIBS) ;
 }
 
+UseHeaders [ FDirName $(HAIKU_TOP) headers build ] : true ;
+
 if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
        UseHeaders [ FDirName $(HAIKU_TOP) headers build os ] : true ;
+       UseHeaders [ FDirName $(HAIKU_TOP) headers build os support ] : true ;
 }
 
 UsePrivateHeaders shared storage fs_shell ;
@@ -50,6 +53,8 @@ BuildPlatformMergeObject <build>btrfs.o : $(btrfsSources) ;
 
 BuildPlatformMain <build>btrfs_shell
        :
+       additional_commands.cpp
+       command_cat.cpp
        :
        <build>btrfs.o
        <build>fs_shell.a $(libHaikuCompat) $(HOST_LIBSUPC++) $(HOST_LIBSTDC++)
diff --git a/src/tools/btrfs_shell/additional_commands.cpp 
b/src/tools/btrfs_shell/additional_commands.cpp
new file mode 100644
index 0000000..82a1f12
--- /dev/null
+++ b/src/tools/btrfs_shell/additional_commands.cpp
@@ -0,0 +1,19 @@
+#include "fssh.h"
+
+#include "command_cat.h"
+
+
+namespace FSShell {
+
+
+void
+register_additional_commands()
+{
+       CommandManager::Default()->AddCommands(
+               command_cat,    "cat",  "concatenate file(s) to stdout",
+               NULL
+       );
+}
+
+
+}      // namespace FSShell
diff --git a/src/tools/btrfs_shell/command_cat.cpp 
b/src/tools/btrfs_shell/command_cat.cpp
new file mode 100644
index 0000000..e1417a8
--- /dev/null
+++ b/src/tools/btrfs_shell/command_cat.cpp
@@ -0,0 +1,61 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "syscalls.h"
+#include "system_dependencies.h"
+
+
+namespace FSShell {
+
+
+fssh_status_t
+command_cat(int argc, const char* const* argv)
+{
+       long numBytes = 10;
+       int fileStart = 1;
+       if (argc < 2 || strcmp(argv[1], "--help") == 0) {
+               printf(
+                       "Usage: %s [ -n ] [FILE]...\n"
+                       "\t -n\tNumber of bytes to read\n",
+                       argv[0]
+               );
+               return FSSH_B_OK;
+       }
+
+       if (argc > 3 && strcmp(argv[1], "-n") == 0) {
+               fileStart += 2;
+               numBytes = strtol(argv[2], NULL, 10);
+       }
+
+       const char* const* files = argv + fileStart;
+       for (; *files; files++) {
+               const char* file = *files;
+               int fd = _kern_open(-1, file, O_RDONLY, O_RDONLY);
+               if (fd < 0) {
+                       fssh_dprintf("Error: %s\n", fssh_strerror(fd));
+                       return FSSH_B_BAD_VALUE;
+               }
+
+               char buffer[numBytes + 1];
+               if (buffer == NULL) {
+                       fssh_dprintf("Error: No memory\n");
+                       _kern_close(fd);
+                       return FSSH_B_NO_MEMORY;
+               }
+
+               if (_kern_read(fd, 0, buffer, numBytes) != numBytes) {
+                       fssh_dprintf("Error: fail to read, length: %i\n", 
numBytes);
+                       _kern_close(fd);
+                       return FSSH_B_BAD_VALUE;
+               }
+
+               _kern_close(fd);
+               buffer[numBytes] = '\0';
+               printf("%s\n", buffer);
+       }
+
+       return FSSH_B_OK;
+}
+
+
+}      // namespace FSShell
diff --git a/src/tools/btrfs_shell/command_cat.h 
b/src/tools/btrfs_shell/command_cat.h
new file mode 100644
index 0000000..a86fd78
--- /dev/null
+++ b/src/tools/btrfs_shell/command_cat.h
@@ -0,0 +1,17 @@
+#ifndef COMMAND_CAT_H
+#define COMMAND_CAT_H
+
+
+#include "fssh_types.h"
+
+
+namespace FSShell {
+
+
+fssh_status_t command_cat(int argc, const char* const* argv);
+
+
+}      // namespace FSShell
+
+
+#endif // COMMAND_CAT_H

############################################################################

Commit:      370ee09fe5619ef2163545847485362f7adead78
URL:         http://cgit.haiku-os.org/haiku/commit/?id=370ee09fe561
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Mon Jun 26 16:04:51 2017 UTC

BTRFS: Added logical address (root) for BTree

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/btrfs/BTree.cpp 
b/src/add-ons/kernel/file_systems/btrfs/BTree.cpp
index 9fed7c9..95f7a14 100644
--- a/src/add-ons/kernel/file_systems/btrfs/BTree.cpp
+++ b/src/add-ons/kernel/file_systems/btrfs/BTree.cpp
@@ -279,7 +279,9 @@ BTree::SetRoot(off_t logical, fsblock_t* block)
 {
        if (block != NULL) {
                fRootBlock = *block;
+               //TODO: mapping physical block -> logical address
        } else {
+               fLogicalRoot = logical;
                if (fVolume->FindBlock(logical, fRootBlock) != B_OK) {
                        ERROR("Find() unmapped block %" B_PRId64 "\n", 
fRootBlock);
                        return B_ERROR;
diff --git a/src/add-ons/kernel/file_systems/btrfs/BTree.h 
b/src/add-ons/kernel/file_systems/btrfs/BTree.h
index ab66735..7ae98dd 100644
--- a/src/add-ons/kernel/file_systems/btrfs/BTree.h
+++ b/src/add-ons/kernel/file_systems/btrfs/BTree.h
@@ -57,8 +57,8 @@ public:
                                                                        size_t* 
size = NULL);
 
                        status_t                        SetRoot(off_t logical, 
fsblock_t* block);
-
                        fsblock_t                       RootBlock() const { 
return fRootBlock; }
+                       off_t                           LogicalRoot() const { 
return fLogicalRoot; }
 
 private:
                                                                BTree(const 
BTree& other);
@@ -73,6 +73,7 @@ private:
                        friend class TreeIterator;
 
                        fsblock_t                       fRootBlock;
+                       off_t                           fLogicalRoot;
                        Volume*                         fVolume;
                        mutex                           fIteratorLock;
                        SinglyLinkedList<TreeIterator> fIterators;

############################################################################

Commit:      9f9ba0bdc16c867a2f4c7c380cdac7b3390683cf
URL:         http://cgit.haiku-os.org/haiku/commit/?id=9f9ba0bdc16c
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Fri Jun 30 17:10:27 2017 UTC

btrfs_shell: Support AVLTree

----------------------------------------------------------------------------

diff --git a/headers/private/kernel/util/AVLTreeBase.h 
b/headers/private/kernel/util/AVLTreeBase.h
index 6c9bd7b..6e5cfac 100644
--- a/headers/private/kernel/util/AVLTreeBase.h
+++ b/headers/private/kernel/util/AVLTreeBase.h
@@ -6,7 +6,12 @@
 #define _KERNEL_UTIL_AVL_TREE_BASE_H
 
 
-#include <SupportDefs.h>
+#ifndef FS_SHELL
+#      include <SupportDefs.h>
+#else
+#      include <algorithm>
+#      include "fssh_api_wrapper.h"
+#endif
 
 
 class AVLTreeIterator;
diff --git a/src/add-ons/kernel/file_systems/btrfs/system_dependencies.h 
b/src/add-ons/kernel/file_systems/btrfs/system_dependencies.h
index dd337be..578e276 100644
--- a/src/add-ons/kernel/file_systems/btrfs/system_dependencies.h
+++ b/src/add-ons/kernel/file_systems/btrfs/system_dependencies.h
@@ -7,6 +7,7 @@
 // This needs to be included before the fs_shell wrapper
 #include <zlib.h>
 #include <new>
+#include <util/AVLTree.h>
 
 #include "fssh_api_wrapper.h"
 #include "fssh_auto_deleter.h"
@@ -18,6 +19,7 @@
 #include <util/AutoLock.h>
 #include <util/SinglyLinkedList.h>
 #include <util/Stack.h>
+#include <util/AVLTree.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <ByteOrder.h>
diff --git a/src/system/kernel/util/AVLTreeBase.cpp 
b/src/system/kernel/util/AVLTreeBase.cpp
index 91c3ff0..af473e8 100644
--- a/src/system/kernel/util/AVLTreeBase.cpp
+++ b/src/system/kernel/util/AVLTreeBase.cpp
@@ -6,22 +6,26 @@
 
 #include <util/AVLTreeBase.h>
 
-#include <algorithm>
-
-#include <KernelExport.h>
-
+#ifndef FS_SHELL
+#      include <algorithm>
+#      include <KernelExport.h>
+#endif
 
 #ifdef _KERNEL_MODE
 #      define CHECK_FAILED(message...) panic(message)
 #else
-#      include <stdio.h>
-#      include <OS.h>
-#      define CHECK_FAILED(message...)                                 \
-               do {                                                            
                \
-                       fprintf(stderr, message);                               
\
-                       fprintf(stderr, "\n");                                  
\
-                       debugger("AVLTreeBase check failed");   \
-               } while (false)
+#      ifndef FS_SHELL
+#              include <stdio.h>
+#              include <OS.h>
+#              define CHECK_FAILED(message...)                                 
\
+                       do {                                                    
                        \
+                               fprintf(stderr, message);                       
        \
+                               fprintf(stderr, "\n");                          
        \
+                               debugger("AVLTreeBase check failed");   \
+                       } while (false)
+#      else
+#              define CHECK_FAILED(message...) dprintf(message)
+#      endif
 #endif
 
 
diff --git a/src/tools/btrfs_shell/Jamfile b/src/tools/btrfs_shell/Jamfile
index dcf071e..5502c7e 100644
--- a/src/tools/btrfs_shell/Jamfile
+++ b/src/tools/btrfs_shell/Jamfile
@@ -33,6 +33,7 @@ if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
        UseHeaders [ FDirName $(HAIKU_TOP) headers build os support ] : true ;
 }
 
+UsePrivateKernelHeaders ;
 UsePrivateHeaders shared storage fs_shell ;
 UseHeaders [ FDirName $(HAIKU_TOP) headers private ] : true ;
 UseHeaders [ FDirName $(HAIKU_TOP) src tools fs_shell ] ;
@@ -49,7 +50,11 @@ local btrfsSources =
        kernel_interface.cpp
 ;
 
-BuildPlatformMergeObject <build>btrfs.o : $(btrfsSources) ;
+local utilitySources =
+       AVLTreeBase.cpp
+;
+
+BuildPlatformMergeObject <build>btrfs.o : $(btrfsSources) $(utilitySources) ;
 
 BuildPlatformMain <build>btrfs_shell
        :
@@ -60,3 +65,6 @@ BuildPlatformMain <build>btrfs_shell
        <build>fs_shell.a $(libHaikuCompat) $(HOST_LIBSUPC++) $(HOST_LIBSTDC++)
        $(HOST_LIBROOT) $(fsShellCommandLibs)
 ;
+
+SEARCH on [ FGristFiles $(utilitySources) ]
+       += [ FDirName $(HAIKU_TOP) src system kernel util ] ;

############################################################################

Commit:      052a981c147e5a04da759c0de4551fa7e703380f
URL:         http://cgit.haiku-os.org/haiku/commit/?id=052a981c147e
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Sun Jul  2 16:53:20 2017 UTC

BTRFS: Added more on-disk data structures

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/btrfs/btrfs.h 
b/src/add-ons/kernel/file_systems/btrfs/btrfs.h
index fa79f32..3a0d3ea 100644
--- a/src/add-ons/kernel/file_systems/btrfs/btrfs.h
+++ b/src/add-ons/kernel/file_systems/btrfs/btrfs.h
@@ -12,8 +12,61 @@
 typedef uint64 fileblock_t;            // file block number
 typedef uint64 fsblock_t;              // filesystem block number
 
-
 #define BTRFS_SUPER_BLOCK_OFFSET       0x10000
+#define BTRFS_NUM_ROOT_BACKUPS                         4
+
+
+struct btrfs_backup_roots {
+       uint64  root;
+       uint64  root_generation;
+       uint64  chunk_root;
+       uint64  chunk_root_generation;
+       uint64  extent_root;
+       uint64  extent_root_generation;
+       uint64  fs_root;
+       uint64  fs_root_generation;
+       uint64  device_root;
+       uint64  device_root_generation;
+       uint64  csum_root;
+       uint64  csum_root_generation;
+       uint64  total_size;
+       uint64  used_size;
+       uint64  num_devices;
+       uint8   unused_1[32];
+       uint8   root_level;
+       uint8   chunk_root_level;
+       uint8   extent_root_level;
+       uint8   fs_root_level;
+       uint8   device_root_level;
+       uint8   csum_root_level;
+       uint8   unused_2[10];
+
+       uint64 Root() const { return B_LENDIAN_TO_HOST_INT64(root); }
+       uint64 RootGen() const
+               { return B_LENDIAN_TO_HOST_INT64(root_generation); }
+       uint64 ChunkRoot() const { return B_LENDIAN_TO_HOST_INT64(chunk_root); }
+       uint64 ChunkRootGen() const
+               { return B_LENDIAN_TO_HOST_INT64(chunk_root_generation); }
+       uint64 ExtentRoot() const { return 
B_LENDIAN_TO_HOST_INT64(extent_root); }
+       uint64 ExtentRootGen() const
+               { return B_LENDIAN_TO_HOST_INT64(extent_root_generation); }
+       uint64 FSRoot() const { return B_LENDIAN_TO_HOST_INT64(fs_root); }
+       uint64 FSRootGen() const
+               { return B_LENDIAN_TO_HOST_INT64(fs_root_generation); }
+       uint64 DeviceRoot() const { return 
B_LENDIAN_TO_HOST_INT64(device_root); }
+       uint64 DeviceRootGen() const
+               { return B_LENDIAN_TO_HOST_INT64(device_root_generation); }
+       uint64 CSumRoot() const { return B_LENDIAN_TO_HOST_INT64(csum_root); }
+       uint64 CSumRootGen() const
+               { return B_LENDIAN_TO_HOST_INT64(csum_root_generation); }
+       uint8 RootLevel() const { return root_level; }
+       uint8 ChunkRootLevel() const { return chunk_root_level; }
+       uint8 ExtentRootLevel() const { return extent_root_level; }
+       uint8 FSRootLevel() const { return fs_root_level; }
+       uint8 DeviceRootLevel() const { return device_root_level; }
+       uint8 CSumRootLevel() const { return csum_root_level; }
+} _PACKED;
+
 
 struct btrfs_key {
        uint64  object_id;
@@ -177,6 +230,7 @@ struct btrfs_super_block {
        char    label[256];
        uint64  reserved[32];
        uint8   system_chunk_array[2048];
+       btrfs_backup_roots backup_roots[BTRFS_NUM_ROOT_BACKUPS];
 
        bool IsValid();
                // implemented in Volume.cpp
@@ -239,6 +293,16 @@ struct btrfs_inode {
 } _PACKED;
 
 
+struct btrfs_inode_ref {
+       uint8   index;
+       uint16  name_length;
+       uint8   name[];
+
+       uint8 Index() const { return index; }
+       uint16 NameLength() const { return 
B_LENDIAN_TO_HOST_INT16(name_length); }
+} _PACKED;
+
+
 struct btrfs_root {
        btrfs_inode inode;
        uint64  generation;
@@ -306,6 +370,51 @@ struct btrfs_extent_data {
 } _PACKED;
 
 
+struct btrfs_block_group {
+       uint64  used_space;
+       uint64  chunk_object_id;
+       uint64  flags;
+
+       uint64 UsedSpace() const { return B_LENDIAN_TO_HOST_INT64(used_space); }
+       uint64 ChunkObjectID() const
+               { return B_HOST_TO_LENDIAN_INT64(chunk_object_id); }
+       uint64 Flags() const { return B_LENDIAN_TO_HOST_INT64(flags); }
+} _PACKED;
+
+
+struct btrfs_extent {
+       uint64  refs;
+       uint64  generation;
+       uint64  flags;
+
+       uint64 RefCount() const { return B_LENDIAN_TO_HOST_INT64(refs); }
+       uint64 Generation() const { return B_LENDIAN_TO_HOST_INT64(generation); 
}
+       uint64 Flags() const { return B_LENDIAN_TO_HOST_INT64(flags); }
+} _PACKED;
+
+
+struct btrfs_extent_inline_ref {
+       uint8   type;
+       uint64  offset;
+
+       uint8 Type() const { return type; }
+       uint64 Offset() const { return B_LENDIAN_TO_HOST_INT64(offset); }
+} _PACKED;
+
+
+struct btrfs_extent_data_ref {
+       uint64  root_id;
+       uint64  inode_id;
+       uint64  offset;
+       uint32  ref_count;
+
+       uint64 RootID() const { return B_LENDIAN_TO_HOST_INT64(root_id); }
+       uint64 InodeID() const { return B_LENDIAN_TO_HOST_INT64(inode_id); }
+       uint64 Offset() const { return B_LENDIAN_TO_HOST_INT64(offset);}
+       uint32 RefCount() const { return B_LENDIAN_TO_HOST_INT32(ref_count); }
+} _PACKED;
+
+
 #define BTRFS_SUPER_BLOCK_MAGIC                                "_BHRfS_M"
 #define BTRFS_FIRST_SUBVOLUME                          256
 

############################################################################

Commit:      4ba7b70ff3fcc3f5bab5a58ba86d678c9f6c6d9d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=4ba7b70ff3fc
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Sun Jul  2 16:55:42 2017 UTC

BTRFS: Added more flags and key types

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/btrfs/btrfs.h 
b/src/add-ons/kernel/file_systems/btrfs/btrfs.h
index 3a0d3ea..54e4634 100644
--- a/src/add-ons/kernel/file_systems/btrfs/btrfs.h
+++ b/src/add-ons/kernel/file_systems/btrfs/btrfs.h
@@ -427,22 +427,38 @@ struct btrfs_extent_data_ref {
 #define BTRFS_OBJECT_ID_CHECKSUM_TREE          7
 #define BTRFS_OBJECT_ID_FIRST_CHUNK_TREE       256
 
-#define BTRFS_KEY_TYPE_CHUNK_ITEM                      228
+#define BTRFS_KEY_TYPE_INODE_ITEM                      1
+#define BTRFS_KEY_TYPE_INODE_REF                       12
+#define BTRFS_KEY_TYPE_XATTR_ITEM                      24
 #define BTRFS_KEY_TYPE_DIR_ITEM                                84
 #define BTRFS_KEY_TYPE_DIR_INDEX                       96
 #define BTRFS_KEY_TYPE_EXTENT_DATA                     108
-#define BTRFS_KEY_TYPE_INODE_ITEM                      1
-#define BTRFS_KEY_TYPE_INODE_REF                       12
 #define BTRFS_KEY_TYPE_ROOT_ITEM                       132
-#define BTRFS_KEY_TYPE_XATTR_ITEM                      24
+#define BTRFS_KEY_TYPE_EXTENT_ITEM                     168
+#define BTRFS_KEY_TYPE_METADATA_ITEM           169
+#define BTRFS_KEY_TYPE_EXTENT_DATA_REF         178
+#define BTRFS_KEY_TYPE_BLOCKGROUP_ITEM         192
+#define BTRFS_KEY_TYPE_CHUNK_ITEM                      228
 
 #define BTRFS_EXTENT_COMPRESS_NONE                     0
 #define BTRFS_EXTENT_COMPRESS_ZLIB                     1
 #define BTRFS_EXTENT_COMPRESS_LZO                      2
-
 #define BTRFS_EXTENT_DATA_INLINE                       0
 #define BTRFS_EXTENT_DATA_REGULAR                      1
 #define BTRFS_EXTENT_DATA_PRE                          2
+#define BTRFS_EXTENT_FLAG_DATA                         1
+#define BTRFS_EXTENT_FLAG_TREE_BLOCK           2
+
+#define BTRFS_BLOCKGROUP_FLAG_DATA                     1
+#define BTRFS_BLOCKGROUP_FLAG_SYSTEM           2
+#define BTRFS_BLOCKGROUP_FLAG_METADA           4
+#define BTRFS_BLOCKGROUP_FLAG_RAID0                    8
+#define BTRFS_BLOCKGROUP_FLAG_RAID1                    16
+#define BTRFS_BLOCKGROUP_FLAG_DUP                      32
+#define BTRFS_BLOCKGROUP_FLAG_RAID10           64
+#define BTRFS_BLOCKGROUP_FLAG_RAID5                    128
+#define BTRFS_BLOCKGROUP_FLAG_RAID6                    256
+#define BTRFS_BLOCKGROUP_FLAG_MASK                     511
 
 
 struct file_cookie {

############################################################################

Commit:      a4a1be758af3f433dbf2be87f4dbd8788355746d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=a4a1be758af3
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Tue Jul  4 16:51:02 2017 UTC

BTRFS: Added retrieve Volume from BTree

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/btrfs/BTree.h 
b/src/add-ons/kernel/file_systems/btrfs/BTree.h
index 7ae98dd..a85348d 100644
--- a/src/add-ons/kernel/file_systems/btrfs/BTree.h
+++ b/src/add-ons/kernel/file_systems/btrfs/BTree.h
@@ -56,6 +56,8 @@ public:
                        status_t                        FindPrevious(btrfs_key& 
key, void** value,
                                                                        size_t* 
size = NULL);
 
+                       Volume*                         SystemVolume() const { 
return fVolume; }
+
                        status_t                        SetRoot(off_t logical, 
fsblock_t* block);
                        fsblock_t                       RootBlock() const { 
return fRootBlock; }
                        off_t                           LogicalRoot() const { 
return fLogicalRoot; }
diff --git a/src/add-ons/kernel/file_systems/btrfs/Volume.h 
b/src/add-ons/kernel/file_systems/btrfs/Volume.h
index 6561087..d839dc0 100644
--- a/src/add-ons/kernel/file_systems/btrfs/Volume.h
+++ b/src/add-ons/kernel/file_systems/btrfs/Volume.h
@@ -38,11 +38,13 @@ public:
                                                                        { 
return fFSVolume ? fFSVolume->id : -1; }
                        fs_volume*                      FSVolume() const { 
return fFSVolume; }
                        const char*                     Name() const;
-                       BTree*                  FSTree() const { return 
fFSTree; }
-                       BTree*                  RootTree() const { return 
fRootTree; }
+                       BTree*                          FSTree() const { return 
fFSTree; }
+                       BTree*                          ExtentTree() const { 
return fExtentTree; }
+                       BTree*                          RootTree() const { 
return fRootTree; }
 
                        uint32                          SectorSize() const { 
return fSectorSize; }
                        uint32                          BlockSize() const { 
return fBlockSize; }
+                       Chunk*                          SystemChunk() const { 
return fChunk; }
 
                        btrfs_super_block&      SuperBlock() { return 
fSuperBlock; }
 
@@ -71,12 +73,12 @@ private:
                        Inode*                          fRootNode;
 
                        Chunk*                          fChunk;
-                       BTree*                  fChunkTree;
-                       BTree*                  fRootTree;
-                       BTree*                  fDevTree;
-                       BTree*                  fExtentTree;
-                       BTree*                  fFSTree;
-                       BTree*                  fChecksumTree;
+                       BTree*                          fChunkTree;
+                       BTree*                          fRootTree;
+                       BTree*                          fDevTree;
+                       BTree*                          fExtentTree;
+                       BTree*                          fFSTree;
+                       BTree*                          fChecksumTree;
 };
 
 

############################################################################

Commit:      46eba5c02d2a8405c9707b60707db9a33ea7244e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=46eba5c02d2a
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Tue Jul  4 17:08:54 2017 UTC

BTRFS: Some modifications of BTree _Find

* Added "read" argument, may change variable type in the future instead of just 
bool variable.
* Now search key's objectId is changed to found key's objectId.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/btrfs/BTree.cpp 
b/src/add-ons/kernel/file_systems/btrfs/BTree.cpp
index 95f7a14..fec0dee 100644
--- a/src/add-ons/kernel/file_systems/btrfs/BTree.cpp
+++ b/src/add-ons/kernel/file_systems/btrfs/BTree.cpp
@@ -203,7 +203,7 @@ btrfs_key::Compare(const btrfs_key& key) const
 */
 status_t
 BTree::_Find(btrfs_key& key, void** _value, size_t* _size,
-       btree_traversing type)
+       bool read, btree_traversing type)
 {
        TRACE("Find() objectid %" B_PRId64 " type %d offset %" B_PRId64 " \n",
                key.ObjectID(), key.Type(), key.Offset());
@@ -229,8 +229,15 @@ BTree::_Find(btrfs_key& key, void** _value, size_t* _size,
 
        TRACE("Find() dump count %" B_PRId32 "\n", node.ItemCount());
        ret = node.SearchSlot(key, &slot, type);
+       if ((slot >= node.ItemCount() || node.Item(slot)->key.Type() != 
key.Type())
+                       && read == true
+               || ret != B_OK) {
+               TRACE("Find() not found %" B_PRId64 " %" B_PRId64 "\n", 
key.Offset(),
+                       key.ObjectID());
+               return B_ENTRY_NOT_FOUND;
+       }
 
-       if ( ret == B_OK && node.Item(slot)->key.Type() == key.Type()) {
+       if (read == true) {
                TRACE("Find() found %" B_PRIu32 " %" B_PRIu32 "\n",
                        node.Item(slot)->Offset(), node.Item(slot)->Size());
 
@@ -239,38 +246,35 @@ BTree::_Find(btrfs_key& key, void** _value, size_t* _size,
                        memcpy(*_value, node.ItemData(slot),
                                node.Item(slot)->Size());
                        key.SetOffset(node.Item(slot)->key.Offset());
+                       key.SetObjectID(node.Item(slot)->key.ObjectID());
                        if (_size != NULL)
                                *_size = node.Item(slot)->Size();
                }
-               return B_OK;
+       } else {
+               *_value = (void*)&slot;
        }
-
-
-       TRACE("Find() not found %" B_PRId64 " %" B_PRId64 "\n", key.Offset(),
-               key.ObjectID());
-
-       return B_ENTRY_NOT_FOUND;
+       return B_OK;
 }
 
 
 status_t
-BTree::FindNext(btrfs_key& key, void** _value, size_t* _size)
+BTree::FindNext(btrfs_key& key, void** _value, size_t* _size, bool read)
 {
-       return _Find(key, _value, _size, BTREE_FORWARD);
+       return _Find(key, _value, _size, read, BTREE_FORWARD);
 }
 
 
 status_t
-BTree::FindPrevious(btrfs_key& key, void** _value, size_t* _size)
+BTree::FindPrevious(btrfs_key& key, void** _value, size_t* _size, bool read)
 {
-       return _Find(key, _value, _size, BTREE_BACKWARD);
+       return _Find(key, _value, _size, read, BTREE_BACKWARD);
 }
 
 
 status_t
-BTree::FindExact(btrfs_key& key, void** _value, size_t* _size)
+BTree::FindExact(btrfs_key& key, void** _value, size_t* _size, bool read)
 {
-       return _Find(key, _value, _size, BTREE_EXACT);
+       return _Find(key, _value, _size, read, BTREE_EXACT);
 }
 
 
@@ -338,7 +342,7 @@ TreeIterator::Traverse(btree_traversing direction, 
btrfs_key& key,
 
        fCurrentKey.SetOffset(fCurrentKey.Offset() + direction);
        status_t status = fTree->_Find(fCurrentKey, value, size,
-               direction);
+               true, direction);
        if (status != B_OK) {
                TRACE("TreeIterator::Traverse() Find failed\n");
                return B_ENTRY_NOT_FOUND;
diff --git a/src/add-ons/kernel/file_systems/btrfs/BTree.h 
b/src/add-ons/kernel/file_systems/btrfs/BTree.h
index a85348d..eebd132 100644
--- a/src/add-ons/kernel/file_systems/btrfs/BTree.h
+++ b/src/add-ons/kernel/file_systems/btrfs/BTree.h
@@ -50,11 +50,11 @@ public:
                                                                        
fsblock_t rootBlock);
                                                                ~BTree();
                        status_t                        FindExact(btrfs_key& 
key, void** value,
-                                                                       size_t* 
size = NULL);
+                                                                       size_t* 
size = NULL, bool read = true);
                        status_t                        FindNext(btrfs_key& 
key, void** value,
-                                                                       size_t* 
size = NULL);
+                                                                       size_t* 
size = NULL, bool read = true);
                        status_t                        FindPrevious(btrfs_key& 
key, void** value,
-                                                                       size_t* 
size = NULL);
+                                                                       size_t* 
size = NULL, bool read = true);
 
                        Volume*                         SystemVolume() const { 
return fVolume; }
 
@@ -67,8 +67,8 @@ private:
                                                                BTree& 
operator=(const BTree& other);
                                                                        // no 
implementation
 
-                       status_t                        _Find(btrfs_key& key, 
void** value,
-                                                                       size_t* 
size, btree_traversing type);
+                       status_t                        _Find(btrfs_key& key, 
void** value, size_t* size,
+                                                                       bool 
read, btree_traversing type);
                        void                            
_AddIterator(TreeIterator* iterator);
                        void                            
_RemoveIterator(TreeIterator* iterator);
 private:

############################################################################

Revision:    hrev51308
Commit:      0c2d2d7f0fb65dffb9d3cafaeab889d45aa4654d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=0c2d2d7f0fb6
Author:      hyche <cvghy116@xxxxxxxxx>
Date:        Tue Jul  4 17:18:23 2017 UTC

btrfs_shell: remove BEOS_COMPATIBLE as Haiku doesn't support anymore

----------------------------------------------------------------------------

diff --git a/src/tools/btrfs_shell/Jamfile b/src/tools/btrfs_shell/Jamfile
index 5502c7e..5029613 100644
--- a/src/tools/btrfs_shell/Jamfile
+++ b/src/tools/btrfs_shell/Jamfile
@@ -27,11 +27,8 @@ if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
 }
 
 UseHeaders [ FDirName $(HAIKU_TOP) headers build ] : true ;
-
-if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
-       UseHeaders [ FDirName $(HAIKU_TOP) headers build os ] : true ;
-       UseHeaders [ FDirName $(HAIKU_TOP) headers build os support ] : true ;
-}
+UseHeaders [ FDirName $(HAIKU_TOP) headers build os ] : true ;
+UseHeaders [ FDirName $(HAIKU_TOP) headers build os support ] : true ;
 
 UsePrivateKernelHeaders ;
 UsePrivateHeaders shared storage fs_shell ;


Other related posts:

  • » [haiku-commits] haiku: hrev51308 - in src: add-ons/kernel/file_systems/btrfs tools/btrfs_shell system/kernel/util - pulkomandy