Blame view

include/scsi/scsi_transport_iscsi.h 11.1 KB
39e84790d   Alex Aizman   [SCSI] open-iscsi...
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
   * iSCSI transport class definitions
   *
   * Copyright (C) IBM Corporation, 2004
7996a778f   Mike Christie   [SCSI] iscsi: add...
5
   * Copyright (C) Mike Christie, 2004 - 2006
39e84790d   Alex Aizman   [SCSI] open-iscsi...
6
7
   * Copyright (C) Dmitry Yusupov, 2004 - 2005
   * Copyright (C) Alex Aizman, 2004 - 2005
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   */
  #ifndef SCSI_TRANSPORT_ISCSI_H
  #define SCSI_TRANSPORT_ISCSI_H
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
25
  #include <linux/device.h>
d773c082d   Michael S. Tsirkin   [SCSI] scsi_trans...
26
27
  #include <linux/list.h>
  #include <linux/mutex.h>
39e84790d   Alex Aizman   [SCSI] open-iscsi...
28
  #include <scsi/iscsi_if.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29

7b8631b53   Mike Christie   [SCSI] iscsi: sep...
30
  struct scsi_transport_template;
7996a778f   Mike Christie   [SCSI] iscsi: add...
31
  struct iscsi_transport;
d82ff9be7   Mike Christie   [SCSI] iscsi clas...
32
  struct iscsi_endpoint;
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
33
  struct Scsi_Host;
c01be6dcb   Mike Christie   [SCSI] iscsi_tran...
34
  struct scsi_cmnd;
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
35
  struct iscsi_cls_conn;
7996a778f   Mike Christie   [SCSI] iscsi: add...
36
  struct iscsi_conn;
9c19a7d03   Mike Christie   [SCSI] libiscsi: ...
37
  struct iscsi_task;
a54a52caa   Mike Christie   [SCSI] iscsi: fix...
38
  struct sockaddr;
8d07913db   Mike Christie   [SCSI] iscsi clas...
39
  struct iscsi_iface;
90eeb01a0   Mike Christie   [SCSI] iscsi clas...
40
  struct bsg_job;
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
41

39e84790d   Alex Aizman   [SCSI] open-iscsi...
42
43
44
45
46
47
48
49
50
51
52
  /**
   * struct iscsi_transport - iSCSI Transport template
   *
   * @name:		transport name
   * @caps:		iSCSI Data-Path capabilities
   * @create_session:	create new iSCSI session object
   * @destroy_session:	destroy existing iSCSI session object
   * @create_conn:	create new iSCSI connection
   * @bind_conn:		associate this connection with existing iSCSI session
   *			and specified transport descriptor
   * @destroy_conn:	destroy inactive iSCSI connection
a54a52caa   Mike Christie   [SCSI] iscsi: fix...
53
54
55
56
57
58
   * @set_param:		set iSCSI parameter. Return 0 on success, -ENODATA
   *			when param is not supported, and a -Exx value on other
   *			error.
   * @get_param		get iSCSI parameter. Must return number of bytes
   *			copied to buffer on success, -ENODATA when param
   *			is not supported, and a -Exx value on other error
39e84790d   Alex Aizman   [SCSI] open-iscsi...
59
60
61
   * @start_conn:		set connection to be operational
   * @stop_conn:		suspend/recover/terminate connection
   * @send_pdu:		send iSCSI PDU, Login, Logout, NOP-Out, Reject, Text.
7996a778f   Mike Christie   [SCSI] iscsi: add...
62
   * @session_recovery_timedout: notify LLD a block during recovery timed out
3e5c28ad0   Mike Christie   [SCSI] libiscsi: ...
63
64
65
66
67
68
69
   * @init_task:		Initialize a iscsi_task and any internal structs.
   *			When offloading the data path, this is called from
   *			queuecommand with the session lock, or from the
   *			iscsi_conn_send_pdu context with the session lock.
   *			When not offloading the data path, this is called
   *			from the scsi work queue without the session lock.
   * @xmit_task		Requests LLD to transfer cmd task. Returns 0 or the
3219e5294   Mike Christie   [SCSI] iscsi: fix...
70
   *			the number of bytes transferred on success, and -Exyz
3e5c28ad0   Mike Christie   [SCSI] libiscsi: ...
71
72
73
74
75
76
77
78
   *			value on error. When offloading the data path, this
   *			is called from queuecommand with the session lock, or
   *			from the iscsi_conn_send_pdu context with the session
   *			lock. When not offloading the data path, this is called
   *			from the scsi work queue without the session lock.
   * @cleanup_task:	requests LLD to fail task. Called with session lock
   *			and after the connection has been suspended and
   *			terminated during recovery. If called
7996a778f   Mike Christie   [SCSI] iscsi: add...
79
80
   *			from abort task then connection is not suspended
   *			or terminated but sk_callback_lock is held
39e84790d   Alex Aizman   [SCSI] open-iscsi...
81
82
83
84
85
86
87
   *
   * Template API provided by iSCSI Transport
   */
  struct iscsi_transport {
  	struct module *owner;
  	char *name;
  	unsigned int caps;
8d07913db   Mike Christie   [SCSI] iscsi clas...
88

d82ff9be7   Mike Christie   [SCSI] iscsi clas...
89
  	struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep,
756135215   Mike Christie   [SCSI] iscsi: rem...
90
  					uint16_t cmds_max, uint16_t qdepth,
5e7facb77   Mike Christie   [SCSI] iscsi clas...
91
  					uint32_t sn);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
