Whamcloud - gitweb
f989e6db0d756feb368606f0a18f4318dca4e9f0
[fs/lustre-release.git] / lustre / include / linux / lustre_ha.h
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  */
4
5 #ifndef _LUSTRE_HA_H
6 #define _LUSTRE_HA_H
7
8 #define LUSTRE_HA_NAME "ptlrpc"
9
10 struct recovd_data;
11 struct recovd_obd;
12 struct obd_import;
13 struct ptlrpc_connection;
14
15 /* rd_phase/rd_next_phase values */
16 #define RD_IDLE              0
17 #define RD_TROUBLED          1
18 #define RD_PREPARING         2
19 #define RD_PREPARED          3
20 #define RD_RECOVERING        4
21 #define RD_RECOVERED         5
22 #define RD_FAILED            6
23
24 /* recovd_state values */
25 #define RECOVD_READY             1
26 #define RECOVD_STOPPING          2  /* how cleanup tells recovd to quit */
27 #define RECOVD_STOPPED           4  /* after recovd has stopped */
28
29 #define PTLRPC_RECOVD_PHASE_PREPARE  1
30 #define PTLRPC_RECOVD_PHASE_RECOVER  2
31 #define PTLRPC_RECOVD_PHASE_FAILURE  3
32
33 typedef int (*ptlrpc_recovery_cb_t)(struct recovd_data *, int);
34
35 struct recovd_data {
36         /* you must hold recovd->recovd_lock when touching rd_managed_chain */
37         struct list_head     rd_managed_chain;
38         ptlrpc_recovery_cb_t rd_recover;
39         struct recovd_obd   *rd_recovd;
40         __u32                rd_phase;
41         __u32                rd_next_phase;
42         __u32                rd_flags;
43 };
44
45 void recovd_conn_fail(struct ptlrpc_connection *conn);
46 void recovd_conn_manage(struct ptlrpc_connection *conn, struct recovd_obd *mgr,
47                         ptlrpc_recovery_cb_t recover);
48 void recovd_conn_unmanage(struct ptlrpc_connection *conn);
49 void recovd_conn_fixed(struct ptlrpc_connection *conn);
50 int recovd_setup(struct recovd_obd *mgr);
51 int recovd_cleanup(struct recovd_obd *mgr);
52
53 extern struct recovd_obd *ptlrpc_recovd;
54
55 int ptlrpc_run_recovery_upcall(struct ptlrpc_connection *conn);
56 int ptlrpc_reconnect_import(struct obd_import *imp, int rq_opc);
57 int ptlrpc_replay(struct ptlrpc_connection *conn);
58
59 #endif