We analyze a client FS's capabilities -- i.e. which hooks it provides or
can be emulated -- and pass this info to the kernel add-on. Thus we can avoid passing requests to the userland that can't be serviced anyway. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20331 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -183,20 +183,29 @@ UserlandFSServer::_RegisterWithDispatcher(const char* fsName)
|
||||
ERROR(("Failed to lock the clipboard.\n"));
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
// get the port infos
|
||||
Port::Info infos[kRequestThreadCount + 1];
|
||||
infos[0] = *fNotificationRequestPort->GetPortInfo();
|
||||
for (int32 i = 0; i < kRequestThreadCount; i++)
|
||||
infos[i + 1] = *fRequestThreads[i].GetPortInfo();
|
||||
|
||||
// FS capabilities
|
||||
FSCapabilities capabilities;
|
||||
fFileSystem->GetCapabilities(capabilities);
|
||||
|
||||
// init an FS info
|
||||
FSInfo info;
|
||||
status_t error = info.SetTo(fsName, infos, kRequestThreadCount + 1);
|
||||
status_t error = info.SetTo(fsName, infos, kRequestThreadCount + 1,
|
||||
capabilities);
|
||||
|
||||
// prepare the message
|
||||
BMessage message(UFS_REGISTER_FS);
|
||||
if (error == B_OK)
|
||||
error = message.AddInt32("team", Team());
|
||||
if (error == B_OK)
|
||||
error = info.Archive(&message);
|
||||
|
||||
// send the message
|
||||
BMessage reply;
|
||||
error = messenger.SendMessage(&message, &reply);
|
||||
|
||||
Reference in New Issue
Block a user