BTRFS: Implement Insert() in Inode that inserts inode_item.
Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
This commit is contained in:
parent
36a24fb34e
commit
371935de18
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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&);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue