return (0);
}
-zil_replay_func_t *ztest_replay_vector[TX_MAX_TYPE] = {
+zil_replay_func_t ztest_replay_vector[TX_MAX_TYPE] = {
NULL, /* 0 no such transaction type */
- (zil_replay_func_t *)ztest_replay_create, /* TX_CREATE */
+ (zil_replay_func_t)ztest_replay_create, /* TX_CREATE */
NULL, /* TX_MKDIR */
NULL, /* TX_MKXATTR */
NULL, /* TX_SYMLINK */
- (zil_replay_func_t *)ztest_replay_remove, /* TX_REMOVE */
+ (zil_replay_func_t)ztest_replay_remove, /* TX_REMOVE */
NULL, /* TX_RMDIR */
NULL, /* TX_LINK */
NULL, /* TX_RENAME */
- (zil_replay_func_t *)ztest_replay_write, /* TX_WRITE */
- (zil_replay_func_t *)ztest_replay_truncate, /* TX_TRUNCATE */
- (zil_replay_func_t *)ztest_replay_setattr, /* TX_SETATTR */
+ (zil_replay_func_t)ztest_replay_write, /* TX_WRITE */
+ (zil_replay_func_t)ztest_replay_truncate, /* TX_TRUNCATE */
+ (zil_replay_func_t)ztest_replay_setattr, /* TX_SETATTR */
NULL, /* TX_ACL */
NULL, /* TX_CREATE_ACL */
NULL, /* TX_CREATE_ATTR */
if (islog)
(void) rw_exit(&ztest_name_lock);
} else {
+ /*
+ * Ideally we would like to be able to randomly
+ * call vdev_[on|off]line without holding locks
+ * to force unpredictable failures but the side
+ * effects of vdev_[on|off]line prevent us from
+ * doing so. We grab the ztest_vdev_lock here to
+ * prevent a race between injection testing and
+ * aux_vdev removal.
+ */
+ mutex_enter(&ztest_vdev_lock);
(void) vdev_online(spa, guid0, 0, NULL);
+ mutex_exit(&ztest_vdev_lock);
}
}