mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 02:44:41 +03:00
zvol: make calls to platform ops static
There's no need to make the platform ops dynamic dispatch. This change replaces the dynamic dispatch with static calls to the platform-specific functions. To avoid name collisions, prefix all platform-specific functions with `zvol_os_`. I actually find `zvol_..._os` slightly nicer to read in the calling code, but having it as a prefix is useful. Advantage: - easier jump-to-definition / grepping - potential benefits to static analysis - better legibility Future work: also prefix remaining `static` functions in zvol_os.c. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Christian Schwarz <christian.schwarz@nutanix.com> Closes #12965
This commit is contained in:
committed by
GitHub
parent
f2c5bc150e
commit
1dccfd7a38
+21
-28
@@ -92,7 +92,6 @@ unsigned int zvol_volmode = ZFS_VOLMODE_GEOM;
|
||||
struct hlist_head *zvol_htable;
|
||||
static list_t zvol_state_list;
|
||||
krwlock_t zvol_state_lock;
|
||||
static const zvol_platform_ops_t *ops;
|
||||
|
||||
typedef enum {
|
||||
ZVOL_ASYNC_REMOVE_MINORS,
|
||||
@@ -365,7 +364,7 @@ out:
|
||||
mutex_exit(&zv->zv_state_lock);
|
||||
|
||||
if (error == 0 && zv != NULL)
|
||||
ops->zv_update_volsize(zv, volsize);
|
||||
zvol_os_update_volsize(zv, volsize);
|
||||
|
||||
return (SET_ERROR(error));
|
||||
}
|
||||
@@ -747,15 +746,15 @@ zvol_setup_zv(zvol_state_t *zv)
|
||||
if (error)
|
||||
return (SET_ERROR(error));
|
||||
|
||||
ops->zv_set_capacity(zv, volsize >> 9);
|
||||
zvol_os_set_capacity(zv, volsize >> 9);
|
||||
zv->zv_volsize = volsize;
|
||||
|
||||
if (ro || dmu_objset_is_snapshot(os) ||
|
||||
!spa_writeable(dmu_objset_spa(os))) {
|
||||
ops->zv_set_disk_ro(zv, 1);
|
||||
zvol_os_set_disk_ro(zv, 1);
|
||||
zv->zv_flags |= ZVOL_RDONLY;
|
||||
} else {
|
||||
ops->zv_set_disk_ro(zv, 0);
|
||||
zvol_os_set_disk_ro(zv, 0);
|
||||
zv->zv_flags &= ~ZVOL_RDONLY;
|
||||
}
|
||||
return (0);
|
||||
@@ -1119,7 +1118,7 @@ zvol_create_minors_recursive(const char *name)
|
||||
* taskq_dispatch to parallel prefetch zvol dnodes. Note we don't need
|
||||
* any lock because all list operation is done on the current thread.
|
||||
*
|
||||
* We will use this list to do zvol_create_minor_impl after prefetch
|
||||
* We will use this list to do zvol_os_create_minor after prefetch
|
||||
* so we don't have to traverse using dmu_objset_find again.
|
||||
*/
|
||||
list_create(&minors_list, sizeof (minors_job_t),
|
||||
@@ -1133,7 +1132,7 @@ zvol_create_minors_recursive(const char *name)
|
||||
&snapdev, NULL);
|
||||
|
||||
if (error == 0 && snapdev == ZFS_SNAPDEV_VISIBLE)
|
||||
(void) ops->zv_create_minor(name);
|
||||
(void) zvol_os_create_minor(name);
|
||||
} else {
|
||||
fstrans_cookie_t cookie = spl_fstrans_mark();
|
||||
(void) dmu_objset_find(name, zvol_create_minors_cb,
|
||||
@@ -1144,13 +1143,13 @@ zvol_create_minors_recursive(const char *name)
|
||||
taskq_wait_outstanding(system_taskq, 0);
|
||||
|
||||
/*
|
||||
* Prefetch is completed, we can do zvol_create_minor_impl
|
||||
* Prefetch is completed, we can do zvol_os_create_minor
|
||||
* sequentially.
|
||||
*/
|
||||
while ((job = list_head(&minors_list)) != NULL) {
|
||||
list_remove(&minors_list, job);
|
||||
if (!job->error)
|
||||
(void) ops->zv_create_minor(job->name);
|
||||
(void) zvol_os_create_minor(job->name);
|
||||
kmem_strfree(job->name);
|
||||
kmem_free(job, sizeof (minors_job_t));
|
||||
}
|
||||
@@ -1180,9 +1179,9 @@ zvol_create_minor(const char *name)
|
||||
"snapdev", &snapdev, NULL);
|
||||
|
||||
if (error == 0 && snapdev == ZFS_SNAPDEV_VISIBLE)
|
||||
(void) ops->zv_create_minor(name);
|
||||
(void) zvol_os_create_minor(name);
|
||||
} else {
|
||||
(void) ops->zv_create_minor(name);
|
||||
(void) zvol_os_create_minor(name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1193,7 +1192,7 @@ zvol_create_minor(const char *name)
|
||||
static void
|
||||
zvol_free_task(void *arg)
|
||||
{
|
||||
ops->zv_free(arg);
|
||||
zvol_os_free(arg);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1238,7 +1237,7 @@ zvol_remove_minors_impl(const char *name)
|
||||
* Cleared while holding zvol_state_lock as a writer
|
||||
* which will prevent zvol_open() from opening it.
|
||||
*/
|
||||
ops->zv_clear_private(zv);
|
||||
zvol_os_clear_private(zv);
|
||||
|
||||
/* Drop zv_state_lock before zvol_free() */
|
||||
mutex_exit(&zv->zv_state_lock);
|
||||
@@ -1257,7 +1256,7 @@ zvol_remove_minors_impl(const char *name)
|
||||
/* Drop zvol_state_lock before calling zvol_free() */
|
||||
while ((zv = list_head(&free_list)) != NULL) {
|
||||
list_remove(&free_list, zv);
|
||||
ops->zv_free(zv);
|
||||
zvol_os_free(zv);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1290,7 +1289,7 @@ zvol_remove_minor_impl(const char *name)
|
||||
}
|
||||
zvol_remove(zv);
|
||||
|
||||
ops->zv_clear_private(zv);
|
||||
zvol_os_clear_private(zv);
|
||||
mutex_exit(&zv->zv_state_lock);
|
||||
break;
|
||||
} else {
|
||||
@@ -1302,7 +1301,7 @@ zvol_remove_minor_impl(const char *name)
|
||||
rw_exit(&zvol_state_lock);
|
||||
|
||||
if (zv != NULL)
|
||||
ops->zv_free(zv);
|
||||
zvol_os_free(zv);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1327,14 +1326,14 @@ zvol_rename_minors_impl(const char *oldname, const char *newname)
|
||||
mutex_enter(&zv->zv_state_lock);
|
||||
|
||||
if (strcmp(zv->zv_name, oldname) == 0) {
|
||||
ops->zv_rename_minor(zv, newname);
|
||||
zvol_os_rename_minor(zv, newname);
|
||||
} else if (strncmp(zv->zv_name, oldname, oldnamelen) == 0 &&
|
||||
(zv->zv_name[oldnamelen] == '/' ||
|
||||
zv->zv_name[oldnamelen] == '@')) {
|
||||
char *name = kmem_asprintf("%s%c%s", newname,
|
||||
zv->zv_name[oldnamelen],
|
||||
zv->zv_name + oldnamelen + 1);
|
||||
ops->zv_rename_minor(zv, name);
|
||||
zvol_os_rename_minor(zv, name);
|
||||
kmem_strfree(name);
|
||||
}
|
||||
|
||||
@@ -1358,7 +1357,7 @@ zvol_set_snapdev_cb(const char *dsname, void *param)
|
||||
|
||||
switch (arg->snapdev) {
|
||||
case ZFS_SNAPDEV_VISIBLE:
|
||||
(void) ops->zv_create_minor(dsname);
|
||||
(void) zvol_os_create_minor(dsname);
|
||||
break;
|
||||
case ZFS_SNAPDEV_HIDDEN:
|
||||
(void) zvol_remove_minor_impl(dsname);
|
||||
@@ -1415,14 +1414,14 @@ zvol_set_volmode_impl(char *name, uint64_t volmode)
|
||||
case ZFS_VOLMODE_GEOM:
|
||||
case ZFS_VOLMODE_DEV:
|
||||
(void) zvol_remove_minor_impl(name);
|
||||
(void) ops->zv_create_minor(name);
|
||||
(void) zvol_os_create_minor(name);
|
||||
break;
|
||||
case ZFS_VOLMODE_DEFAULT:
|
||||
(void) zvol_remove_minor_impl(name);
|
||||
if (zvol_volmode == ZFS_VOLMODE_NONE)
|
||||
break;
|
||||
else /* if zvol_volmode is invalid defaults to "geom" */
|
||||
(void) ops->zv_create_minor(name);
|
||||
(void) zvol_os_create_minor(name);
|
||||
break;
|
||||
}
|
||||
spl_fstrans_unmark(cookie);
|
||||
@@ -1699,13 +1698,7 @@ boolean_t
|
||||
zvol_is_zvol(const char *name)
|
||||
{
|
||||
|
||||
return (ops->zv_is_zvol(name));
|
||||
}
|
||||
|
||||
void
|
||||
zvol_register_ops(const zvol_platform_ops_t *zvol_ops)
|
||||
{
|
||||
ops = zvol_ops;
|
||||
return (zvol_os_is_zvol(name));
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
Reference in New Issue
Block a user