}
if (imp->imp_conn_current &&
- !(imp->imp_conn_current->oic_item.next == &imp->imp_conn_list)) {
+ imp->imp_conn_current->oic_item.next != &imp->imp_conn_list) {
imp_conn = list_entry(imp->imp_conn_current->oic_item.next,
- struct obd_import_conn, oic_item);
+ struct obd_import_conn, oic_item);
} else {
imp_conn = list_entry(imp->imp_conn_list.next,
struct obd_import_conn, oic_item);
RETURN(0);
}
} else {
- list_del(&imp->imp_conn_current->oic_item);
- list_add(&imp->imp_conn_current->oic_item,
- &imp->imp_conn_list);
- imp->imp_conn_current = NULL;
+ spin_lock_irqsave(&imp->imp_lock, flags);
+ if (imp->imp_conn_current != NULL) {
+ list_del(&imp->imp_conn_current->oic_item);
+ list_add(&imp->imp_conn_current->oic_item,
+ &imp->imp_conn_list);
+ imp->imp_conn_current = NULL;
+ spin_unlock_irqrestore(&imp->imp_lock, flags);
+ } else {
+ static int bug7269_dump = 0;
+ spin_unlock_irqrestore(&imp->imp_lock, flags);
+ CERROR("this is bug 7269 - please attach log there\n");
+ if (bug7269_dump == 0)
+ portals_debug_dumplog();
+ bug7269_dump = 1;
+ }
}
out:
}
ptlrpc_maybe_ping_import_soon(imp);
-
+
CDEBUG(D_HA, "recovery of %s on %s failed (%d)\n",
imp->imp_target_uuid.uuid,
(char *)imp->imp_connection->c_remote_uuid.uuid, rc);