Whamcloud - gitweb
LU-12635 build: Support for gcc -Wimplicit-fallthrough
[fs/lustre-release.git] / lustre / target / update_recovery.c
index 40db87c..b483a26 100644 (file)
@@ -20,7 +20,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2014, 2015, Intel Corporation.
+ * Copyright (c) 2015, 2017, Intel Corporation.
  */
 
 /*
 #define DEBUG_SUBSYSTEM S_CLASS
 
 #include <lu_target.h>
+#include <lustre_obdo.h>
 #include <lustre_update.h>
 #include <lustre_swab.h>
 #include <md_object.h>
 #include <obd.h>
 #include <obd_class.h>
+
 #include "tgt_internal.h"
 
 /**
@@ -379,14 +381,14 @@ insert_update_records_to_replay_list(struct target_distribute_txn_data *tdtd,
        int rc = 0;
        ENTRY;
 
-       CDEBUG(D_HA, "%s: insert record batchid = "LPU64" transno = "LPU64
+       CDEBUG(D_HA, "%s: insert record batchid = %llu transno = %llu"
               " mdt_index %u\n", tdtd->tdtd_lut->lut_obd->obd_name,
               record->ur_batchid, record->ur_master_transno, mdt_index);
 
        /* Update batchid if necessary */
        spin_lock(&tdtd->tdtd_batchid_lock);
        if (record->ur_batchid >= tdtd->tdtd_batchid) {
-               CDEBUG(D_HA, "%s update batchid from "LPU64 " to "LPU64"\n",
+               CDEBUG(D_HA, "%s update batchid from %llu" " to %llu\n",
                       tdtd->tdtd_lut->lut_obd->obd_name,
                       tdtd->tdtd_batchid, record->ur_batchid);
                tdtd->tdtd_batchid = record->ur_batchid + 1;
@@ -500,6 +502,8 @@ void dtrq_destroy(struct distribute_txn_replay_req *dtrq)
        struct distribute_txn_replay_req_sub    *tmp;
 
        LASSERT(list_empty(&dtrq->dtrq_list));
+       CDEBUG(D_HA, "destroy x%llu t%llu\n", dtrq->dtrq_xid,
+              dtrq->dtrq_master_transno);
        spin_lock(&dtrq->dtrq_sub_list_lock);
        list_for_each_entry_safe(dtrqs, tmp, &dtrq->dtrq_sub_list, dtrqs_list) {
                struct sub_thandle_cookie *stc;
@@ -597,7 +601,7 @@ __u64 distribute_txn_get_next_transno(struct target_distribute_txn_data *tdtd)
        }
        spin_unlock(&tdtd->tdtd_replay_list_lock);
 
-       CDEBUG(D_HA, "%s: Next update transno "LPU64"\n",
+       CDEBUG(D_HA, "%s: Next update transno %llu\n",
               tdtd->tdtd_lut->lut_obd->obd_name, transno);
        return transno;
 }
@@ -605,14 +609,14 @@ EXPORT_SYMBOL(distribute_txn_get_next_transno);
 
 struct distribute_txn_replay_req *
 distribute_txn_lookup_finish_list(struct target_distribute_txn_data *tdtd,
-                                 __u64 xid)
+                                 __u64 transno)
 {
        struct distribute_txn_replay_req *dtrq = NULL;
        struct distribute_txn_replay_req *iter;
 
        spin_lock(&tdtd->tdtd_replay_list_lock);
        list_for_each_entry(iter, &tdtd->tdtd_replay_finish_list, dtrq_list) {
-               if (iter->dtrq_xid == xid) {
+               if (iter->dtrq_master_transno == transno) {
                        dtrq = iter;
                        break;
                }
@@ -629,7 +633,8 @@ bool is_req_replayed_by_update(struct ptlrpc_request *req)
        if (tgt->lut_tdtd == NULL)
                return false;
 
-       dtrq = distribute_txn_lookup_finish_list(tgt->lut_tdtd, req->rq_xid);
+       dtrq = distribute_txn_lookup_finish_list(tgt->lut_tdtd,
+                                       lustre_msg_get_transno(req->rq_reqmsg));
        if (dtrq == NULL)
                return false;
 
@@ -1091,6 +1096,7 @@ static void update_recovery_update_ses(struct lu_env *env,
        lrd->lrd_result          = le32_to_cpu(lrd->lrd_result);
        lrd->lrd_client_gen      = le32_to_cpu(lrd->lrd_client_gen);
 
+       CDEBUG(D_HA, "xid=%llu transno=%llu\n", lrd->lrd_xid, lrd->lrd_transno);
        if (lrd->lrd_transno != tgt_th_info(env)->tti_transno)
                return;
 
@@ -1165,6 +1171,17 @@ static int update_recovery_exec(const struct lu_env *env,
                dt_obj = dt_locate(env, tdtd->tdtd_dt, fid);
                if (IS_ERR(dt_obj)) {
                        rc = PTR_ERR(dt_obj);
+                       if (rc == -EREMCHG)
+                               LCONSOLE_WARN("%.16s: hit invalid OI mapping "
+                                             "for "DFID" during recovering, "
+                                             "that may because auto scrub is "
+                                             "disabled on related MDT, and "
+                                             "will cause recovery failure. "
+                                             "Please enable auto scrub and "
+                                             "retry the recovery.\n",
+                                             tdtd->tdtd_lut->lut_obd->obd_name,
+                                             PFID(fid));
+
                        break;
                }
                sub_dt_obj = dt_object_child(dt_obj);
@@ -1252,7 +1269,7 @@ static int update_recovery_exec(const struct lu_env *env,
                        break;
                }
 next:
-               lu_object_put(env, &dt_obj->do_lu);
+               dt_object_put(env, dt_obj);
                if (rc < 0)
                        break;
        }
@@ -1414,7 +1431,7 @@ stop_trans:
        rc = top_trans_stop(env, tdtd->tdtd_dt, th);
        for (i = 0; i < ta->ta_argno; i++) {
                if (ta->ta_args[i]->object != NULL) {
-                       lu_object_put(env, &ta->ta_args[i]->object->do_lu);
+                       dt_object_put(env, ta->ta_args[i]->object);
                        ta->ta_args[i]->object = NULL;
                }
        }