// unremove_vnode status_t unremove_vnode(fs_volume *_volume, ino_t vnodeID) { HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume); return UserlandFS::KernelEmu::unremove_vnode(volume->GetID(), vnodeID); }
// get_vnode_removed status_t get_vnode_removed(fs_volume *_volume, ino_t vnodeID, bool* removed) { HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume); return UserlandFS::KernelEmu::get_vnode_removed(volume->GetID(), vnodeID, removed); }
// get_vnode status_t get_vnode(fs_volume *_volume, ino_t vnodeID, void **privateNode) { HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume); // get the node void* foundNode; status_t error = UserlandFS::KernelEmu::get_vnode(volume->GetID(), vnodeID, &foundNode); if (error != B_OK) return error; *privateNode = ((HaikuKernelNode*)foundNode)->private_node; return B_OK; }
status_t vfs_lookup_vnode(dev_t mountID, ino_t vnodeID, struct vnode **_vnode) { // get the volume HaikuKernelVolume* volume = dynamic_cast<HaikuKernelVolume*>( FileSystem::GetInstance()->VolumeWithID(mountID)); if (volume == NULL) return B_BAD_VALUE; // get the node HaikuKernelNode* node = volume->NodeWithID(vnodeID); if (node == NULL) return B_BAD_VALUE; *_vnode = (struct vnode*)node; return B_OK; }
// new_vnode status_t new_vnode(fs_volume *_volume, ino_t vnodeID, void *privateNode, fs_vnode_ops *ops) { HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume); // translate to a wrapper node HaikuKernelNode* node; status_t error = volume->NewVNode(vnodeID, privateNode, ops, &node); if (error != B_OK) return error; // announce the new node error = UserlandFS::KernelEmu::new_vnode(volume->GetID(), vnodeID, node, node->capabilities->capabilities); if (error != B_OK) volume->UndoNewVNode(node); return error; }
// publish_vnode status_t publish_vnode(fs_volume *_volume, ino_t vnodeID, void *privateNode, fs_vnode_ops *ops, int type, uint32 flags) { HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume); // translate to a wrapper node HaikuKernelNode* node; status_t error = volume->PublishVNode(vnodeID, privateNode, ops, type, flags, &node); if (error != B_OK) return error; // publish the new node error = UserlandFS::KernelEmu::publish_vnode(volume->GetID(), vnodeID, node, type, flags, node->capabilities->capabilities); if (error != B_OK) volume->UndoPublishVNode(node); return error; }
// CreateVolume status_t HaikuKernelFileSystem::CreateVolume(Volume** _volume, dev_t id) { // check initialization and parameters if (!fFSModule || !_volume) return B_BAD_VALUE; // create and init the volume HaikuKernelVolume* volume = new(std::nothrow) HaikuKernelVolume(this, id, fFSModule); if (!volume) return B_NO_MEMORY; status_t error = volume->Init(); if (error != B_OK) { delete volume; return error; } *_volume = volume; return B_OK; }