]> git.proxmox.com Git - mirror_zfs.git/commitdiff
vdev_disk: make read/write IO function configurable
authorRob Norris <rob.norris@klarasystems.com>
Tue, 9 Jan 2024 01:29:19 +0000 (12:29 +1100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 25 Mar 2024 23:51:04 +0000 (16:51 -0700)
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

module/os/linux/zfs/vdev_disk.c

index 51e7cef2fc783b16018ac2f6eb8c9925cbd1b3b6..de4dba72fa3cc3a86ed65b340aa087fcfcb15aeb 100644 (file)
@@ -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,