+/**
+ * Invalidate all objects in the osp thandle
+ *
+ * invalidate all of objects in the update request, which will be called
+ * when the transaction is aborted.
+ *
+ * \param[in] oth osp thandle.
+ */
+static void osp_thandle_invalidate_object(const struct lu_env *env,
+ struct osp_thandle *oth,
+ int result)
+{
+ struct osp_update_request *our = oth->ot_our;
+ struct osp_object *obj;
+ struct osp_object *next;
+
+ if (our == NULL)
+ return;
+
+ list_for_each_entry_safe(obj, next, &our->our_invalidate_cb_list,
+ opo_invalidate_cb_list) {
+ if (result < 0)
+ osp_invalidate(env, &obj->opo_obj);
+
+ spin_lock(&obj->opo_lock);
+ list_del_init(&obj->opo_invalidate_cb_list);
+ spin_unlock(&obj->opo_lock);
+
+ dt_object_put(env, &obj->opo_obj);
+ }
+}
+
+static void osp_trans_stop_cb(const struct lu_env *env,
+ struct osp_thandle *oth, int result)