92
93
  	void (*destroy_session) (struct iscsi_cls_session *session);
  	struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess,
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
94
  				uint32_t cid);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
95
96
  	int (*bind_conn) (struct iscsi_cls_session *session,
  			  struct iscsi_cls_conn *cls_conn,
264faaaa1   Or Gerlitz   [SCSI] iscsi: add...
97
  			  uint64_t transport_eph, int is_leading);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
98
99
  	int (*start_conn) (struct iscsi_cls_conn *conn);
  	void (*stop_conn) (struct iscsi_cls_conn *conn, int flag);
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
100
  	void (*destroy_conn) (struct iscsi_cls_conn *conn);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
101
  	int (*set_param) (struct iscsi_cls_conn *conn, enum iscsi_param param,
a54a52caa   Mike Christie   [SCSI] iscsi: fix...
102
  			  char *buf, int buflen);
289324b0c   Mike Christie   [SCSI] iscsi clas...
103
104
  	int (*get_ep_param) (struct iscsi_endpoint *ep, enum iscsi_param param,
  			     char *buf);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
105
  	int (*get_conn_param) (struct iscsi_cls_conn *conn,
a54a52caa   Mike Christie   [SCSI] iscsi: fix...
106
  			       enum iscsi_param param, char *buf);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
107
  	int (*get_session_param) (struct iscsi_cls_session *session,
a54a52caa   Mike Christie   [SCSI] iscsi: fix...
108
  				  enum iscsi_param param, char *buf);
1819dc814   Mike Christie   [SCSI] iscsi_tran...
109
110
  	int (*get_host_param) (struct Scsi_Host *shost,
  				enum iscsi_host_param param, char *buf);
1d9bf13a9   Mike Christie   [SCSI] iscsi clas...
111
112
113
  	int (*set_host_param) (struct Scsi_Host *shost,
  			       enum iscsi_host_param param, char *buf,
  			       int buflen);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
114
  	int (*send_pdu) (struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
39e84790d   Alex Aizman   [SCSI] open-iscsi...
115
  			 char *data, uint32_t data_size);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
116
117
  	void (*get_stats) (struct iscsi_cls_conn *conn,
  			   struct iscsi_stats *stats);
577577da6   Mike Christie   [SCSI] libiscsi: ...
118

9c19a7d03   Mike Christie   [SCSI] libiscsi: ...
119
120
  	int (*init_task) (struct iscsi_task *task);
  	int (*xmit_task) (struct iscsi_task *task);
577577da6   Mike Christie   [SCSI] libiscsi: ...
121
  	void (*cleanup_task) (struct iscsi_task *task);
2ff79d52d   Mike Christie   [SCSI] libiscsi: ...
122
  	int (*alloc_pdu) (struct iscsi_task *task, uint8_t opcode);
577577da6   Mike Christie   [SCSI] libiscsi: ...
123
124
125
  	int (*xmit_pdu) (struct iscsi_task *task);
  	int (*init_pdu) (struct iscsi_task *task, unsigned int offset,
  			 unsigned int count);
