From 8042a045b0af37802c48e49a134af3583021650d Mon Sep 17 00:00:00 2001 From: hyche Date: Tue, 29 Aug 2017 06:41:56 +0700 Subject: [PATCH] BTRFS: Implement Remove() in Inode that removes inode_item. Signed-off-by: Augustin Cavalier --- .../kernel/file_systems/btrfs/Inode.cpp | 18 ++++++++++++++++++ src/add-ons/kernel/file_systems/btrfs/Inode.h | 1 + 2 files changed, 19 insertions(+) diff --git a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp index 7c0a72d47d..d02803e7fc 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp @@ -411,6 +411,24 @@ Inode::Insert(Transaction& transaction, BTree::Path* path) } +/* Remove inode_item + */ +status_t +Inode::Remove(Transaction& transaction, BTree::Path* path) +{ + BTree* tree = path->Tree(); + btrfs_key key; + key.SetObjectID(fID); + key.SetType(BTRFS_KEY_TYPE_INODE_ITEM); + key.SetOffset(0); + status_t status = tree->RemoveEntries(transaction, path, key, NULL, 1); + if (status != B_OK) + return status; + + return B_OK; +} + + /* Insert 3 items: inode_ref, dir_item, dir_index * Basically, make a link between name and its node (location) */ diff --git a/src/add-ons/kernel/file_systems/btrfs/Inode.h b/src/add-ons/kernel/file_systems/btrfs/Inode.h index 953f9ba8ad..00d6de4442 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Inode.h +++ b/src/add-ons/kernel/file_systems/btrfs/Inode.h @@ -73,6 +73,7 @@ public: Inode* parent, int32 mode, uint64 size = 0, uint64 flags = 0); status_t Insert(Transaction& transaction, BTree::Path* path); + status_t Remove(Transaction& transaction, BTree::Path* path); status_t MakeReference(Transaction& transaction, BTree::Path* path, Inode* parent, const char* name, int32 mode); private: