vdev_disk: make read/write IO function configurable
This is just setting up for the next couple of commits, which will add a new IO function and a parameter to select it. Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Closes #15533 Closes #15588
This commit is contained in:
parent
867178ae1d
commit
c4a13ba483
|
@ -946,6 +946,8 @@ vdev_disk_io_trim(zio_t *zio)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int (*vdev_disk_io_rw_fn)(zio_t *zio) = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vdev_disk_io_start(zio_t *zio)
|
vdev_disk_io_start(zio_t *zio)
|
||||||
{
|
{
|
||||||
|
@ -1029,7 +1031,7 @@ vdev_disk_io_start(zio_t *zio)
|
||||||
case ZIO_TYPE_READ:
|
case ZIO_TYPE_READ:
|
||||||
case ZIO_TYPE_WRITE:
|
case ZIO_TYPE_WRITE:
|
||||||
zio->io_target_timestamp = zio_handle_io_delay(zio);
|
zio->io_target_timestamp = zio_handle_io_delay(zio);
|
||||||
error = vdev_classic_physio(zio);
|
error = vdev_disk_io_rw_fn(zio);
|
||||||
rw_exit(&vd->vd_lock);
|
rw_exit(&vd->vd_lock);
|
||||||
if (error) {
|
if (error) {
|
||||||
zio->io_error = error;
|
zio->io_error = error;
|
||||||
|
@ -1102,8 +1104,25 @@ vdev_disk_rele(vdev_t *vd)
|
||||||
/* XXX: Implement me as a vnode rele for the device */
|
/* XXX: Implement me as a vnode rele for the device */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* At first use vdev use, set the submission function from the default value if
|
||||||
|
* it hasn't been set already.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
vdev_disk_init(spa_t *spa, nvlist_t *nv, void **tsd)
|
||||||
|
{
|
||||||
|
(void) spa;
|
||||||
|
(void) nv;
|
||||||
|
(void) tsd;
|
||||||
|
|
||||||
|
if (vdev_disk_io_rw_fn == NULL)
|
||||||
|
vdev_disk_io_rw_fn = vdev_classic_physio;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
vdev_ops_t vdev_disk_ops = {
|
vdev_ops_t vdev_disk_ops = {
|
||||||
.vdev_op_init = NULL,
|
.vdev_op_init = vdev_disk_init,
|
||||||
.vdev_op_fini = NULL,
|
.vdev_op_fini = NULL,
|
||||||
.vdev_op_open = vdev_disk_open,
|
.vdev_op_open = vdev_disk_open,
|
||||||
.vdev_op_close = vdev_disk_close,
|
.vdev_op_close = vdev_disk_close,
|
||||||
|
|
Loading…
Reference in New Issue