1/* 2 * Copyright 2007-2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H 6#define USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H 7 8#include "Locker.h" 9 10#include "HaikuKernelNode.h" 11 12#include "../FileSystem.h" 13 14 15struct file_system_module_info; 16 17 18namespace UserlandFS { 19 20struct HaikuKernelIORequest; 21 22class HaikuKernelFileSystem : public FileSystem { 23public: 24 HaikuKernelFileSystem(const char* fsName, 25 file_system_module_info* fsModule); 26 virtual ~HaikuKernelFileSystem(); 27 28 status_t Init(); 29 30 virtual status_t CreateVolume(Volume** volume, dev_t id); 31 virtual status_t DeleteVolume(Volume* volume); 32 33 status_t AddIORequest(HaikuKernelIORequest* request); 34 HaikuKernelIORequest* GetIORequest(int32 requestID); 35 void PutIORequest(HaikuKernelIORequest* request, 36 int32 refCount = 1); 37 38 HaikuKernelNode::Capabilities* GetNodeCapabilities( 39 fs_vnode_ops* ops); 40 void PutNodeCapabilities( 41 HaikuKernelNode::Capabilities* 42 capabilities); 43 44private: 45 struct IORequestHashDefinition; 46 struct IORequestTable; 47 struct NodeCapabilitiesHashDefinition; 48 struct NodeCapabilitiesTable; 49 50private: 51 void _InitCapabilities(); 52 static void _InitNodeCapabilities(fs_vnode_ops* ops, 53 FSVNodeCapabilities& capabilities); 54 55private: 56 file_system_module_info* fFSModule; 57 IORequestTable* fIORequests; 58 NodeCapabilitiesTable* fNodeCapabilities; 59 Locker fLock; 60}; 61 62} // namespace UserlandFS 63 64using UserlandFS::HaikuKernelFileSystem; 65 66#endif // USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H 67