#define DEBUG_SUBSYSTEM S_LOG
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
#ifdef __KERNEL__
# include <libcfs/libcfs.h>
#else
* Send back cached llcd from llog before recovery if we have any.
* This is void is nothing cached is found there.
*/
- llog_sync(ctxt, NULL);
+ llog_sync(ctxt, NULL, 0);
/*
* Start recovery in separate thread.
* log record for the deletion. The commit callback calls this
* function.
*/
-int llog_obd_repl_cancel(struct llog_ctxt *ctxt,
- struct lov_stripe_md *lsm, int count,
- struct llog_cookie *cookies, int flags)
+int llog_obd_repl_cancel(const struct lu_env *env, struct llog_ctxt *ctxt,
+ struct lov_stripe_md *lsm, int count,
+ struct llog_cookie *cookies, int flags)
{
struct llog_commit_master *lcm;
struct llog_canceld_ctxt *llcd;
* Let's check if we have all structures alive. We also check for
* possible shutdown. Do nothing if we're stopping.
*/
- if (ctxt->loc_imp == NULL) {
+ if (ctxt->loc_flags & LLOG_CTXT_FLAG_STOP) {
+ CDEBUG(D_RPCTRACE, "Last sync was done for ctxt %p\n", ctxt);
+ GOTO(out, rc = -ENODEV);
+ }
+
+ if (ctxt->loc_imp == NULL) {
CDEBUG(D_RPCTRACE, "No import for ctxt %p\n", ctxt);
GOTO(out, rc = -ENODEV);
}
out:
if (rc)
llcd_put(ctxt);
+
+ if (flags & OBD_LLOG_FL_EXIT)
+ ctxt->loc_flags = LLOG_CTXT_FLAG_STOP;
+
cfs_mutex_unlock(&ctxt->loc_mutex);
return rc;
}
EXPORT_SYMBOL(llog_obd_repl_cancel);
-int llog_obd_repl_sync(struct llog_ctxt *ctxt, struct obd_export *exp)
+int llog_obd_repl_sync(struct llog_ctxt *ctxt, struct obd_export *exp,
+ int flags)
{
int rc = 0;
ENTRY;
*/
CDEBUG(D_RPCTRACE, "Kill cached llcd\n");
llcd_put(ctxt);
+
+ if (flags & OBD_LLOG_FL_EXIT)
+ ctxt->loc_flags = LLOG_CTXT_FLAG_STOP;
+
cfs_mutex_unlock(&ctxt->loc_mutex);
} else {
/*
*/
CDEBUG(D_RPCTRACE, "Sync cached llcd\n");
cfs_mutex_unlock(&ctxt->loc_mutex);
- rc = llog_cancel(ctxt, NULL, 0, NULL, OBD_LLOG_FL_SENDNOW);
+ rc = llog_cancel(NULL, ctxt, NULL, 0, NULL,
+ OBD_LLOG_FL_SENDNOW | flags);
}
RETURN(rc);
}
#else /* !__KERNEL__ */
-int llog_obd_repl_cancel(struct llog_ctxt *ctxt,
+int llog_obd_repl_cancel(const struct lu_env *env, struct llog_ctxt *ctxt,
struct lov_stripe_md *lsm, int count,
struct llog_cookie *cookies, int flags)
{