+ if (cfs_list_empty(&ctxt->loc_handle->u.chd.chd_head)) {
+ CDEBUG(D_HA, "there is no record related to ctxt %p\n", ctxt);
+ RETURN(0);
+ }
+
+ /* FIXME what value for gen->conn_cnt */
+ llog_gen_init(ctxt);
+
+ /* first add llog_gen_rec */
+ OBD_ALLOC_PTR(lgr);
+ if (!lgr)
+ RETURN(-ENOMEM);
+ lgr->lgr_hdr.lrh_len = lgr->lgr_tail.lrt_len = sizeof(*lgr);
+ lgr->lgr_hdr.lrh_type = LLOG_GEN_REC;
+
+ handle = fsfilt_start_log(ctxt->loc_exp->exp_obd, inode,
+ FSFILT_OP_CANCEL_UNLINK, NULL, 1);
+ if (IS_ERR(handle)) {
+ CERROR("fsfilt_start failed: %ld\n", PTR_ERR(handle));
+ OBD_FREE(lgr, sizeof(*lgr));
+ rc = PTR_ERR(handle);
+ RETURN(rc);
+ }
+
+ lgr->lgr_gen = ctxt->loc_gen;
+ rc = llog_obd_add(NULL, ctxt, &lgr->lgr_hdr, NULL, NULL, 1);
+ OBD_FREE_PTR(lgr);
+ rc1 = fsfilt_commit(ctxt->loc_exp->exp_obd, inode, handle, 0);
+ if (rc != 1 || rc1 != 0) {
+ rc = (rc != 1) ? rc : rc1;
+ RETURN(rc);
+ }