diff options
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/iscsi_if.h | 2 | ||||
-rw-r--r-- | include/scsi/libiscsi.h | 15 | ||||
-rw-r--r-- | include/scsi/scsi.h | 6 | ||||
-rw-r--r-- | include/scsi/scsi_cmnd.h | 3 | ||||
-rw-r--r-- | include/scsi/scsi_device.h | 31 | ||||
-rw-r--r-- | include/scsi/scsi_host.h | 9 | ||||
-rw-r--r-- | include/scsi/scsi_ioctl.h | 2 | ||||
-rw-r--r-- | include/scsi/scsi_netlink.h | 62 | ||||
-rw-r--r-- | include/scsi/scsi_transport.h | 3 | ||||
-rw-r--r-- | include/scsi/scsi_transport_fc.h | 31 | ||||
-rw-r--r-- | include/scsi/scsi_transport_iscsi.h | 5 |
11 files changed, 146 insertions, 23 deletions
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index 16be12f1cbe8..0c9514de5df7 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
@@ -213,6 +213,8 @@ enum iscsi_err { | |||
213 | ISCSI_ERR_DATA_DGST = ISCSI_ERR_BASE + 15, | 213 | ISCSI_ERR_DATA_DGST = ISCSI_ERR_BASE + 15, |
214 | ISCSI_ERR_PARAM_NOT_FOUND = ISCSI_ERR_BASE + 16, | 214 | ISCSI_ERR_PARAM_NOT_FOUND = ISCSI_ERR_BASE + 16, |
215 | ISCSI_ERR_NO_SCSI_CMD = ISCSI_ERR_BASE + 17, | 215 | ISCSI_ERR_NO_SCSI_CMD = ISCSI_ERR_BASE + 17, |
216 | ISCSI_ERR_INVALID_HOST = ISCSI_ERR_BASE + 18, | ||
217 | ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19, | ||
216 | }; | 218 | }; |
217 | 219 | ||
218 | /* | 220 | /* |
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index 5e75bb7f311c..61e53f14f7e1 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
@@ -287,6 +287,11 @@ struct iscsi_session { | |||
287 | struct iscsi_pool cmdpool; /* PDU's pool */ | 287 | struct iscsi_pool cmdpool; /* PDU's pool */ |
288 | }; | 288 | }; |
289 | 289 | ||
290 | enum { | ||
291 | ISCSI_HOST_SETUP, | ||
292 | ISCSI_HOST_REMOVED, | ||
293 | }; | ||
294 | |||
290 | struct iscsi_host { | 295 | struct iscsi_host { |
291 | char *initiatorname; | 296 | char *initiatorname; |
292 | /* hw address or netdev iscsi connection is bound to */ | 297 | /* hw address or netdev iscsi connection is bound to */ |
@@ -295,6 +300,12 @@ struct iscsi_host { | |||
295 | /* local address */ | 300 | /* local address */ |
296 | int local_port; | 301 | int local_port; |
297 | char local_address[ISCSI_ADDRESS_BUF_LEN]; | 302 | char local_address[ISCSI_ADDRESS_BUF_LEN]; |
303 | |||
304 | wait_queue_head_t session_removal_wq; | ||
305 | /* protects sessions and state */ | ||
306 | spinlock_t lock; | ||
307 | int num_sessions; | ||
308 | int state; | ||
298 | }; | 309 | }; |
299 | 310 | ||
300 | /* | 311 | /* |
@@ -302,7 +313,7 @@ struct iscsi_host { | |||
302 | */ | 313 | */ |
303 | extern int iscsi_change_queue_depth(struct scsi_device *sdev, int depth); | 314 | extern int iscsi_change_queue_depth(struct scsi_device *sdev, int depth); |
304 | extern int iscsi_eh_abort(struct scsi_cmnd *sc); | 315 | extern int iscsi_eh_abort(struct scsi_cmnd *sc); |
305 | extern int iscsi_eh_host_reset(struct scsi_cmnd *sc); | 316 | extern int iscsi_eh_target_reset(struct scsi_cmnd *sc); |
306 | extern int iscsi_eh_device_reset(struct scsi_cmnd *sc); | 317 | extern int iscsi_eh_device_reset(struct scsi_cmnd *sc); |
307 | extern int iscsi_queuecommand(struct scsi_cmnd *sc, | 318 | extern int iscsi_queuecommand(struct scsi_cmnd *sc, |
308 | void (*done)(struct scsi_cmnd *)); | 319 | void (*done)(struct scsi_cmnd *)); |
@@ -351,6 +362,8 @@ extern void iscsi_conn_stop(struct iscsi_cls_conn *, int); | |||
351 | extern int iscsi_conn_bind(struct iscsi_cls_session *, struct iscsi_cls_conn *, | 362 | extern int iscsi_conn_bind(struct iscsi_cls_session *, struct iscsi_cls_conn *, |
352 | int); | 363 | int); |
353 | extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err); | 364 | extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err); |
365 | extern void iscsi_session_failure(struct iscsi_cls_session *cls_session, | ||
366 | enum iscsi_err err); | ||
354 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, | 367 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, |
355 | enum iscsi_param param, char *buf); | 368 | enum iscsi_param param, char *buf); |
356 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); | 369 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 192f8716aa9e..a109165714d6 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -381,6 +381,11 @@ static inline int scsi_is_wlun(unsigned int lun) | |||
381 | #define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */ | 381 | #define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */ |
382 | #define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also | 382 | #define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also |
383 | * without decrementing the retry count */ | 383 | * without decrementing the retry count */ |
384 | #define DID_TRANSPORT_DISRUPTED 0x0e /* Transport error disrupted execution | ||
385 | * and the driver blocked the port to | ||
386 | * recover the link. Transport class will | ||
387 | * retry or fail IO */ | ||
388 | #define DID_TRANSPORT_FAILFAST 0x0f /* Transport class fastfailed the io */ | ||
384 | #define DRIVER_OK 0x00 /* Driver status */ | 389 | #define DRIVER_OK 0x00 /* Driver status */ |
385 | 390 | ||
386 | /* | 391 | /* |
@@ -426,6 +431,7 @@ static inline int scsi_is_wlun(unsigned int lun) | |||
426 | #define SCSI_MLQUEUE_HOST_BUSY 0x1055 | 431 | #define SCSI_MLQUEUE_HOST_BUSY 0x1055 |
427 | #define SCSI_MLQUEUE_DEVICE_BUSY 0x1056 | 432 | #define SCSI_MLQUEUE_DEVICE_BUSY 0x1056 |
428 | #define SCSI_MLQUEUE_EH_RETRY 0x1057 | 433 | #define SCSI_MLQUEUE_EH_RETRY 0x1057 |
434 | #define SCSI_MLQUEUE_TARGET_BUSY 0x1058 | ||
429 | 435 | ||
430 | /* | 436 | /* |
431 | * Use these to separate status msg and our bytes | 437 | * Use these to separate status msg and our bytes |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index f9f6e793575c..855bf95963e7 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -75,7 +75,6 @@ struct scsi_cmnd { | |||
75 | 75 | ||
76 | int retries; | 76 | int retries; |
77 | int allowed; | 77 | int allowed; |
78 | int timeout_per_command; | ||
79 | 78 | ||
80 | unsigned char prot_op; | 79 | unsigned char prot_op; |
81 | unsigned char prot_type; | 80 | unsigned char prot_type; |
@@ -86,7 +85,6 @@ struct scsi_cmnd { | |||
86 | /* These elements define the operation we are about to perform */ | 85 | /* These elements define the operation we are about to perform */ |
87 | unsigned char *cmnd; | 86 | unsigned char *cmnd; |
88 | 87 | ||
89 | struct timer_list eh_timeout; /* Used to time out the command. */ | ||
90 | 88 | ||
91 | /* These elements define the operation we ultimately want to perform */ | 89 | /* These elements define the operation we ultimately want to perform */ |
92 | struct scsi_data_buffer sdb; | 90 | struct scsi_data_buffer sdb; |
@@ -139,7 +137,6 @@ extern void scsi_put_command(struct scsi_cmnd *); | |||
139 | extern void __scsi_put_command(struct Scsi_Host *, struct scsi_cmnd *, | 137 | extern void __scsi_put_command(struct Scsi_Host *, struct scsi_cmnd *, |
140 | struct device *); | 138 | struct device *); |
141 | extern void scsi_finish_command(struct scsi_cmnd *cmd); | 139 | extern void scsi_finish_command(struct scsi_cmnd *cmd); |
142 | extern void scsi_req_abort_cmd(struct scsi_cmnd *cmd); | ||
143 | 140 | ||
144 | extern void *scsi_kmap_atomic_sg(struct scatterlist *sg, int sg_count, | 141 | extern void *scsi_kmap_atomic_sg(struct scatterlist *sg, int sg_count, |
145 | size_t *offset, size_t *len); | 142 | size_t *offset, size_t *len); |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 80b2e93c2936..a37a8148a310 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -42,9 +42,11 @@ enum scsi_device_state { | |||
42 | * originate in the mid-layer) */ | 42 | * originate in the mid-layer) */ |
43 | SDEV_OFFLINE, /* Device offlined (by error handling or | 43 | SDEV_OFFLINE, /* Device offlined (by error handling or |
44 | * user request */ | 44 | * user request */ |
45 | SDEV_BLOCK, /* Device blocked by scsi lld. No scsi | 45 | SDEV_BLOCK, /* Device blocked by scsi lld. No |
46 | * commands from user or midlayer should be issued | 46 | * scsi commands from user or midlayer |
47 | * to the scsi lld. */ | 47 | * should be issued to the scsi |
48 | * lld. */ | ||
49 | SDEV_CREATED_BLOCK, /* same as above but for created devices */ | ||
48 | }; | 50 | }; |
49 | 51 | ||
50 | enum scsi_device_event { | 52 | enum scsi_device_event { |
@@ -236,6 +238,16 @@ struct scsi_target { | |||
236 | * for the device at a time. */ | 238 | * for the device at a time. */ |
237 | unsigned int pdt_1f_for_no_lun; /* PDT = 0x1f */ | 239 | unsigned int pdt_1f_for_no_lun; /* PDT = 0x1f */ |
238 | /* means no lun present */ | 240 | /* means no lun present */ |
241 | /* commands actually active on LLD. protected by host lock. */ | ||
242 | unsigned int target_busy; | ||
243 | /* | ||
244 | * LLDs should set this in the slave_alloc host template callout. | ||
245 | * If set to zero then there is not limit. | ||
246 | */ | ||
247 | unsigned int can_queue; | ||
248 | unsigned int target_blocked; | ||
249 | unsigned int max_target_blocked; | ||
250 | #define SCSI_DEFAULT_TARGET_BLOCKED 3 | ||
239 | 251 | ||
240 | char scsi_level; | 252 | char scsi_level; |
241 | struct execute_work ew; | 253 | struct execute_work ew; |
@@ -384,10 +396,23 @@ static inline unsigned int sdev_id(struct scsi_device *sdev) | |||
384 | #define scmd_id(scmd) sdev_id((scmd)->device) | 396 | #define scmd_id(scmd) sdev_id((scmd)->device) |
385 | #define scmd_channel(scmd) sdev_channel((scmd)->device) | 397 | #define scmd_channel(scmd) sdev_channel((scmd)->device) |
386 | 398 | ||
399 | /* | ||
400 | * checks for positions of the SCSI state machine | ||
401 | */ | ||
387 | static inline int scsi_device_online(struct scsi_device *sdev) | 402 | static inline int scsi_device_online(struct scsi_device *sdev) |
388 | { | 403 | { |
389 | return sdev->sdev_state != SDEV_OFFLINE; | 404 | return sdev->sdev_state != SDEV_OFFLINE; |
390 | } | 405 | } |
406 | static inline int scsi_device_blocked(struct scsi_device *sdev) | ||
407 | { | ||
408 | return sdev->sdev_state == SDEV_BLOCK || | ||
409 | sdev->sdev_state == SDEV_CREATED_BLOCK; | ||
410 | } | ||
411 | static inline int scsi_device_created(struct scsi_device *sdev) | ||
412 | { | ||
413 | return sdev->sdev_state == SDEV_CREATED || | ||
414 | sdev->sdev_state == SDEV_CREATED_BLOCK; | ||
415 | } | ||
391 | 416 | ||
392 | /* accessor functions for the SCSI parameters */ | 417 | /* accessor functions for the SCSI parameters */ |
393 | static inline int scsi_device_sync(struct scsi_device *sdev) | 418 | static inline int scsi_device_sync(struct scsi_device *sdev) |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 44a55d1bf530..d123ca84e732 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
@@ -43,13 +43,6 @@ struct blk_queue_tags; | |||
43 | #define DISABLE_CLUSTERING 0 | 43 | #define DISABLE_CLUSTERING 0 |
44 | #define ENABLE_CLUSTERING 1 | 44 | #define ENABLE_CLUSTERING 1 |
45 | 45 | ||
46 | enum scsi_eh_timer_return { | ||
47 | EH_NOT_HANDLED, | ||
48 | EH_HANDLED, | ||
49 | EH_RESET_TIMER, | ||
50 | }; | ||
51 | |||
52 | |||
53 | struct scsi_host_template { | 46 | struct scsi_host_template { |
54 | struct module *module; | 47 | struct module *module; |
55 | const char *name; | 48 | const char *name; |
@@ -347,7 +340,7 @@ struct scsi_host_template { | |||
347 | * | 340 | * |
348 | * Status: OPTIONAL | 341 | * Status: OPTIONAL |
349 | */ | 342 | */ |
350 | enum scsi_eh_timer_return (* eh_timed_out)(struct scsi_cmnd *); | 343 | enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *); |
351 | 344 | ||
352 | /* | 345 | /* |
353 | * Name of proc directory | 346 | * Name of proc directory |
diff --git a/include/scsi/scsi_ioctl.h b/include/scsi/scsi_ioctl.h index edb9525386da..b9006848b813 100644 --- a/include/scsi/scsi_ioctl.h +++ b/include/scsi/scsi_ioctl.h | |||
@@ -42,7 +42,7 @@ typedef struct scsi_fctargaddress { | |||
42 | 42 | ||
43 | extern int scsi_ioctl(struct scsi_device *, int, void __user *); | 43 | extern int scsi_ioctl(struct scsi_device *, int, void __user *); |
44 | extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd, | 44 | extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd, |
45 | void __user *arg, struct file *filp); | 45 | void __user *arg, int ndelay); |
46 | 46 | ||
47 | #endif /* __KERNEL__ */ | 47 | #endif /* __KERNEL__ */ |
48 | #endif /* _SCSI_IOCTL_H */ | 48 | #endif /* _SCSI_IOCTL_H */ |
diff --git a/include/scsi/scsi_netlink.h b/include/scsi/scsi_netlink.h index 8c1470cc8209..536752c40d41 100644 --- a/include/scsi/scsi_netlink.h +++ b/include/scsi/scsi_netlink.h | |||
@@ -22,6 +22,9 @@ | |||
22 | #ifndef SCSI_NETLINK_H | 22 | #ifndef SCSI_NETLINK_H |
23 | #define SCSI_NETLINK_H | 23 | #define SCSI_NETLINK_H |
24 | 24 | ||
25 | #include <linux/netlink.h> | ||
26 | |||
27 | |||
25 | /* | 28 | /* |
26 | * This file intended to be included by both kernel and user space | 29 | * This file intended to be included by both kernel and user space |
27 | */ | 30 | */ |
@@ -55,7 +58,41 @@ struct scsi_nl_hdr { | |||
55 | #define SCSI_NL_TRANSPORT_FC 1 | 58 | #define SCSI_NL_TRANSPORT_FC 1 |
56 | #define SCSI_NL_MAX_TRANSPORTS 2 | 59 | #define SCSI_NL_MAX_TRANSPORTS 2 |
57 | 60 | ||
58 | /* scsi_nl_hdr->msgtype values are defined in each transport */ | 61 | /* Transport-based scsi_nl_hdr->msgtype values are defined in each transport */ |
62 | |||
63 | /* | ||
64 | * GENERIC SCSI scsi_nl_hdr->msgtype Values | ||
65 | */ | ||
66 | /* kernel -> user */ | ||
67 | #define SCSI_NL_SHOST_VENDOR 0x0001 | ||
68 | /* user -> kernel */ | ||
69 | /* SCSI_NL_SHOST_VENDOR msgtype is kernel->user and user->kernel */ | ||
70 | |||
71 | |||
72 | /* | ||
73 | * Message Structures : | ||
74 | */ | ||
75 | |||
76 | /* macro to round up message lengths to 8byte boundary */ | ||
77 | #define SCSI_NL_MSGALIGN(len) (((len) + 7) & ~7) | ||
78 | |||
79 | |||
80 | /* | ||
81 | * SCSI HOST Vendor Unique messages : | ||
82 | * SCSI_NL_SHOST_VENDOR | ||
83 | * | ||
84 | * Note: The Vendor Unique message payload will begin directly after | ||
85 | * this structure, with the length of the payload per vmsg_datalen. | ||
86 | * | ||
87 | * Note: When specifying vendor_id, be sure to read the Vendor Type and ID | ||
88 | * formatting requirements specified below | ||
89 | */ | ||
90 | struct scsi_nl_host_vendor_msg { | ||
91 | struct scsi_nl_hdr snlh; /* must be 1st element ! */ | ||
92 | uint64_t vendor_id; | ||
93 | uint16_t host_no; | ||
94 | uint16_t vmsg_datalen; | ||
95 | } __attribute__((aligned(sizeof(uint64_t)))); | ||
59 | 96 | ||
60 | 97 | ||
61 | /* | 98 | /* |
@@ -83,5 +120,28 @@ struct scsi_nl_hdr { | |||
83 | } | 120 | } |
84 | 121 | ||
85 | 122 | ||
123 | #ifdef __KERNEL__ | ||
124 | |||
125 | #include <scsi/scsi_host.h> | ||
126 | |||
127 | /* Exported Kernel Interfaces */ | ||
128 | int scsi_nl_add_transport(u8 tport, | ||
129 | int (*msg_handler)(struct sk_buff *), | ||
130 | void (*event_handler)(struct notifier_block *, unsigned long, void *)); | ||
131 | void scsi_nl_remove_transport(u8 tport); | ||
132 | |||
133 | int scsi_nl_add_driver(u64 vendor_id, struct scsi_host_template *hostt, | ||
134 | int (*nlmsg_handler)(struct Scsi_Host *shost, void *payload, | ||
135 | u32 len, u32 pid), | ||
136 | void (*nlevt_handler)(struct notifier_block *nb, | ||
137 | unsigned long event, void *notify_ptr)); | ||
138 | void scsi_nl_remove_driver(u64 vendor_id); | ||
139 | |||
140 | void scsi_nl_send_transport_msg(u32 pid, struct scsi_nl_hdr *hdr); | ||
141 | int scsi_nl_send_vendor_msg(u32 pid, unsigned short host_no, u64 vendor_id, | ||
142 | char *data_buf, u32 data_len); | ||
143 | |||
144 | #endif /* __KERNEL__ */ | ||
145 | |||
86 | #endif /* SCSI_NETLINK_H */ | 146 | #endif /* SCSI_NETLINK_H */ |
87 | 147 | ||
diff --git a/include/scsi/scsi_transport.h b/include/scsi/scsi_transport.h index 490bd13a634c..0de32cd4e8a7 100644 --- a/include/scsi/scsi_transport.h +++ b/include/scsi/scsi_transport.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define SCSI_TRANSPORT_H | 21 | #define SCSI_TRANSPORT_H |
22 | 22 | ||
23 | #include <linux/transport_class.h> | 23 | #include <linux/transport_class.h> |
24 | #include <linux/blkdev.h> | ||
24 | #include <scsi/scsi_host.h> | 25 | #include <scsi/scsi_host.h> |
25 | #include <scsi/scsi_device.h> | 26 | #include <scsi/scsi_device.h> |
26 | 27 | ||
@@ -64,7 +65,7 @@ struct scsi_transport_template { | |||
64 | * begin counting again | 65 | * begin counting again |
65 | * EH_NOT_HANDLED Begin normal error recovery | 66 | * EH_NOT_HANDLED Begin normal error recovery |
66 | */ | 67 | */ |
67 | enum scsi_eh_timer_return (* eh_timed_out)(struct scsi_cmnd *); | 68 | enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *); |
68 | 69 | ||
69 | /* | 70 | /* |
70 | * Used as callback for the completion of i_t_nexus request | 71 | * Used as callback for the completion of i_t_nexus request |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 878373c32ef7..49d8913c4f86 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
@@ -167,6 +167,26 @@ enum fc_tgtid_binding_type { | |||
167 | struct device_attribute dev_attr_vport_##_name = \ | 167 | struct device_attribute dev_attr_vport_##_name = \ |
168 | __ATTR(_name,_mode,_show,_store) | 168 | __ATTR(_name,_mode,_show,_store) |
169 | 169 | ||
170 | /* | ||
171 | * fc_vport_identifiers: This set of data contains all elements | ||
172 | * to uniquely identify and instantiate a FC virtual port. | ||
173 | * | ||
174 | * Notes: | ||
175 | * symbolic_name: The driver is to append the symbolic_name string data | ||
176 | * to the symbolic_node_name data that it generates by default. | ||
177 | * the resulting combination should then be registered with the switch. | ||
178 | * It is expected that things like Xen may stuff a VM title into | ||
179 | * this field. | ||
180 | */ | ||
181 | #define FC_VPORT_SYMBOLIC_NAMELEN 64 | ||
182 | struct fc_vport_identifiers { | ||
183 | u64 node_name; | ||
184 | u64 port_name; | ||
185 | u32 roles; | ||
186 | bool disable; | ||
187 | enum fc_port_type vport_type; /* only FC_PORTTYPE_NPIV allowed */ | ||
188 | char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN]; | ||
189 | }; | ||
170 | 190 | ||
171 | /* | 191 | /* |
172 | * FC Virtual Port Attributes | 192 | * FC Virtual Port Attributes |
@@ -197,7 +217,6 @@ struct device_attribute dev_attr_vport_##_name = \ | |||
197 | * managed by the transport w/o driver interaction. | 217 | * managed by the transport w/o driver interaction. |
198 | */ | 218 | */ |
199 | 219 | ||
200 | #define FC_VPORT_SYMBOLIC_NAMELEN 64 | ||
201 | struct fc_vport { | 220 | struct fc_vport { |
202 | /* Fixed Attributes */ | 221 | /* Fixed Attributes */ |
203 | 222 | ||
@@ -338,6 +357,7 @@ struct fc_rport { /* aka fc_starget_attrs */ | |||
338 | /* bit field values for struct fc_rport "flags" field: */ | 357 | /* bit field values for struct fc_rport "flags" field: */ |
339 | #define FC_RPORT_DEVLOSS_PENDING 0x01 | 358 | #define FC_RPORT_DEVLOSS_PENDING 0x01 |
340 | #define FC_RPORT_SCAN_PENDING 0x02 | 359 | #define FC_RPORT_SCAN_PENDING 0x02 |
360 | #define FC_RPORT_FAST_FAIL_TIMEDOUT 0x03 | ||
341 | 361 | ||
342 | #define dev_to_rport(d) \ | 362 | #define dev_to_rport(d) \ |
343 | container_of(d, struct fc_rport, dev) | 363 | container_of(d, struct fc_rport, dev) |
@@ -659,12 +679,15 @@ fc_remote_port_chkready(struct fc_rport *rport) | |||
659 | if (rport->roles & FC_PORT_ROLE_FCP_TARGET) | 679 | if (rport->roles & FC_PORT_ROLE_FCP_TARGET) |
660 | result = 0; | 680 | result = 0; |
661 | else if (rport->flags & FC_RPORT_DEVLOSS_PENDING) | 681 | else if (rport->flags & FC_RPORT_DEVLOSS_PENDING) |
662 | result = DID_IMM_RETRY << 16; | 682 | result = DID_TRANSPORT_DISRUPTED << 16; |
663 | else | 683 | else |
664 | result = DID_NO_CONNECT << 16; | 684 | result = DID_NO_CONNECT << 16; |
665 | break; | 685 | break; |
666 | case FC_PORTSTATE_BLOCKED: | 686 | case FC_PORTSTATE_BLOCKED: |
667 | result = DID_IMM_RETRY << 16; | 687 | if (rport->flags & FC_RPORT_FAST_FAIL_TIMEDOUT) |
688 | result = DID_TRANSPORT_FAILFAST << 16; | ||
689 | else | ||
690 | result = DID_TRANSPORT_DISRUPTED << 16; | ||
668 | break; | 691 | break; |
669 | default: | 692 | default: |
670 | result = DID_NO_CONNECT << 16; | 693 | result = DID_NO_CONNECT << 16; |
@@ -732,6 +755,8 @@ void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, | |||
732 | * be sure to read the Vendor Type and ID formatting requirements | 755 | * be sure to read the Vendor Type and ID formatting requirements |
733 | * specified in scsi_netlink.h | 756 | * specified in scsi_netlink.h |
734 | */ | 757 | */ |
758 | struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, | ||
759 | struct fc_vport_identifiers *); | ||
735 | int fc_vport_terminate(struct fc_vport *vport); | 760 | int fc_vport_terminate(struct fc_vport *vport); |
736 | 761 | ||
737 | #endif /* SCSI_TRANSPORT_FC_H */ | 762 | #endif /* SCSI_TRANSPORT_FC_H */ |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index 8b6c91df4c7a..c667cc396545 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
@@ -135,7 +135,8 @@ extern int iscsi_unregister_transport(struct iscsi_transport *tt); | |||
135 | /* | 135 | /* |
136 | * control plane upcalls | 136 | * control plane upcalls |
137 | */ | 137 | */ |
138 | extern void iscsi_conn_error(struct iscsi_cls_conn *conn, enum iscsi_err error); | 138 | extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn, |
139 | enum iscsi_err error); | ||
139 | extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, | 140 | extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, |
140 | char *data, uint32_t data_size); | 141 | char *data, uint32_t data_size); |
141 | 142 | ||
@@ -207,7 +208,7 @@ extern void iscsi_host_for_each_session(struct Scsi_Host *shost, | |||
207 | struct iscsi_endpoint { | 208 | struct iscsi_endpoint { |
208 | void *dd_data; /* LLD private data */ | 209 | void *dd_data; /* LLD private data */ |
209 | struct device dev; | 210 | struct device dev; |
210 | unsigned int id; | 211 | uint64_t id; |
211 | }; | 212 | }; |
212 | 213 | ||
213 | /* | 214 | /* |