Blame view
include/scsi/scsi_transport_srp.h
4.77 KB
b24413180 License cleanup: ... |
1 |
/* SPDX-License-Identifier: GPL-2.0 */ |
09345f650 [SCSI] add srp tr... |
2 3 4 5 6 7 |
#ifndef SCSI_TRANSPORT_SRP_H #define SCSI_TRANSPORT_SRP_H #include <linux/transport_class.h> #include <linux/types.h> #include <linux/mutex.h> |
aebd5e476 [SCSI] transport_... |
8 9 |
#define SRP_RPORT_ROLE_INITIATOR 0 #define SRP_RPORT_ROLE_TARGET 1 |
09345f650 [SCSI] add srp tr... |
10 11 |
struct srp_rport_identifiers { u8 port_id[16]; |
aebd5e476 [SCSI] transport_... |
12 |
u8 roles; |
09345f650 [SCSI] add srp tr... |
13 |
}; |
29c173248 scsi_transport_sr... |
14 15 16 17 18 19 |
/** * enum srp_rport_state - SRP transport layer state * @SRP_RPORT_RUNNING: Transport layer operational. * @SRP_RPORT_BLOCKED: Transport layer not operational; fast I/O fail timer * is running and I/O has been blocked. * @SRP_RPORT_FAIL_FAST: Fast I/O fail timer has expired; fail I/O fast. |
93079162b scsi_transport_sr... |
20 |
* @SRP_RPORT_LOST: Port is being removed. |
29c173248 scsi_transport_sr... |
21 22 23 24 25 26 27 28 29 |
*/ enum srp_rport_state { SRP_RPORT_RUNNING, SRP_RPORT_BLOCKED, SRP_RPORT_FAIL_FAST, SRP_RPORT_LOST, }; /** |
0c7f82189 scsi_transport_sr... |
30 31 32 33 34 35 36 37 38 39 40 41 |
* struct srp_rport - SRP initiator or target port * * Fields that are relevant for SRP initiator and SRP target drivers: * @dev: Device associated with this rport. * @port_id: 16-byte port identifier. * @roles: Role of this port - initiator or target. * * Fields that are only relevant for SRP initiator drivers: * @lld_data: LLD private data. * @mutex: Protects against concurrent rport reconnect / * fast_io_fail / dev_loss_tmo activity. * @state: rport state. |
0c7f82189 scsi_transport_sr... |
42 43 44 45 46 47 48 |
* @reconnect_delay: Reconnect delay in seconds. * @failed_reconnects: Number of failed reconnect attempts. * @reconnect_work: Work structure used for scheduling reconnect attempts. * @fast_io_fail_tmo: Fast I/O fail timeout in seconds. * @dev_loss_tmo: Device loss timeout in seconds. * @fast_io_fail_work: Work structure used for scheduling fast I/O fail work. * @dev_loss_work: Work structure used for scheduling device loss work. |
29c173248 scsi_transport_sr... |
49 |
*/ |
09345f650 [SCSI] add srp tr... |
50 |
struct srp_rport { |
dc1bdbd9b IB/srp: Allow SRP... |
51 |
/* for initiator and target drivers */ |
09345f650 [SCSI] add srp tr... |
52 53 54 |
struct device dev; u8 port_id[16]; |
aebd5e476 [SCSI] transport_... |
55 |
u8 roles; |
dc1bdbd9b IB/srp: Allow SRP... |
56 57 |
/* for initiator drivers */ |
29c173248 scsi_transport_sr... |
58 59 60 61 |
void *lld_data; struct mutex mutex; enum srp_rport_state state; |
8c64e4531 scsi_transport_sr... |
62 63 64 |
int reconnect_delay; int failed_reconnects; struct delayed_work reconnect_work; |
29c173248 scsi_transport_sr... |
65 66 67 68 |
int fast_io_fail_tmo; int dev_loss_tmo; struct delayed_work fast_io_fail_work; struct delayed_work dev_loss_work; |
09345f650 [SCSI] add srp tr... |
69 |
}; |
29c173248 scsi_transport_sr... |
70 71 |
/** * struct srp_function_template |
0c7f82189 scsi_transport_sr... |
72 73 |
* * Fields that are only relevant for SRP initiator drivers: |
29c173248 scsi_transport_sr... |
74 75 76 77 |
* @has_rport_state: Whether or not to create the state, fast_io_fail_tmo and * dev_loss_tmo sysfs attribute for an rport. * @reset_timer_if_blocked: Whether or srp_timed_out() should reset the command * timer if the device on which it has been queued is blocked. |
8c64e4531 scsi_transport_sr... |
78 |
* @reconnect_delay: If not NULL, points to the default reconnect_delay value. |
29c173248 scsi_transport_sr... |
79 80 81 82 83 84 |
* @fast_io_fail_tmo: If not NULL, points to the default fast_io_fail_tmo value. * @dev_loss_tmo: If not NULL, points to the default dev_loss_tmo value. * @reconnect: Callback function for reconnecting to the target. See also * srp_reconnect_rport(). * @terminate_rport_io: Callback function for terminating all outstanding I/O * requests for an rport. |
0c7f82189 scsi_transport_sr... |
85 |
* @rport_delete: Callback function that deletes an rport. |
29c173248 scsi_transport_sr... |
86 |
*/ |
09345f650 [SCSI] add srp tr... |
87 |
struct srp_function_template { |
dc1bdbd9b IB/srp: Allow SRP... |
88 |
/* for initiator drivers */ |
29c173248 scsi_transport_sr... |
89 90 |
bool has_rport_state; bool reset_timer_if_blocked; |
8c64e4531 scsi_transport_sr... |
91 |
int *reconnect_delay; |
29c173248 scsi_transport_sr... |
92 93 94 95 |
int *fast_io_fail_tmo; int *dev_loss_tmo; int (*reconnect)(struct srp_rport *rport); void (*terminate_rport_io)(struct srp_rport *rport); |
dc1bdbd9b IB/srp: Allow SRP... |
96 |
void (*rport_delete)(struct srp_rport *rport); |
09345f650 [SCSI] add srp tr... |
97 98 99 100 101 |
}; extern struct scsi_transport_template * srp_attach_transport(struct srp_function_template *); extern void srp_release_transport(struct scsi_transport_template *); |
9dd69a600 IB/srp: Keep rpor... |
102 103 |
extern void srp_rport_get(struct srp_rport *rport); extern void srp_rport_put(struct srp_rport *rport); |
09345f650 [SCSI] add srp tr... |
104 105 106 |
extern struct srp_rport *srp_rport_add(struct Scsi_Host *, struct srp_rport_identifiers *); extern void srp_rport_del(struct srp_rport *); |
8c64e4531 scsi_transport_sr... |
107 |
extern int srp_tmo_valid(int reconnect_delay, int fast_io_fail_tmo, |
85aa93be7 scsi: scsi_transp... |
108 |
long dev_loss_tmo); |
3fdf70ace IB/srp: Avoid usi... |
109 |
int srp_parse_tmo(int *tmo, const char *buf); |
29c173248 scsi_transport_sr... |
110 111 |
extern int srp_reconnect_rport(struct srp_rport *rport); extern void srp_start_tl_fail_timers(struct srp_rport *rport); |
09345f650 [SCSI] add srp tr... |
112 |
extern void srp_remove_host(struct Scsi_Host *); |
93079162b scsi_transport_sr... |
113 |
extern void srp_stop_rport_timers(struct srp_rport *rport); |
b6a05c823 scsi: remove eh_t... |
114 |
enum blk_eh_timer_return srp_timed_out(struct scsi_cmnd *scmd); |
09345f650 [SCSI] add srp tr... |
115 |
|
29c173248 scsi_transport_sr... |
116 117 |
/** * srp_chkready() - evaluate the transport layer state before I/O |
0c7f82189 scsi_transport_sr... |
118 |
* @rport: SRP target port pointer. |
29c173248 scsi_transport_sr... |
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
* * Returns a SCSI result code that can be returned by the LLD queuecommand() * implementation. The role of this function is similar to that of * fc_remote_port_chkready(). */ static inline int srp_chkready(struct srp_rport *rport) { switch (rport->state) { case SRP_RPORT_RUNNING: case SRP_RPORT_BLOCKED: default: return 0; case SRP_RPORT_FAIL_FAST: return DID_TRANSPORT_FAILFAST << 16; case SRP_RPORT_LOST: return DID_NO_CONNECT << 16; } } |
09345f650 [SCSI] add srp tr... |
137 |
#endif |