262ef6362   Mike Christie   [SCSI] libiscsi: ...
126
127
  	void (*parse_pdu_itt) (struct iscsi_conn *conn, itt_t itt,
  			       int *index, int *age);
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
128
  	void (*session_recovery_timedout) (struct iscsi_cls_session *session);
10eb0f013   Mike Christie   [SCSI] iscsi: pas...
129
130
  	struct iscsi_endpoint *(*ep_connect) (struct Scsi_Host *shost,
  					      struct sockaddr *dst_addr,
d82ff9be7   Mike Christie   [SCSI] iscsi clas...
131
132
133
  					      int non_blocking);
  	int (*ep_poll) (struct iscsi_endpoint *ep, int timeout_ms);
  	void (*ep_disconnect) (struct iscsi_endpoint *ep);
2174a04ee   Mike Christie   [SCSI] iscsi_tran...
134
  	int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type,
01cb225da   Mike Christie   [SCSI] iscsi: add...
135
  			  uint32_t enable, struct sockaddr *dst_addr);
43514774f   Michael Chan   [SCSI] iscsi clas...
136
  	int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params);
00c31889f   Mike Christie   [SCSI] qla4xxx: f...
137
138
  	int (*set_iface_param) (struct Scsi_Host *shost, void *data,
  				uint32_t len);
8d07913db   Mike Christie   [SCSI] iscsi clas...
139
140
141
  	int (*get_iface_param) (struct iscsi_iface *iface,
  				enum iscsi_param_type param_type,
  				int param, char *buf);
587a1f165   Al Viro   switch ->is_visib...
142
  	umode_t (*attr_is_visible)(int param_type, int param);
90eeb01a0   Mike Christie   [SCSI] iscsi clas...
143
  	int (*bsg_request)(struct bsg_job *job);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
145
146
  };
  
  /*
39e84790d   Alex Aizman   [SCSI] open-iscsi...
147
   * transport registration upcalls
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
   */
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
149
  extern struct scsi_transport_template *iscsi_register_transport(struct iscsi_transport *tt);
39e84790d   Alex Aizman   [SCSI] open-iscsi...
150
  extern int iscsi_unregister_transport(struct iscsi_transport *tt);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
151
152
  
  /*
39e84790d   Alex Aizman   [SCSI] open-iscsi...
153
   * control plane upcalls
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154
   */
e5bd7b54e   Mike Christie   [SCSI] libiscsi: ...
155
156
  extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn,
  				   enum iscsi_err error);
17fa575ee   Manish Rangankar   [SCSI] scsi_trans...
157
158
  extern void iscsi_conn_login_event(struct iscsi_cls_conn *conn,
  				   enum iscsi_conn_state state);
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
159
  extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
39e84790d   Alex Aizman   [SCSI] open-iscsi...
160
  			  char *data, uint32_t data_size);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
161

43514774f   Michael Chan   [SCSI] iscsi clas...
162
163
164
  extern int iscsi_offload_mesg(struct Scsi_Host *shost,
  			      struct iscsi_transport *transport, uint32_t type,
  			      char *data, uint16_t data_size);
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
165
166
167
168
  struct iscsi_cls_conn {
  	struct list_head conn_list;	/* item in connlist */
  	void *dd_data;			/* LLD private data */
  	struct iscsi_transport *transport;
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
169
  	uint32_t cid;			/* connection id */
22a39fbbf   Mike Christie   [SCSI] iscsi: fix...
170
171
  	struct mutex ep_mutex;
  	struct iscsi_endpoint *ep;
fd7255f51   Mike Christie   [SCSI] iscsi: add...
172

7b8631b53   Mike Christie   [SCSI] iscsi: sep...
173
  	struct device dev;		/* sysfs transport/container device */
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
174
175
176
177
  };
  
  #define iscsi_dev_to_conn(_dev) \
  	container_of(_dev, struct iscsi_cls_conn, dev)
3128c6c73   Mike Christie   [SCSI] iscsi cls:...
178
179
  #define transport_class_to_conn(_cdev) \
  	iscsi_dev_to_conn(_cdev->parent)
