[BLKTAP] Little error handling fix to blktapctrl.c.

Signed-off-by: Andrew Warfield <andy@xensource.com>
This commit is contained in:
Andrew Warfield committed 2006-11-15 12:50:17 -08:00
1 parent 6c483f95f8
commit 3cfbe70d32
1 file changed
+42 -19
+42 -19
View File
@@ -167,13 +167,22 @@ static int get_tapdisk_pid(blkif_t *blkif)
return 1;
}
static blkif_t *test_path(char *path, char **dev, int *type)
/* Look up the disk specified by path:
* if found, dev points to the device string in the path
* type is the tapdisk driver type id
* blkif is the existing interface if this is a shared driver
* and NULL otherwise.
* return 0 on success, -1 on error.
*/
static int test_path(char *path, char **dev, int *type, blkif_t *blkif)
{
char *ptr, handle[10];
int i, size;
int i, size, found = 0;
size = sizeof(dtypes)/sizeof(disk_info_t *);
*type = MAX_DISK_TYPES + 1;
blkif = NULL;
if ( (ptr = strstr(path, ":"))!=NULL) {
memcpy(handle, path, (ptr - path));
@@ -182,26 +191,36 @@ static blkif_t *test_path(char *path, char **dev, int *type)
*ptr = '\0';
DPRINTF("Detected handle: [%s]\n",handle);
for (i = 0; i < size; i++) {
if (strncmp(handle, dtypes[i]->handle, (ptr - path))
==0) {
*type = dtypes[i]->idnum;
for (i = 0; i < size; i++)
if (strncmp(handle, dtypes[i]->handle,
(ptr - path)) ==0) {
found = 1;
break;
}
if (dtypes[i]->single_handler == 1) {
/* Check whether tapdisk process
already exists */
if (active_disks[dtypes[i]->idnum]
== NULL) return NULL;
else
return active_disks[dtypes[i]->idnum]->blkif;
}
}
}
} else *dev = NULL;
if (found) {
*type = dtypes[i]->idnum;
if (dtypes[i]->single_handler == 1) {
/* Check whether tapdisk process
already exists */
if (active_disks[dtypes[i]->idnum] == NULL)
blkif = NULL;
else
blkif = active_disks[dtypes[i]
->idnum]->blkif;
}
return 0;
}
}
return NULL;
/* Fall-through case, we didn't find a disk driver. */
DPRINTF("Unknown blktap disk type [%s]!\n",handle);
*dev = NULL;
return -1;
}
static void add_disktype(blkif_t *blkif, int type)
{
driver_list_entry_t *entry, **pprev;
@@ -463,7 +482,11 @@ int blktapctrl_new_blkif(blkif_t *blkif)
if (get_new_dev(&major, &minor, blkif)<0)
return -1;
exist = test_path(blk->params, &ptr, &type);
if (test_path(blk->params, &ptr, &type, exist) != 0) {
DPRINTF("Error in blktap device string(%s).\n",
blk->params);
return -1;
}
blkif->drivertype = type;
blkif->cookie = lrand48() % MAX_RAND_VAL;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.