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 ;