th->th_dev = NULL;
lu_context_exit(&th->th_ctx);
lu_context_fini(&th->th_ctx);
- udmu_tx_cb_destroy(oh);
+ OBD_FREE_PTR(oh);
+
EXIT;
}
struct osd_thandle *oh;
struct thandle *th;
dmu_tx_t *tx;
- int hook_res, rc;
+ int hook_res;
ENTRY;
+
tx = udmu_tx_create(&osd->od_objset);
if (tx == NULL)
RETURN(ERR_PTR(-ENOMEM));
/* alloc callback data */
- oh = udmu_tx_cb_create(sizeof(*oh));
+ OBD_ALLOC_PTR(oh);
+ if (oh == NULL) {
+ udmu_tx_abort(tx);
+ RETURN(ERR_PTR(-ENOMEM));
+ }
+
#if 0
oh->ot_sync = p->tp_sync;
#endif
lu_context_init(&th->th_ctx, LCT_TX_HANDLE);
lu_context_enter(&th->th_ctx);
/* add commit callback */
- rc = udmu_tx_cb_add(tx, osd_trans_commit_cb, (void *)oh);
- LASSERT(rc == 0);
+ udmu_tx_cb_register(tx, osd_trans_commit_cb, (void *)oh);
hook_res = dt_txn_hook_start(env, dt, th);
if (hook_res != 0)
}
/* commit callback API */
-void * udmu_tx_cb_create(size_t bytes)
+void udmu_tx_cb_register(dmu_tx_t *tx, udmu_tx_callback_func_t *func, void *data)
{
- return dmu_tx_callback_data_create(bytes);
-}
-
-int udmu_tx_cb_add(dmu_tx_t *tx, void *func, void *data)
-{
- return dmu_tx_callback_commit_add(tx, func, data);
-}
-
-int udmu_tx_cb_destroy(void *data)
-{
- return dmu_tx_callback_data_destroy(data);
+ dmu_tx_callback_register(tx, func, data);
}
int udmu_indblk_overhead(dmu_buf_t *db, unsigned long *used,
void udmu_tx_commit(dmu_tx_t *tx);
-void * udmu_tx_cb_create(size_t bytes);
+/* Commit callbacks */
+typedef void udmu_tx_callback_func_t(void *dcb_data, int error);
+void udmu_tx_cb_register(dmu_tx_t *tx, udmu_tx_callback_func_t *func, void *data);
-int udmu_tx_cb_add(dmu_tx_t *tx, void *func, void *data);
-
-int udmu_tx_cb_destroy(void *data);
int udmu_object_is_zap(dmu_buf_t *);