6eabafbe6   Mike Christie   [SCSI] iscsi clas...
180
181
182
183
184
185
186
187
188
  #define iscsi_conn_to_session(_conn) \
  	iscsi_dev_to_session(_conn->dev.parent)
  
  /* iscsi class session state */
  enum {
  	ISCSI_SESSION_LOGGED_IN,
  	ISCSI_SESSION_FAILED,
  	ISCSI_SESSION_FREE,
  };
7996a778f   Mike Christie   [SCSI] iscsi: add...
189

7970634b8   Mike Christie   [SCSI] iscsi clas...
190
  #define ISCSI_MAX_TARGET -1
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
191
  struct iscsi_cls_session {
7b7232f3f   Mike Christie   [SCSI] iscsi upda...
192
  	struct list_head sess_list;		/* item in session_list */
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
193
  	struct iscsi_transport *transport;
6eabafbe6   Mike Christie   [SCSI] iscsi clas...
194
  	spinlock_t lock;
45ab33b6c   Mike Christie   [SCSI] iscsi clas...
195
196
  	struct work_struct block_work;
  	struct work_struct unblock_work;
bd976f62c   Mike Christie   [SCSI] iscsi clas...
197
198
  	struct work_struct scan_work;
  	struct work_struct unbind_work;
fd7255f51   Mike Christie   [SCSI] iscsi: add...
199

30a6c6523   Mike Christie   [SCSI] iscsi: fix...
200
201
  	/* recovery fields */
  	int recovery_tmo;
c4028958b   David Howells   WorkStruct: make ...
202
  	struct delayed_work recovery_work;
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
203

7970634b8   Mike Christie   [SCSI] iscsi clas...
204
  	unsigned int target_id;
8d4a690cd   Mike Christie   [SCSI] iscsi clas...
205
  	bool ida_used;
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
206

0c70d84b7   Mike Christie   [SCSI] iscsi clas...
207
208
209
210
211
  	/*
  	 * pid of userspace process that created session or -1 if
  	 * created by the kernel.
  	 */
  	pid_t creator;
6eabafbe6   Mike Christie   [SCSI] iscsi clas...
212
  	int state;
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
213
214
  	int sid;				/* session id */
  	void *dd_data;				/* LLD private data */
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
215
216
217
218
219
  	struct device dev;	/* sysfs transport/container device */
  };
  
  #define iscsi_dev_to_session(_dev) \
  	container_of(_dev, struct iscsi_cls_session, dev)
1d063c172   Mike Christie   [SCSI] iscsi clas...
220
221
  #define transport_class_to_session(_cdev) \
  	iscsi_dev_to_session(_cdev->parent)
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
222
223
  #define iscsi_session_to_shost(_session) \
  	dev_to_shost(_session->dev.parent)
8434aa8b6   Mike Christie   [SCSI] iscsi: bre...
224
225
  #define starget_to_session(_stgt) \
  	iscsi_dev_to_session(_stgt->dev.parent)
32c6e1b9a   Mike Christie   [SCSI] iscsi clas...
226
  struct iscsi_cls_host {
8aae18adb   Mike Christie   [SCSI] iscsi clas...
227
  	atomic_t nr_scans;
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
228
  	struct mutex mutex;
90eeb01a0   Mike Christie   [SCSI] iscsi clas...
229
  	struct request_queue *bsg_q;
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
230
  };
90eeb01a0   Mike Christie   [SCSI] iscsi clas...
231
232
  #define iscsi_job_to_shost(_job) \
          dev_to_shost(_job->dev)
a4804cd6e   Mike Christie   [SCSI] iscsi: add...
233
234
  extern void iscsi_host_for_each_session(struct Scsi_Host *shost,
  				void (*fn)(struct iscsi_cls_session *));
d82ff9be7   Mike Christie   [SCSI] iscsi clas...
235
236
237
  struct iscsi_endpoint {
  	void *dd_data;			/* LLD private data */
  	struct device dev;
21536062d   Mike Christie   [SCSI] iscsi clas...
238
  	uint64_t id;
22a39fbbf   Mike Christie   [SCSI] iscsi: fix...
239
  	struct iscsi_cls_conn *conn;
d82ff9be7   Mike Christie   [SCSI] iscsi clas...
240
  };
