aboutsummaryrefslogtreecommitdiffstats
path: root/tools/blktap/drivers/blktapctrl.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/blktap/drivers/blktapctrl.c')
-rw-r--r--tools/blktap/drivers/blktapctrl.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/tools/blktap/drivers/blktapctrl.c b/tools/blktap/drivers/blktapctrl.c
index 21cdfe5239..8a5630230e 100644
--- a/tools/blktap/drivers/blktapctrl.c
+++ b/tools/blktap/drivers/blktapctrl.c
@@ -659,9 +659,6 @@ static int blktapctrl_new_blkif(blkif_t *blkif)
DPRINTF("Received a poll for a new vbd\n");
if ( ((blk=blkif->info) != NULL) && (blk->params != NULL) ) {
- if (blktap_interface_create(ctlfd, &major, &minor, blkif) < 0)
- return -1;
-
if (test_path(blk->params, &ptr, &type, &exist, &use_ioemu) != 0) {
DPRINTF("Error in blktap device string(%s).\n",
blk->params);
@@ -685,10 +682,6 @@ static int blktapctrl_new_blkif(blkif_t *blkif)
blkif->fds[WRITE] = exist->fds[WRITE];
}
- add_disktype(blkif, type);
- blkif->major = major;
- blkif->minor = minor;
-
image = (image_t *)malloc(sizeof(image_t));
blkif->prv = (void *)image;
blkif->ops = &tapdisk_ops;
@@ -712,11 +705,18 @@ static int blktapctrl_new_blkif(blkif_t *blkif)
goto fail;
}
+ if (blktap_interface_create(ctlfd, &major, &minor, blkif) < 0)
+ return -1;
+
+ blkif->major = major;
+ blkif->minor = minor;
+
+ add_disktype(blkif, type);
+
} else return -1;
return 0;
fail:
- ioctl(ctlfd, BLKTAP_IOCTL_FREEINTF, minor);
return -EINVAL;
}