- /* something bad happened to the processing of a local
- * llog file, probably I/O error or the log got corrupted..
- * to be able to finally release the log we discard any
- * remaining bits in the header */
- CERROR("Local llog found corrupted\n");
- while (index <= last_index) {
- if (ext2_test_bit(index, LLOG_HDR_BITMAP(llh)) != 0)
- llog_cancel_rec(lpi->lpi_env, loghandle, index);
- index++;
+ if (dt_object_remote(loghandle->lgh_obj)) {
+ /* If it is remote object, then -EIO might means
+ * disconnection or eviction, let's return -EAGAIN,
+ * so for update recovery log processing, it will
+ * retry until the umount or abort recovery, see
+ * lod_sub_recovery_thread() */
+ CERROR("%s retry remote llog process\n",
+ loghandle->lgh_ctxt->loc_obd->obd_name);
+ rc = -EAGAIN;
+ } else {
+ /* something bad happened to the processing of a local
+ * llog file, probably I/O error or the log got
+ * corrupted to be able to finally release the log we
+ * discard any remaining bits in the header */
+ CERROR("%s: Local llog found corrupted #"DOSTID":%x"
+ " %s index %d count %d\n",
+ loghandle->lgh_ctxt->loc_obd->obd_name,
+ POSTID(&loghandle->lgh_id.lgl_oi),
+ loghandle->lgh_id.lgl_ogen,
+ ((llh->llh_flags & LLOG_F_IS_CAT) ? "catalog" :
+ "plain"), index, llh->llh_count);
+
+ while (index <= last_index) {
+ if (ext2_test_bit(index,
+ LLOG_HDR_BITMAP(llh)) != 0)
+ llog_cancel_rec(lpi->lpi_env, loghandle,
+ index);
+ index++;
+ }
+ rc = 0;