From e96eef09e4960c7435394ac1f5f623c4e7c31e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Wed, 2 May 2007 01:04:36 +0000 Subject: [PATCH] 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 --- .../kernel/drivers/disk/virtual/nbd/Jamfile | 1 + .../kernel/drivers/disk/virtual/nbd/nbd.c | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/drivers/disk/virtual/nbd/Jamfile b/src/add-ons/kernel/drivers/disk/virtual/nbd/Jamfile index 0a43a51661..6f47650c7a 100644 --- a/src/add-ons/kernel/drivers/disk/virtual/nbd/Jamfile +++ b/src/add-ons/kernel/drivers/disk/virtual/nbd/Jamfile @@ -8,6 +8,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ; # UsePublicHeaders drivers ; #} +# not Haiku-specific, ksocket.h also works in BONE. UsePrivateHeaders drivers ; KernelAddon nbd : diff --git a/src/add-ons/kernel/drivers/disk/virtual/nbd/nbd.c b/src/add-ons/kernel/drivers/disk/virtual/nbd/nbd.c index 833915a156..6209b420ba 100644 --- a/src/add-ons/kernel/drivers/disk/virtual/nbd/nbd.c +++ b/src/add-ons/kernel/drivers/disk/virtual/nbd/nbd.c @@ -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 @@ -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; +}