* Copyright 2007-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H
#define USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H
#include "Locker.h"
#include "HaikuKernelNode.h"
#include "../FileSystem.h"
struct file_system_module_info;
namespace UserlandFS {
struct HaikuKernelIORequest;
class HaikuKernelFileSystem : public FileSystem {
public:
HaikuKernelFileSystem(const char* fsName,
file_system_module_info* fsModule);
virtual ~HaikuKernelFileSystem();
status_t Init();
virtual status_t CreateVolume(Volume** volume, dev_t id);
virtual status_t DeleteVolume(Volume* volume);
status_t AddIORequest(HaikuKernelIORequest* request);
HaikuKernelIORequest* GetIORequest(int32 requestID);
void PutIORequest(HaikuKernelIORequest* request,
int32 refCount = 1);
HaikuKernelNode::Capabilities* GetNodeCapabilities(
fs_vnode_ops* ops);
void PutNodeCapabilities(
HaikuKernelNode::Capabilities*
capabilities);
private:
struct IORequestHashDefinition;
struct IORequestTable;
struct NodeCapabilitiesHashDefinition;
struct NodeCapabilitiesTable;
private:
void _InitCapabilities();
static void _InitNodeCapabilities(fs_vnode_ops* ops,
FSVNodeCapabilities& capabilities);
private:
file_system_module_info* fFSModule;
IORequestTable* fIORequests;
NodeCapabilitiesTable* fNodeCapabilities;
Locker fLock;
};
}
using UserlandFS::HaikuKernelFileSystem;
#endif