From 7f67d8283e8d34a7ce3ee16d27987dfe00749b7e Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Thu, 28 Jun 2012 01:55:17 +0200 Subject: [PATCH] nfs4: Add remove_vnode() hook --- .../file_systems/nfs4/kernel_interface.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp index 1dd114256e..cec47e3710 100644 --- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp @@ -204,6 +204,21 @@ nfs4_put_vnode(fs_volume* volume, fs_vnode* vnode, bool reenter) } +static status_t +nfs4_remove_vnode(fs_volume* volume, fs_vnode* vnode, bool reenter) +{ + // It is the server that actually deletes a node. Nodes on client + // side are only an attempt to simulate local filesystem. Hence, + // this hook is the same as put_vnode(). + + Inode* inode = reinterpret_cast(vnode->private_node); + inode->FileSystem()->InoIdMap()->RemoveEntry(inode->ID()); + delete inode; + + return B_OK; +} + + static status_t nfs4_set_flags(fs_volume* volume, fs_vnode* vnode, void* _cookie, int flags) { @@ -556,7 +571,7 @@ fs_vnode_ops gNFSv4VnodeOps = { nfs4_lookup, nfs4_get_vnode_name, nfs4_put_vnode, - NULL, // remove_vnode() + nfs4_remove_vnode, /* VM file access */ NULL, // can_page()