dpart = (void *)data;
bzero(dpart, sizeof(*dpart));
- if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL)
+ if ((dmv = dev->si_drv1) == NULL)
return ENODEV;
if (dmv->diskp->d_info.d_media_blksize == 0) {
- dm_dev_unbusy(dmv);
return ENOTSUP;
} else {
size = dm_table_size(&dmv->table_head);
dpart->media_blksize = DEV_BSIZE;
dpart->fstype = FS_BSDFFS;
}
- dm_dev_unbusy(dmv);
break;
}
dev_type = 0;
issued_len = 0;
- if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL) {
- bp->b_error = EIO;
- bp->b_resid = bp->b_bcount;
- biodone(bio);
- return 0;
- }
+ dmv = dev->si_drv1;
switch(bp->b_cmd) {
case BUF_CMD_READ:
KKASSERT(buf_len == 0);
break;
default:
- dm_dev_unbusy(dmv);
bp->b_error = EIO;
bp->b_resid = bp->b_bcount;
biodone(bio);
if (bypass == 0 &&
bounds_check_with_mediasize(bio, DEV_BSIZE,
dm_table_size(&dmv->table_head)) <= 0) {
- dm_dev_unbusy(dmv);
bp->b_resid = bp->b_bcount;
biodone(bio);
return 0;
nestiobuf_error(bio, EINVAL);
nestiobuf_start(bio);
dm_table_release(&dmv->table_head, DM_TABLE_ACTIVE);
- dm_dev_unbusy(dmv);
return 0;
}
dev_type = 0;
issued_len = 0;
- if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL) {
- return EIO;
- }
+ dmv = dev->si_drv1;
/* Select active table */
tbl = dm_table_get_entry(&dmv->table_head, DM_TABLE_ACTIVE);
out:
dm_table_release(&dmv->table_head, DM_TABLE_ACTIVE);
- dm_dev_unbusy(dmv);
return error;
}
size = 0;
- if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL)
- return ENOENT;
+ if ((dmv = dev->si_drv1) == NULL)
+ return ENXIO;
size = dm_table_size(&dmv->table_head);
- dm_dev_unbusy(dmv);
-
ap->a_result = (int64_t)size;
return 0;
dmv->devt = disk_create_named(name_buf, dm_minor, dmv->diskp, &dm_ops);
reference_dev(dmv->devt);
+ dmv->devt->si_drv1 = dmv;
+ dmv->devt->si_drv2 = dmv->diskp;
+
dmv->minor = minor(dmv->devt);
udev_dict_set_cstr(dmv->devt, "subsystem", "disk");