a4804cd6e   Mike Christie   [SCSI] iscsi: add...
241

8d07913db   Mike Christie   [SCSI] iscsi clas...
242
243
244
245
246
247
248
249
250
251
252
253
254
  struct iscsi_iface {
  	struct device dev;
  	struct iscsi_transport *transport;
  	uint32_t iface_type;	/* IPv4 or IPv6 */
  	uint32_t iface_num;	/* iface number, 0 - n */
  	void *dd_data;		/* LLD private data */
  };
  
  #define iscsi_dev_to_iface(_dev) \
  	container_of(_dev, struct iscsi_iface, dev)
  
  #define iscsi_iface_to_shost(_iface) \
  	dev_to_shost(_iface->dev.parent)
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
255
256
257
  /*
   * session and connection functions that can be used by HW iSCSI LLDs
   */
322d739da   Mike Christie   [SCSI] iscsi: fix...
258
259
260
261
262
  #define iscsi_cls_session_printk(prefix, _cls_session, fmt, a...) \
  	dev_printk(prefix, &(_cls_session)->dev, fmt, ##a)
  
  #define iscsi_cls_conn_printk(prefix, _cls_conn, fmt, a...) \
  	dev_printk(prefix, &(_cls_conn)->dev, fmt, ##a)
6eabafbe6   Mike Christie   [SCSI] iscsi clas...
263
  extern int iscsi_session_chkready(struct iscsi_cls_session *session);
17fa575ee   Manish Rangankar   [SCSI] scsi_trans...
264
  extern int iscsi_is_session_online(struct iscsi_cls_session *session);
8434aa8b6   Mike Christie   [SCSI] iscsi: bre...
265
  extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost,
5d91e209f   Mike Christie   [SCSI] iscsi: rem...
266
  				struct iscsi_transport *transport, int dd_size);
6a8a0d362   Mike Christie   [SCSI] iscsi: pas...
267
268
  extern int iscsi_add_session(struct iscsi_cls_session *session,
  			     unsigned int target_id);
269747890   Mike Christie   [SCSI] libiscsi: ...
269
270
  extern int iscsi_session_event(struct iscsi_cls_session *session,
  			       enum iscsi_uevent_e event);
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
271
  extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost,
6a8a0d362   Mike Christie   [SCSI] iscsi: pas...
272
  						struct iscsi_transport *t,
5d91e209f   Mike Christie   [SCSI] iscsi: rem...
273
  						int dd_size,
6a8a0d362   Mike Christie   [SCSI] iscsi: pas...
274
  						unsigned int target_id);
8434aa8b6   Mike Christie   [SCSI] iscsi: bre...
275
276
  extern void iscsi_remove_session(struct iscsi_cls_session *session);
  extern void iscsi_free_session(struct iscsi_cls_session *session);
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
277
278
  extern int iscsi_destroy_session(struct iscsi_cls_session *session);
  extern struct iscsi_cls_conn *iscsi_create_conn(struct iscsi_cls_session *sess,
5d91e209f   Mike Christie   [SCSI] iscsi: rem...
279
  						int dd_size, uint32_t cid);
7b8631b53   Mike Christie   [SCSI] iscsi: sep...
280
  extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn);
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
281
282
  extern void iscsi_unblock_session(struct iscsi_cls_session *session);
  extern void iscsi_block_session(struct iscsi_cls_session *session);
8aae18adb   Mike Christie   [SCSI] iscsi clas...
283
  extern int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time);
d82ff9be7   Mike Christie   [SCSI] iscsi clas...
284
285
286
  extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size);
  extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep);
  extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle);
c01be6dcb   Mike Christie   [SCSI] iscsi_tran...
287
  extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd);
8d07913db   Mike Christie   [SCSI] iscsi clas...
288
289
290
291
292
293
  extern struct iscsi_iface *iscsi_create_iface(struct Scsi_Host *shost,
  					      struct iscsi_transport *t,
  					      uint32_t iface_type,
  					      uint32_t iface_num, int dd_size);
  extern void iscsi_destroy_iface(struct iscsi_iface *iface);
  extern struct iscsi_iface *iscsi_lookup_iface(int handle);
53cb8a1f4   Mike Christie   [SCSI] iscsi: add...
294

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
295
  #endif