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
(cherry picked from commit c4a13ba483
)
This commit is contained in:
parent
13b5348848
commit
03ff875e09
|
@ -946,6 +946,8 @@ vdev_disk_io_trim(zio_t *zio)
|
|||
#endif
|
||||
}
|
||||
|
||||
int (*vdev_disk_io_rw_fn)(zio_t *zio) = NULL;
|
||||
|
||||
static void
|
||||
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_WRITE:
|
||||
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);
|
||||
if (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 */
|
||||
}
|
||||
|
||||
/*
|
||||
* 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_op_init = NULL,
|
||||
.vdev_op_init = vdev_disk_init,
|
||||
.vdev_op_fini = NULL,
|
||||
.vdev_op_open = vdev_disk_open,
|
||||
.vdev_op_close = vdev_disk_close,
|
||||
|
|
Loading…
Reference in New Issue