diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 4fe35342d..75bd560a2 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -242,7 +242,7 @@ typedef struct kthread { #define getcomm() "unknown" #define thread_exit zk_thread_exit #define thread_create(stk, stksize, func, arg, len, pp, state, pri) \ - zk_thread_create(stk, stksize, (thread_func_t)func, arg, \ + zk_thread_create(stk, stksize, func, arg, \ len, NULL, state, pri, PTHREAD_CREATE_DETACHED) #define thread_join(t) zk_thread_join(t) #define newproc(f, a, cid, pri, ctp, pid) (ENOSYS) diff --git a/include/sys/zio.h b/include/sys/zio.h index 4eaabc38c..a7c2346f1 100644 --- a/include/sys/zio.h +++ b/include/sys/zio.h @@ -522,8 +522,8 @@ extern void zio_shrink(zio_t *zio, uint64_t size); extern int zio_wait(zio_t *zio); extern void zio_nowait(zio_t *zio); -extern void zio_execute(zio_t *zio); -extern void zio_interrupt(zio_t *zio); +extern void zio_execute(void *zio); +extern void zio_interrupt(void *zio); extern void zio_delay_init(zio_t *zio); extern void zio_delay_interrupt(zio_t *zio); diff --git a/module/zfs/arc.c b/module/zfs/arc.c index a26e1156c..2a5aeb272 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -4214,7 +4214,7 @@ arc_kmem_reap_now(void) * using mutex_tryenter() from arc_reclaim_thread(). */ static void -arc_reclaim_thread(void) +arc_reclaim_thread(void *_unused) { fstrans_cookie_t cookie = spl_fstrans_mark(); hrtime_t growtime = 0; @@ -7521,7 +7521,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz) * heart of the L2ARC. */ static void -l2arc_feed_thread(void) +l2arc_feed_thread(void *_unused) { callb_cpr_t cpr; l2arc_dev_t *dev; diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c index dc2c00495..9b322d0de 100644 --- a/module/zfs/dbuf.c +++ b/module/zfs/dbuf.c @@ -531,7 +531,7 @@ dbuf_evict_one(void) * out of the cache it is destroyed and becomes eligible for arc eviction. */ static void -dbuf_evict_thread(void) +dbuf_evict_thread(void *unused) { callb_cpr_t cpr; @@ -1977,7 +1977,6 @@ dmu_buf_will_fill(dmu_buf_t *db_fake, dmu_tx_t *tx) (void) dbuf_dirty(db, tx); } -#pragma weak dmu_buf_fill_done = dbuf_fill_done /* ARGSUSED */ void dbuf_fill_done(dmu_buf_impl_t *db, dmu_tx_t *tx) @@ -1999,6 +1998,12 @@ dbuf_fill_done(dmu_buf_impl_t *db, dmu_tx_t *tx) mutex_exit(&db->db_mtx); } +void __weak +dmu_buf_fill_done(dmu_buf_t *db, dmu_tx_t *tx) +{ + dbuf_fill_done((dmu_buf_impl_t *)db, tx); +} + void dmu_buf_write_embedded(dmu_buf_t *dbuf, void *data, bp_embedded_type_t etype, enum zio_compress comp, @@ -2821,7 +2826,6 @@ dbuf_rm_spill(dnode_t *dn, dmu_tx_t *tx) dbuf_free_range(dn, DMU_SPILL_BLKID, DMU_SPILL_BLKID, tx); } -#pragma weak dmu_buf_add_ref = dbuf_add_ref void dbuf_add_ref(dmu_buf_impl_t *db, void *tag) { @@ -2829,6 +2833,14 @@ dbuf_add_ref(dmu_buf_impl_t *db, void *tag) VERIFY3S(holds, >, 1); } +void __weak +dmu_buf_add_ref(dmu_buf_t *_db, void* tag) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)_db; + dbuf_add_ref(db, tag); +} + + #pragma weak dmu_buf_try_add_ref = dbuf_try_add_ref boolean_t dbuf_try_add_ref(dmu_buf_t *db_fake, objset_t *os, uint64_t obj, uint64_t blkid, @@ -2985,13 +2997,18 @@ dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag) } -#pragma weak dmu_buf_refcount = dbuf_refcount uint64_t dbuf_refcount(dmu_buf_impl_t *db) { return (refcount_count(&db->db_holds)); } +uint64_t __weak +dmu_buf_refcount(dmu_buf_t *db) +{ + return dbuf_refcount((dmu_buf_impl_t *)db); +} + void * dmu_buf_replace_user(dmu_buf_t *db_fake, dmu_buf_user_t *old_user, dmu_buf_user_t *new_user) diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c index 00478a39f..a6ee136e0 100644 --- a/module/zfs/mmp.c +++ b/module/zfs/mmp.c @@ -123,7 +123,7 @@ uint_t zfs_multihost_import_intervals = MMP_DEFAULT_IMPORT_INTERVALS; */ uint_t zfs_multihost_fail_intervals = MMP_DEFAULT_FAIL_INTERVALS; -static void mmp_thread(spa_t *spa); +static void mmp_thread(void *spa); void mmp_init(spa_t *spa) @@ -364,8 +364,9 @@ mmp_write_uberblock(spa_t *spa) } static void -mmp_thread(spa_t *spa) +mmp_thread(void *arg) { + spa_t *spa = arg; mmp_thread_t *mmp = &spa->spa_mmp; boolean_t last_spa_suspended = spa_suspended(spa); boolean_t last_spa_multihost = spa_multihost(spa); diff --git a/module/zfs/spa.c b/module/zfs/spa.c index f1f1444f1..3cb73e977 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -6068,8 +6068,9 @@ spa_async_autoexpand(spa_t *spa, vdev_t *vd) } static void -spa_async_thread(spa_t *spa) +spa_async_thread(void *arg) { + spa_t *spa = arg; int tasks, i; ASSERT(spa->spa_sync_on); diff --git a/module/zfs/txg.c b/module/zfs/txg.c index 65bd7f93a..87b68f576 100644 --- a/module/zfs/txg.c +++ b/module/zfs/txg.c @@ -108,8 +108,8 @@ * now transition to the syncing state. */ -static void txg_sync_thread(dsl_pool_t *dp); -static void txg_quiesce_thread(dsl_pool_t *dp); +static void txg_sync_thread(void *arg); +static void txg_quiesce_thread(void *arg); int zfs_txg_timeout = 5; /* max seconds worth of delta per txg */ @@ -408,8 +408,9 @@ txg_quiesce(dsl_pool_t *dp, uint64_t txg) } static void -txg_do_callbacks(list_t *cb_list) +txg_do_callbacks(void *_cb_list) { + list_t *cb_list = _cb_list; dmu_tx_do_callbacks(cb_list, 0); list_destroy(cb_list); @@ -457,7 +458,7 @@ txg_dispatch_callbacks(dsl_pool_t *dp, uint64_t txg) list_move_tail(cb_list, &tc->tc_callbacks[g]); - (void) taskq_dispatch(tx->tx_commit_cb_taskq, (task_func_t *) + (void) taskq_dispatch(tx->tx_commit_cb_taskq, txg_do_callbacks, cb_list, TQ_SLEEP); } } @@ -477,8 +478,9 @@ txg_wait_callbacks(dsl_pool_t *dp) } static void -txg_sync_thread(dsl_pool_t *dp) +txg_sync_thread(void *arg) { + dsl_pool_t *dp = arg; spa_t *spa = dp->dp_spa; tx_state_t *tx = &dp->dp_tx; callb_cpr_t cpr; @@ -561,8 +563,9 @@ txg_sync_thread(dsl_pool_t *dp) } static void -txg_quiesce_thread(dsl_pool_t *dp) +txg_quiesce_thread(void *arg) { + dsl_pool_t *dp = arg; tx_state_t *tx = &dp->dp_tx; callb_cpr_t cpr; diff --git a/module/zfs/zfs_replay.c b/module/zfs/zfs_replay.c index 30efb4b57..7a837f8a0 100644 --- a/module/zfs/zfs_replay.c +++ b/module/zfs/zfs_replay.c @@ -72,7 +72,7 @@ zfs_init_vattr(vattr_t *vap, uint64_t mask, uint64_t mode, /* ARGSUSED */ static int -zfs_replay_error(zfsvfs_t *zfsvfs, lr_t *lr, boolean_t byteswap) +zfs_replay_error(void *zsb, char *lr, boolean_t byteswap) { return (SET_ERROR(ENOTSUP)); } @@ -265,9 +265,10 @@ zfs_replay_swap_attrs(lr_attr_t *lrattr) * as option FUID information. */ static int -zfs_replay_create_acl(zfsvfs_t *zfsvfs, - lr_acl_create_t *lracl, boolean_t byteswap) +zfs_replay_create_acl(void *_zfsvfs, char *_lracl, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_acl_create_t *lracl = (lr_acl_create_t *)_lracl; char *name = NULL; /* location determined later */ lr_create_t *lr = (lr_create_t *)lracl; znode_t *dzp; @@ -413,8 +414,10 @@ bail: } static int -zfs_replay_create(zfsvfs_t *zfsvfs, lr_create_t *lr, boolean_t byteswap) +zfs_replay_create(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_create_t *lr = (lr_create_t *)_lr; char *name = NULL; /* location determined later */ char *link; /* symlink content follows name */ znode_t *dzp; @@ -545,8 +548,10 @@ out: } static int -zfs_replay_remove(zfsvfs_t *zfsvfs, lr_remove_t *lr, boolean_t byteswap) +zfs_replay_remove(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_remove_t *lr = (lr_remove_t *)_lr; char *name = (char *)(lr + 1); /* name follows lr_remove_t */ znode_t *dzp; int error; @@ -578,8 +583,10 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_remove_t *lr, boolean_t byteswap) } static int -zfs_replay_link(zfsvfs_t *zfsvfs, lr_link_t *lr, boolean_t byteswap) +zfs_replay_link(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_link_t *lr = (lr_link_t *)_lr; char *name = (char *)(lr + 1); /* name follows lr_link_t */ znode_t *dzp, *zp; int error; @@ -608,8 +615,10 @@ zfs_replay_link(zfsvfs_t *zfsvfs, lr_link_t *lr, boolean_t byteswap) } static int -zfs_replay_rename(zfsvfs_t *zfsvfs, lr_rename_t *lr, boolean_t byteswap) +zfs_replay_rename(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_rename_t *lr = (lr_rename_t *)_lr; char *sname = (char *)(lr + 1); /* sname and tname follow lr_rename_t */ char *tname = sname + strlen(sname) + 1; znode_t *sdzp, *tdzp; @@ -639,8 +648,10 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_rename_t *lr, boolean_t byteswap) } static int -zfs_replay_write(zfsvfs_t *zfsvfs, lr_write_t *lr, boolean_t byteswap) +zfs_replay_write(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_write_t *lr = (lr_write_t *)_lr; char *data = (char *)(lr + 1); /* data follows lr_write_t */ znode_t *zp; int error, written; @@ -708,8 +719,10 @@ zfs_replay_write(zfsvfs_t *zfsvfs, lr_write_t *lr, boolean_t byteswap) * the file is grown. */ static int -zfs_replay_write2(zfsvfs_t *zfsvfs, lr_write_t *lr, boolean_t byteswap) +zfs_replay_write2(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_write_t *lr = (lr_write_t *)_lr; znode_t *zp; int error; uint64_t end; @@ -753,8 +766,10 @@ top: } static int -zfs_replay_truncate(zfsvfs_t *zfsvfs, lr_truncate_t *lr, boolean_t byteswap) +zfs_replay_truncate(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_truncate_t *lr = (lr_truncate_t *)_lr; znode_t *zp; flock64_t fl; int error; @@ -780,8 +795,10 @@ zfs_replay_truncate(zfsvfs_t *zfsvfs, lr_truncate_t *lr, boolean_t byteswap) } static int -zfs_replay_setattr(zfsvfs_t *zfsvfs, lr_setattr_t *lr, boolean_t byteswap) +zfs_replay_setattr(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_setattr_t *lr = (lr_setattr_t *)_lr; znode_t *zp; xvattr_t xva; vattr_t *vap = &xva.xva_vattr; @@ -834,8 +851,10 @@ zfs_replay_setattr(zfsvfs_t *zfsvfs, lr_setattr_t *lr, boolean_t byteswap) } static int -zfs_replay_acl_v0(zfsvfs_t *zfsvfs, lr_acl_v0_t *lr, boolean_t byteswap) +zfs_replay_acl_v0(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_acl_v0_t *lr = (lr_acl_v0_t *)_lr; ace_t *ace = (ace_t *)(lr + 1); /* ace array follows lr_acl_t */ vsecattr_t vsa; znode_t *zp; @@ -878,8 +897,10 @@ zfs_replay_acl_v0(zfsvfs_t *zfsvfs, lr_acl_v0_t *lr, boolean_t byteswap) * */ static int -zfs_replay_acl(zfsvfs_t *zfsvfs, lr_acl_t *lr, boolean_t byteswap) +zfs_replay_acl(void *_zfsvfs, char *_lr, boolean_t byteswap) { + zfsvfs_t *zfsvfs = _zfsvfs; + lr_acl_t *lr = (lr_acl_t *)_lr; ace_t *ace = (ace_t *)(lr + 1); vsecattr_t vsa; znode_t *zp; @@ -929,25 +950,25 @@ zfs_replay_acl(zfsvfs_t *zfsvfs, lr_acl_t *lr, boolean_t byteswap) * Callback vectors for replaying records */ zil_replay_func_t zfs_replay_vector[TX_MAX_TYPE] = { - (zil_replay_func_t)zfs_replay_error, /* no such type */ - (zil_replay_func_t)zfs_replay_create, /* TX_CREATE */ - (zil_replay_func_t)zfs_replay_create, /* TX_MKDIR */ - (zil_replay_func_t)zfs_replay_create, /* TX_MKXATTR */ - (zil_replay_func_t)zfs_replay_create, /* TX_SYMLINK */ - (zil_replay_func_t)zfs_replay_remove, /* TX_REMOVE */ - (zil_replay_func_t)zfs_replay_remove, /* TX_RMDIR */ - (zil_replay_func_t)zfs_replay_link, /* TX_LINK */ - (zil_replay_func_t)zfs_replay_rename, /* TX_RENAME */ - (zil_replay_func_t)zfs_replay_write, /* TX_WRITE */ - (zil_replay_func_t)zfs_replay_truncate, /* TX_TRUNCATE */ - (zil_replay_func_t)zfs_replay_setattr, /* TX_SETATTR */ - (zil_replay_func_t)zfs_replay_acl_v0, /* TX_ACL_V0 */ - (zil_replay_func_t)zfs_replay_acl, /* TX_ACL */ - (zil_replay_func_t)zfs_replay_create_acl, /* TX_CREATE_ACL */ - (zil_replay_func_t)zfs_replay_create, /* TX_CREATE_ATTR */ - (zil_replay_func_t)zfs_replay_create_acl, /* TX_CREATE_ACL_ATTR */ - (zil_replay_func_t)zfs_replay_create_acl, /* TX_MKDIR_ACL */ - (zil_replay_func_t)zfs_replay_create, /* TX_MKDIR_ATTR */ - (zil_replay_func_t)zfs_replay_create_acl, /* TX_MKDIR_ACL_ATTR */ - (zil_replay_func_t)zfs_replay_write2, /* TX_WRITE2 */ + zfs_replay_error, /* no such type */ + zfs_replay_create, /* TX_CREATE */ + zfs_replay_create, /* TX_MKDIR */ + zfs_replay_create, /* TX_MKXATTR */ + zfs_replay_create, /* TX_SYMLINK */ + zfs_replay_remove, /* TX_REMOVE */ + zfs_replay_remove, /* TX_RMDIR */ + zfs_replay_link, /* TX_LINK */ + zfs_replay_rename, /* TX_RENAME */ + zfs_replay_write, /* TX_WRITE */ + zfs_replay_truncate, /* TX_TRUNCATE */ + zfs_replay_setattr, /* TX_SETATTR */ + zfs_replay_acl_v0, /* TX_ACL_V0 */ + zfs_replay_acl, /* TX_ACL */ + zfs_replay_create_acl, /* TX_CREATE_ACL */ + zfs_replay_create, /* TX_CREATE_ATTR */ + zfs_replay_create_acl, /* TX_CREATE_ACL_ATTR */ + zfs_replay_create_acl, /* TX_MKDIR_ACL */ + zfs_replay_create, /* TX_MKDIR_ATTR */ + zfs_replay_create_acl, /* TX_MKDIR_ACL_ATTR */ + zfs_replay_write2, /* TX_WRITE2 */ }; diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index d415e8024..128a96cc8 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -943,6 +943,13 @@ zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) return (0); } +static void +iput_wrapper(void *_i) +{ + struct inode *i = _i; + iput(i); +} + /* * Drop a reference on the passed inode asynchronously. This ensures * that the caller will never drop the last reference on an inode in @@ -959,7 +966,7 @@ zfs_iput_async(struct inode *ip) if (atomic_read(&ip->i_count) == 1) VERIFY(taskq_dispatch(dsl_pool_iput_taskq(dmu_objset_pool(os)), - (task_func_t *)iput, ip, TQ_SLEEP) != TASKQID_INVALID); + iput_wrapper, ip, TQ_SLEEP) != TASKQID_INVALID); else iput(ip); } diff --git a/module/zfs/zil.c b/module/zfs/zil.c index 6a1f190f5..e9c71b5b0 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -1240,8 +1240,9 @@ zil_itx_destroy(itx_t *itx) * so no locks are needed. */ static void -zil_itxg_clean(itxs_t *itxs) +zil_itxg_clean(void *data) { + itxs_t *itxs = data; itx_t *itx; list_t *list; avl_tree_t *t; @@ -1445,7 +1446,7 @@ zil_clean(zilog_t *zilog, uint64_t synced_txg) * created a bad performance problem. */ if (taskq_dispatch(zilog->zl_clean_taskq, - (void (*)(void *))zil_itxg_clean, clean_me, TQ_NOSLEEP) == 0) + zil_itxg_clean, clean_me, TQ_NOSLEEP) == 0) zil_itxg_clean(clean_me); } diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 82e801e83..af20983ad 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -1512,7 +1512,7 @@ zio_taskq_dispatch(zio_t *zio, zio_taskq_type_t q, boolean_t cutinline) * to dispatch the zio to another taskq at the same time. */ ASSERT(taskq_empty_ent(&zio->io_tqent)); - spa_taskq_dispatch_ent(spa, t, q, (task_func_t *)zio_execute, zio, + spa_taskq_dispatch_ent(spa, t, q, zio_execute, zio, flags, &zio->io_tqent); } @@ -1544,9 +1544,9 @@ zio_issue_async(zio_t *zio) } void -zio_interrupt(zio_t *zio) +zio_interrupt(void *zio) { - zio_taskq_dispatch(zio, ZIO_TASKQ_INTERRUPT, B_FALSE); + zio_taskq_dispatch((zio_t *)zio, ZIO_TASKQ_INTERRUPT, B_FALSE); } void @@ -1601,7 +1601,7 @@ zio_delay_interrupt(zio_t *zio) * OpenZFS's timeout_generic(). */ tid = taskq_dispatch_delay(system_taskq, - (task_func_t *)zio_interrupt, + zio_interrupt, zio, TQ_NOSLEEP, expire_at_tick); if (tid == TASKQID_INVALID) { /* @@ -1643,8 +1643,9 @@ static zio_pipe_stage_t *zio_pipeline[]; * it is externally visible. */ void -zio_execute(zio_t *zio) +zio_execute(void *_zio) { + zio_t *zio = _zio; fstrans_cookie_t cookie; cookie = spl_fstrans_mark(); @@ -1804,8 +1805,9 @@ zio_nowait(zio_t *zio) */ static void -zio_reexecute(zio_t *pio) +zio_reexecute(void *_pio) { + zio_t *pio = _pio; zio_t *cio, *cio_next; int c, w; zio_link_t *zl = NULL; @@ -3974,7 +3976,7 @@ zio_done(zio_t *zio) ASSERT(taskq_empty_ent(&zio->io_tqent)); spa_taskq_dispatch_ent(zio->io_spa, ZIO_TYPE_CLAIM, ZIO_TASKQ_ISSUE, - (task_func_t *)zio_reexecute, zio, 0, + zio_reexecute, zio, 0, &zio->io_tqent); } return (ZIO_PIPELINE_STOP); diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 254760220..01bcfd4d3 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -596,8 +596,10 @@ zvol_replay_truncate(zvol_state_t *zv, lr_truncate_t *lr, boolean_t byteswap) * after a system failure */ static int -zvol_replay_write(zvol_state_t *zv, lr_write_t *lr, boolean_t byteswap) +zvol_replay_write(void *_zv, char *_lr, boolean_t byteswap) { + zvol_state_t *zv = _zv; + lr_write_t *lr = (lr_write_t *)_lr; objset_t *os = zv->zv_objset; char *data = (char *)(lr + 1); /* data follows lr_write_t */ uint64_t off = lr->lr_offset; @@ -622,7 +624,7 @@ zvol_replay_write(zvol_state_t *zv, lr_write_t *lr, boolean_t byteswap) } static int -zvol_replay_err(zvol_state_t *zv, lr_t *lr, boolean_t byteswap) +zvol_replay_err(void *zv, char *lr, boolean_t byteswap) { return (SET_ERROR(ENOTSUP)); } @@ -632,19 +634,19 @@ zvol_replay_err(zvol_state_t *zv, lr_t *lr, boolean_t byteswap) * Only TX_WRITE and TX_TRUNCATE are needed for zvol. */ zil_replay_func_t zvol_replay_vector[TX_MAX_TYPE] = { - (zil_replay_func_t)zvol_replay_err, /* no such transaction type */ - (zil_replay_func_t)zvol_replay_err, /* TX_CREATE */ - (zil_replay_func_t)zvol_replay_err, /* TX_MKDIR */ - (zil_replay_func_t)zvol_replay_err, /* TX_MKXATTR */ - (zil_replay_func_t)zvol_replay_err, /* TX_SYMLINK */ - (zil_replay_func_t)zvol_replay_err, /* TX_REMOVE */ - (zil_replay_func_t)zvol_replay_err, /* TX_RMDIR */ - (zil_replay_func_t)zvol_replay_err, /* TX_LINK */ - (zil_replay_func_t)zvol_replay_err, /* TX_RENAME */ - (zil_replay_func_t)zvol_replay_write, /* TX_WRITE */ - (zil_replay_func_t)zvol_replay_truncate, /* TX_TRUNCATE */ - (zil_replay_func_t)zvol_replay_err, /* TX_SETATTR */ - (zil_replay_func_t)zvol_replay_err, /* TX_ACL */ + zvol_replay_err, /* no such transaction type */ + zvol_replay_err, /* TX_CREATE */ + zvol_replay_err, /* TX_MKDIR */ + zvol_replay_err, /* TX_MKXATTR */ + zvol_replay_err, /* TX_SYMLINK */ + zvol_replay_err, /* TX_REMOVE */ + zvol_replay_err, /* TX_RMDIR */ + zvol_replay_err, /* TX_LINK */ + zvol_replay_err, /* TX_RENAME */ + zvol_replay_write, /* TX_WRITE */ + zvol_replay_err, /* TX_TRUNCATE */ + zvol_replay_err, /* TX_SETATTR */ + zvol_replay_err, /* TX_ACL */ }; /*