From 371935de1870f14564a49effc98d0a10a145ecae Mon Sep 17 00:00:00 2001 From: hyche Date: Tue, 29 Aug 2017 06:21:42 +0700 Subject: [PATCH] BTRFS: Implement Insert() in Inode that inserts inode_item. Signed-off-by: Augustin Cavalier --- .../kernel/file_systems/btrfs/Inode.cpp | 24 ++++++++++++++++++- src/add-ons/kernel/file_systems/btrfs/Inode.h | 2 ++ src/add-ons/kernel/file_systems/btrfs/btrfs.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp index bb3b49c775..f9229ade26 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp @@ -7,7 +7,6 @@ #include "Inode.h" -#include "BTree.h" #include "CachedBlock.h" #include "Utility.h" @@ -372,3 +371,26 @@ Inode::FindParent(ino_t* id) return B_OK; } + +/* Insert inode_item + */ +status_t +Inode::Insert(Transaction& transaction, BTree::Path* path) +{ + BTree* tree = path->Tree(); + + btrfs_entry item; + item.key.SetObjectID(fID); + item.key.SetType(BTRFS_KEY_TYPE_INODE_ITEM); + item.key.SetOffset(0); + item.SetSize(sizeof(btrfs_inode)); + + void* data[1]; + data[0] = (void*)&fNode; + status_t status = tree->InsertEntries(transaction, path, &item, data, 1); + if (status != B_OK) + return status; + + + return B_OK; +} diff --git a/src/add-ons/kernel/file_systems/btrfs/Inode.h b/src/add-ons/kernel/file_systems/btrfs/Inode.h index 29c106d1c0..60c5aa083e 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Inode.h +++ b/src/add-ons/kernel/file_systems/btrfs/Inode.h @@ -10,6 +10,7 @@ #include "btrfs.h" #include "Volume.h" #include "Journal.h" +#include "BTree.h" //#define TRACE_BTRFS @@ -70,6 +71,7 @@ public: static Inode* Create(Transaction& transaction, ino_t id, Inode* parent, int32 mode, uint64 size = 0, uint64 flags = 0); + status_t Insert(Transaction& transaction, BTree::Path* path); private: Inode(Volume* volume); Inode(const Inode&); diff --git a/src/add-ons/kernel/file_systems/btrfs/btrfs.h b/src/add-ons/kernel/file_systems/btrfs/btrfs.h index 2567c3b61d..a1121f4881 100644 --- a/src/add-ons/kernel/file_systems/btrfs/btrfs.h +++ b/src/add-ons/kernel/file_systems/btrfs/btrfs.h @@ -145,6 +145,7 @@ struct btrfs_entry { uint32 Size() const { return B_LENDIAN_TO_HOST_INT32(size); } void SetOffset(uint32 off) { offset = B_HOST_TO_LENDIAN_INT32(off); } + void SetSize(uint32 itemSize) { size = B_HOST_TO_LENDIAN_INT32(itemSize); } } _PACKED;