-
-int cat_cancel_cb(const struct lu_env *env, struct llog_handle *cathandle,
- struct llog_rec_hdr *rec, void *data)
-{
- struct llog_logid_rec *lir = (struct llog_logid_rec *)rec;
- struct llog_handle *loghandle;
- struct llog_log_hdr *llh;
- int rc;
-
- ENTRY;
-
- if (rec->lrh_type != LLOG_LOGID_MAGIC) {
- CERROR("%s: invalid record in catalog\n",
- loghandle->lgh_ctxt->loc_obd->obd_name);
- RETURN(-EINVAL);
- }
- CDEBUG(D_HA, "processing log "LPX64":%x at index %u of catalog "
- LPX64"\n", lir->lid_id.lgl_oid, lir->lid_id.lgl_ogen,
- rec->lrh_index, cathandle->lgh_id.lgl_oid);
-
- rc = llog_cat_id2handle(env, cathandle, &loghandle, &lir->lid_id);
- if (rc) {
- CERROR("%s: cannot find handle for llog "LPX64": %d\n",
- cathandle->lgh_ctxt->loc_obd->obd_name,
- lir->lid_id.lgl_oid, rc);
- if (rc == -ENOENT || rc == -ESTALE) {
- /* remove index from catalog */
- llog_cat_cleanup(env, cathandle, NULL, rec->lrh_index);
- }
- RETURN(rc);
- }
-
- llh = loghandle->lgh_hdr;
- if ((llh->llh_flags & LLOG_F_ZAP_WHEN_EMPTY) &&
- (llh->llh_count == 1)) {
- rc = llog_destroy(env, loghandle);
- if (rc)
- CERROR("%s: fail to destroy empty log: rc = %d\n",
- loghandle->lgh_ctxt->loc_obd->obd_name, rc);
-
- llog_cat_cleanup(env, cathandle, loghandle,
- loghandle->u.phd.phd_cookie.lgc_index);
- }
- llog_handle_put(loghandle);
-
- RETURN(rc);
-}
-EXPORT_SYMBOL(cat_cancel_cb);
-
-/* helper to initialize catalog llog and process it to cancel */
-int llog_cat_init_and_process(const struct lu_env *env,
- struct llog_handle *llh)
-{
- int rc;
-
- rc = llog_init_handle(env, llh, LLOG_F_IS_CAT, NULL);
- if (rc)
- RETURN(rc);
-
- rc = llog_process_or_fork(env, llh, cat_cancel_cb, NULL, NULL, false);
- if (rc)
- CERROR("%s: llog_process() with cat_cancel_cb failed: rc = "
- "%d\n", llh->lgh_ctxt->loc_obd->obd_name, rc);
- RETURN(0);
-}
-EXPORT_SYMBOL(llog_cat_init_and_process);
-