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