diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.cpp b/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.cpp index 8632f8d3ee..0c3814fd18 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.cpp @@ -21,6 +21,19 @@ HaikuKernelFileSystem::HaikuKernelFileSystem(file_system_module_info* fsModule) // destructor HaikuKernelFileSystem::~HaikuKernelFileSystem() { + // call the kernel module uninitialization + if (fFSModule->info.std_ops) + fFSModule->info.std_ops(B_MODULE_UNINIT); +} + +// Init +status_t +HaikuKernelFileSystem::Init() +{ + // call the kernel module initialization + if (!fFSModule->info.std_ops) + return B_OK; + return fFSModule->info.std_ops(B_MODULE_INIT); } // CreateVolume diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.h b/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.h index 0cdffb7429..c71210fbc7 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.h +++ b/src/add-ons/kernel/file_systems/userlandfs/server/HaikuKernelFileSystem.h @@ -15,6 +15,8 @@ public: file_system_module_info* fsModule); virtual ~HaikuKernelFileSystem(); + status_t Init(); + virtual status_t CreateVolume(Volume** volume, mount_id id); virtual status_t DeleteVolume(Volume* volume); diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp b/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp index 34180bc7fd..5c1532da6a 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp @@ -273,8 +273,15 @@ UserlandFSServer::_CreateHaikuKernelInterface(const char* fsName, = new(nothrow) HaikuKernelFileSystem(module); if (!fileSystem) RETURN_ERROR(B_NO_MEMORY); + ObjectDeleter fsDeleter(fileSystem); + + // init the FS + error = fileSystem->Init(); + if (error != B_OK) + return error; // everything went fine + fsDeleter.Detach(); *_fileSystem = fileSystem; return B_OK; }