Find the device and point the cookie to it on open().

Comment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20964 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol
2007-05-02 01:04:36 +00:00
parent 4d1cc41eb3
commit e96eef09e4
2 changed files with 23 additions and 1 deletions
@@ -8,6 +8,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ;
# UsePublicHeaders drivers ;
#}
# not Haiku-specific, ksocket.h also works in BONE.
UsePrivateHeaders drivers ;
KernelAddon nbd :
@@ -6,7 +6,7 @@
/*
nbd driver for Haiku
Maps BEOS/IMAGE.BE files as virtual partitions.
Maps a Network Block Device as virtual partitions.
*/
#include <KernelExport.h>
@@ -51,6 +51,8 @@ status_t nbd_post_request(struct nbd_device, uint64 handle, struct nbd_request_e
status_t nbd_dequeue_request(struct nbd_device, uint64 handle, struct nbd_request_entry **req);
status_t nbd_free_request(struct nbd_device, struct nbd_request_entry *req);
struct nbd_device *nbd_find_device(const char* name);
#pragma mark ==== request manager ====
@@ -68,14 +70,21 @@ int32 postoffice(void *arg)
#pragma mark ==== device hooks ====
static struct nbd_device nbd_devices[MAX_NBDS];
status_t nbd_open(const char *name, uint32 flags, cookie_t **cookie) {
struct nbd_device *dev = NULL;
(void)name; (void)flags;
dev = nbd_find_device(name);
if (!dev)
return ENOENT;
*cookie = (void*)malloc(sizeof(cookie_t));
if (*cookie == NULL) {
dprintf("nbd_open : error allocating cookie\n");
goto err0;
}
memset(*cookie, 0, sizeof(cookie_t));
(*cookie)->dev = dev;
return B_OK;
err0:
return B_ERROR;
@@ -191,6 +200,7 @@ init_driver (void)
if (nbd_name[i] == NULL)
break;
sprintf(nbd_name[i], DEVICE_FMT, i);
// XXX: init nbd_devices[i]
}
nbd_name[i] = NULL;
return B_OK;
@@ -216,3 +226,14 @@ find_device(const char* name)
{
return &nbd_hooks;
}
struct nbd_device*
nbd_find_device(const char* name)
{
int i;
for (i = 0; i < MAX_NBDS; i++) {
if (!strcmp(nbd_name[i], name))
return &nbd_devices[i];
}
return NULL;
}