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