diff --git a/sys/dev/disk/dm/dm_pdev.c b/sys/dev/disk/dm/dm_pdev.c --- a/sys/dev/disk/dm/dm_pdev.c +++ b/sys/dev/disk/dm/dm_pdev.c @@ -165,18 +165,21 @@ * dumps. */ bzero(&dmp->pdev_pinfo, sizeof(dmp->pdev_pinfo)); - error = dev_dioctl(dmp->pdev_vnode->v_rdev, DIOCGPART, - (void *)&dmp->pdev_pinfo, 0, proc0.p_ucred, NULL, NULL); - if (!error) { - struct partinfo *dpart = &dmp->pdev_pinfo; - dmdebug("DIOCGPART offset=%ju size=%ju blocks=%ju blksize=%d\n", - dpart->media_offset, - dpart->media_size, - dpart->media_blocks, - dpart->media_blksize); - } else { - kprintf("dmp_pdev_insert DIOCGPART failed %d\n", error); - } + error = dev_dioctl(dmp->pdev_vnode->v_rdev, DIOCGPART, + (void *)&dmp->pdev_pinfo, 0, proc0.p_ucred, NULL, NULL); + if (!error) { + struct partinfo *dpart = &dmp->pdev_pinfo; + dmdebug("DIOCGPART offset=%ju size=%ju blocks=%ju blksize=%d\n", + dpart->media_offset, + dpart->media_size, + dpart->media_blocks, + dpart->media_blksize); + } else { + kprintf("dmp_pdev_insert DIOCGPART failed %d\n", error); + dm_pdev_free(dmp); + lockmgr(&dm_pdev_mutex, LK_RELEASE); + return NULL; + } TAILQ_INSERT_TAIL(&dm_pdev_list, dmp, next_pdev); lockmgr(&dm_pdev_mutex, LK_RELEASE);