xref: /OK3568_Linux_fs/kernel/drivers/block/drbd/drbd_state_change.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef DRBD_STATE_CHANGE_H
3*4882a593Smuzhiyun #define DRBD_STATE_CHANGE_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun struct drbd_resource_state_change {
6*4882a593Smuzhiyun 	struct drbd_resource *resource;
7*4882a593Smuzhiyun 	enum drbd_role role[2];
8*4882a593Smuzhiyun 	bool susp[2];
9*4882a593Smuzhiyun 	bool susp_nod[2];
10*4882a593Smuzhiyun 	bool susp_fen[2];
11*4882a593Smuzhiyun };
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun struct drbd_device_state_change {
14*4882a593Smuzhiyun 	struct drbd_device *device;
15*4882a593Smuzhiyun 	enum drbd_disk_state disk_state[2];
16*4882a593Smuzhiyun };
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun struct drbd_connection_state_change {
19*4882a593Smuzhiyun 	struct drbd_connection *connection;
20*4882a593Smuzhiyun 	enum drbd_conns cstate[2];  /* drbd9: enum drbd_conn_state */
21*4882a593Smuzhiyun 	enum drbd_role peer_role[2];
22*4882a593Smuzhiyun };
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun struct drbd_peer_device_state_change {
25*4882a593Smuzhiyun 	struct drbd_peer_device *peer_device;
26*4882a593Smuzhiyun 	enum drbd_disk_state disk_state[2];
27*4882a593Smuzhiyun 	enum drbd_conns repl_state[2];  /* drbd9: enum drbd_repl_state */
28*4882a593Smuzhiyun 	bool resync_susp_user[2];
29*4882a593Smuzhiyun 	bool resync_susp_peer[2];
30*4882a593Smuzhiyun 	bool resync_susp_dependency[2];
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun struct drbd_state_change {
34*4882a593Smuzhiyun 	struct list_head list;
35*4882a593Smuzhiyun 	unsigned int n_devices;
36*4882a593Smuzhiyun 	unsigned int n_connections;
37*4882a593Smuzhiyun 	struct drbd_resource_state_change resource[1];
38*4882a593Smuzhiyun 	struct drbd_device_state_change *devices;
39*4882a593Smuzhiyun 	struct drbd_connection_state_change *connections;
40*4882a593Smuzhiyun 	struct drbd_peer_device_state_change *peer_devices;
41*4882a593Smuzhiyun };
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun extern struct drbd_state_change *remember_old_state(struct drbd_resource *, gfp_t);
44*4882a593Smuzhiyun extern void copy_old_to_new_state_change(struct drbd_state_change *);
45*4882a593Smuzhiyun extern void forget_state_change(struct drbd_state_change *);
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun extern int notify_resource_state_change(struct sk_buff *,
48*4882a593Smuzhiyun 					 unsigned int,
49*4882a593Smuzhiyun 					 struct drbd_resource_state_change *,
50*4882a593Smuzhiyun 					 enum drbd_notification_type type);
51*4882a593Smuzhiyun extern int notify_connection_state_change(struct sk_buff *,
52*4882a593Smuzhiyun 					   unsigned int,
53*4882a593Smuzhiyun 					   struct drbd_connection_state_change *,
54*4882a593Smuzhiyun 					   enum drbd_notification_type type);
55*4882a593Smuzhiyun extern int notify_device_state_change(struct sk_buff *,
56*4882a593Smuzhiyun 				       unsigned int,
57*4882a593Smuzhiyun 				       struct drbd_device_state_change *,
58*4882a593Smuzhiyun 				       enum drbd_notification_type type);
59*4882a593Smuzhiyun extern int notify_peer_device_state_change(struct sk_buff *,
60*4882a593Smuzhiyun 					    unsigned int,
61*4882a593Smuzhiyun 					    struct drbd_peer_device_state_change *,
62*4882a593Smuzhiyun 					    enum drbd_notification_type type);
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #endif  /* DRBD_STATE_CHANGE_H */
65