X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fptlrpc%2Frecov_thread.c;h=8076420dce4c20461e388f76607f18a82a0a884a;hp=e1d8eead2ab3cdbe012472d0566a2edd8086584e;hb=6ad1581bf6003631d87e8365c01c03b06be136de;hpb=25766da50b627648b04549ff3fb55af12acbcb4b diff --git a/lustre/ptlrpc/recov_thread.c b/lustre/ptlrpc/recov_thread.c index e1d8eea..8076420 100644 --- a/lustre/ptlrpc/recov_thread.c +++ b/lustre/ptlrpc/recov_thread.c @@ -562,7 +562,7 @@ int llog_obd_repl_connect(struct llog_ctxt *ctxt, * 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. @@ -604,7 +604,12 @@ int llog_obd_repl_cancel(struct llog_ctxt *ctxt, * 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); } @@ -673,12 +678,17 @@ int llog_obd_repl_cancel(struct llog_ctxt *ctxt, 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; @@ -694,6 +704,10 @@ int llog_obd_repl_sync(struct llog_ctxt *ctxt, struct obd_export *exp) */ 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 { /* @@ -703,7 +717,8 @@ int llog_obd_repl_sync(struct llog_ctxt *ctxt, struct obd_export *exp) */ 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(ctxt, NULL, 0, NULL, OBD_LLOG_FL_SENDNOW | + flags); } RETURN(rc); }