aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc/fc_rport.c
diff options
context:
space:
mode:
authorJoe Eykholt <jeykholt@cisco.com>2009-08-25 17:00:50 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-09-10 13:07:41 -0400
commit9fb9d32831fd687e427ec5b147bb690f468b99a0 (patch)
treec3b6c29cb94040718ea2fe00daac05abf10db714 /drivers/scsi/libfc/fc_rport.c
parent922aa210bcad4b34a7bb98ec9d318b7e59e7a5ca (diff)
[SCSI] libfc: make fc_rport_priv the primary rport interface.
The rport and discovery modules deal with remote ports before fc_remote_port_add() can be done, because the full set of rport identifiers is not known at early stages. In preparation for splitting the fc_rport/fc_rport_priv allocation, make fc_rport_priv the primary interface for the remote port and discovery engines. The FCP / SCSI layers still deal with fc_rport and fc_rport_libfc_priv, however. Signed-off-by: Joe Eykholt <jeykholt@cisco.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/libfc/fc_rport.c')
-rw-r--r--drivers/scsi/libfc/fc_rport.c364
1 files changed, 176 insertions, 188 deletions
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 2fbc94aaf343..13d3d758fb0e 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -57,23 +57,23 @@
57 57
58struct workqueue_struct *rport_event_queue; 58struct workqueue_struct *rport_event_queue;
59 59
60static void fc_rport_enter_plogi(struct fc_rport *); 60static void fc_rport_enter_plogi(struct fc_rport_priv *);
61static void fc_rport_enter_prli(struct fc_rport *); 61static void fc_rport_enter_prli(struct fc_rport_priv *);
62static void fc_rport_enter_rtv(struct fc_rport *); 62static void fc_rport_enter_rtv(struct fc_rport_priv *);
63static void fc_rport_enter_ready(struct fc_rport *); 63static void fc_rport_enter_ready(struct fc_rport_priv *);
64static void fc_rport_enter_logo(struct fc_rport *); 64static void fc_rport_enter_logo(struct fc_rport_priv *);
65 65
66static void fc_rport_recv_plogi_req(struct fc_rport *, 66static void fc_rport_recv_plogi_req(struct fc_rport_priv *,
67 struct fc_seq *, struct fc_frame *); 67 struct fc_seq *, struct fc_frame *);
68static void fc_rport_recv_prli_req(struct fc_rport *, 68static void fc_rport_recv_prli_req(struct fc_rport_priv *,
69 struct fc_seq *, struct fc_frame *); 69 struct fc_seq *, struct fc_frame *);
70static void fc_rport_recv_prlo_req(struct fc_rport *, 70static void fc_rport_recv_prlo_req(struct fc_rport_priv *,
71 struct fc_seq *, struct fc_frame *); 71 struct fc_seq *, struct fc_frame *);
72static void fc_rport_recv_logo_req(struct fc_rport *, 72static void fc_rport_recv_logo_req(struct fc_rport_priv *,
73 struct fc_seq *, struct fc_frame *); 73 struct fc_seq *, struct fc_frame *);
74static void fc_rport_timeout(struct work_struct *); 74static void fc_rport_timeout(struct work_struct *);
75static void fc_rport_error(struct fc_rport *, struct fc_frame *); 75static void fc_rport_error(struct fc_rport_priv *, struct fc_frame *);
76static void fc_rport_error_retry(struct fc_rport *, struct fc_frame *); 76static void fc_rport_error_retry(struct fc_rport_priv *, struct fc_frame *);
77static void fc_rport_work(struct work_struct *); 77static void fc_rport_work(struct work_struct *);
78 78
79static const char *fc_rport_state_names[] = { 79static const char *fc_rport_state_names[] = {
@@ -89,12 +89,14 @@ static const char *fc_rport_state_names[] = {
89static void fc_rport_rogue_destroy(struct device *dev) 89static void fc_rport_rogue_destroy(struct device *dev)
90{ 90{
91 struct fc_rport *rport = dev_to_rport(dev); 91 struct fc_rport *rport = dev_to_rport(dev);
92 FC_RPORT_DBG(rport, "Destroying rogue rport\n"); 92 struct fc_rport_priv *rdata = RPORT_TO_PRIV(rport);
93
94 FC_RPORT_DBG(rdata, "Destroying rogue rport\n");
93 kfree(rport); 95 kfree(rport);
94} 96}
95 97
96struct fc_rport *fc_rport_rogue_create(struct fc_lport *lport, 98struct fc_rport_priv *fc_rport_rogue_create(struct fc_lport *lport,
97 struct fc_rport_identifiers *ids) 99 struct fc_rport_identifiers *ids)
98{ 100{
99 struct fc_rport *rport; 101 struct fc_rport *rport;
100 struct fc_rport_priv *rdata; 102 struct fc_rport_priv *rdata;
@@ -135,17 +137,16 @@ struct fc_rport *fc_rport_rogue_create(struct fc_lport *lport,
135 */ 137 */
136 INIT_LIST_HEAD(&rdata->peers); 138 INIT_LIST_HEAD(&rdata->peers);
137 139
138 return rport; 140 return rdata;
139} 141}
140 142
141/** 143/**
142 * fc_rport_state() - return a string for the state the rport is in 144 * fc_rport_state() - return a string for the state the rport is in
143 * @rport: The rport whose state we want to get a string for 145 * @rdata: remote port private data
144 */ 146 */
145static const char *fc_rport_state(struct fc_rport *rport) 147static const char *fc_rport_state(struct fc_rport_priv *rdata)
146{ 148{
147 const char *cp; 149 const char *cp;
148 struct fc_rport_priv *rdata = rport->dd_data;
149 150
150 cp = fc_rport_state_names[rdata->rp_state]; 151 cp = fc_rport_state_names[rdata->rp_state];
151 if (!cp) 152 if (!cp)
@@ -192,15 +193,14 @@ static unsigned int fc_plogi_get_maxframe(struct fc_els_flogi *flp,
192 193
193/** 194/**
194 * fc_rport_state_enter() - Change the rport's state 195 * fc_rport_state_enter() - Change the rport's state
195 * @rport: The rport whose state should change 196 * @rdata: The rport whose state should change
196 * @new: The new state of the rport 197 * @new: The new state of the rport
197 * 198 *
198 * Locking Note: Called with the rport lock held 199 * Locking Note: Called with the rport lock held
199 */ 200 */
200static void fc_rport_state_enter(struct fc_rport *rport, 201static void fc_rport_state_enter(struct fc_rport_priv *rdata,
201 enum fc_rport_state new) 202 enum fc_rport_state new)
202{ 203{
203 struct fc_rport_priv *rdata = rport->dd_data;
204 if (rdata->rp_state != new) 204 if (rdata->rp_state != new)
205 rdata->retries = 0; 205 rdata->retries = 0;
206 rdata->rp_state = new; 206 rdata->rp_state = new;
@@ -255,7 +255,7 @@ static void fc_rport_work(struct work_struct *work)
255 INIT_LIST_HEAD(&new_rdata->peers); 255 INIT_LIST_HEAD(&new_rdata->peers);
256 INIT_WORK(&new_rdata->event_work, fc_rport_work); 256 INIT_WORK(&new_rdata->event_work, fc_rport_work);
257 257
258 fc_rport_state_enter(new_rport, RPORT_ST_READY); 258 fc_rport_state_enter(new_rdata, RPORT_ST_READY);
259 } else { 259 } else {
260 printk(KERN_WARNING "libfc: Failed to allocate " 260 printk(KERN_WARNING "libfc: Failed to allocate "
261 " memory for rport (%6x)\n", ids.port_id); 261 " memory for rport (%6x)\n", ids.port_id);
@@ -263,20 +263,20 @@ static void fc_rport_work(struct work_struct *work)
263 } 263 }
264 if (rport->port_id != FC_FID_DIR_SERV) 264 if (rport->port_id != FC_FID_DIR_SERV)
265 if (rport_ops->event_callback) 265 if (rport_ops->event_callback)
266 rport_ops->event_callback(lport, rport, 266 rport_ops->event_callback(lport, rdata,
267 RPORT_EV_FAILED); 267 RPORT_EV_FAILED);
268 put_device(&rport->dev); 268 put_device(&rport->dev);
269 rport = new_rport; 269 rport = new_rport;
270 rdata = new_rport->dd_data; 270 rdata = new_rport->dd_data;
271 if (rport_ops->event_callback) 271 if (rport_ops->event_callback)
272 rport_ops->event_callback(lport, rport, event); 272 rport_ops->event_callback(lport, rdata, event);
273 } else if ((event == RPORT_EV_FAILED) || 273 } else if ((event == RPORT_EV_FAILED) ||
274 (event == RPORT_EV_LOGO) || 274 (event == RPORT_EV_LOGO) ||
275 (event == RPORT_EV_STOP)) { 275 (event == RPORT_EV_STOP)) {
276 trans_state = rdata->trans_state; 276 trans_state = rdata->trans_state;
277 mutex_unlock(&rdata->rp_mutex); 277 mutex_unlock(&rdata->rp_mutex);
278 if (rport_ops->event_callback) 278 if (rport_ops->event_callback)
279 rport_ops->event_callback(lport, rport, event); 279 rport_ops->event_callback(lport, rdata, event);
280 cancel_delayed_work_sync(&rdata->retry_work); 280 cancel_delayed_work_sync(&rdata->retry_work);
281 if (trans_state == FC_PORTSTATE_ROGUE) 281 if (trans_state == FC_PORTSTATE_ROGUE)
282 put_device(&rport->dev); 282 put_device(&rport->dev);
@@ -292,21 +292,19 @@ static void fc_rport_work(struct work_struct *work)
292 292
293/** 293/**
294 * fc_rport_login() - Start the remote port login state machine 294 * fc_rport_login() - Start the remote port login state machine
295 * @rport: Fibre Channel remote port 295 * @rdata: private remote port
296 * 296 *
297 * Locking Note: Called without the rport lock held. This 297 * Locking Note: Called without the rport lock held. This
298 * function will hold the rport lock, call an _enter_* 298 * function will hold the rport lock, call an _enter_*
299 * function and then unlock the rport. 299 * function and then unlock the rport.
300 */ 300 */
301int fc_rport_login(struct fc_rport *rport) 301int fc_rport_login(struct fc_rport_priv *rdata)
302{ 302{
303 struct fc_rport_priv *rdata = rport->dd_data;
304
305 mutex_lock(&rdata->rp_mutex); 303 mutex_lock(&rdata->rp_mutex);
306 304
307 FC_RPORT_DBG(rport, "Login to port\n"); 305 FC_RPORT_DBG(rdata, "Login to port\n");
308 306
309 fc_rport_enter_plogi(rport); 307 fc_rport_enter_plogi(rdata);
310 308
311 mutex_unlock(&rdata->rp_mutex); 309 mutex_unlock(&rdata->rp_mutex);
312 310
@@ -315,7 +313,7 @@ int fc_rport_login(struct fc_rport *rport)
315 313
316/** 314/**
317 * fc_rport_enter_delete() - schedule a remote port to be deleted. 315 * fc_rport_enter_delete() - schedule a remote port to be deleted.
318 * @rport: Fibre Channel remote port 316 * @rdata: private remote port
319 * @event: event to report as the reason for deletion 317 * @event: event to report as the reason for deletion
320 * 318 *
321 * Locking Note: Called with the rport lock held. 319 * Locking Note: Called with the rport lock held.
@@ -327,17 +325,15 @@ int fc_rport_login(struct fc_rport *rport)
327 * Since we have the mutex, even if fc_rport_work() is already started, 325 * Since we have the mutex, even if fc_rport_work() is already started,
328 * it'll see the new event. 326 * it'll see the new event.
329 */ 327 */
330static void fc_rport_enter_delete(struct fc_rport *rport, 328static void fc_rport_enter_delete(struct fc_rport_priv *rdata,
331 enum fc_rport_event event) 329 enum fc_rport_event event)
332{ 330{
333 struct fc_rport_priv *rdata = rport->dd_data;
334
335 if (rdata->rp_state == RPORT_ST_DELETE) 331 if (rdata->rp_state == RPORT_ST_DELETE)
336 return; 332 return;
337 333
338 FC_RPORT_DBG(rport, "Delete port\n"); 334 FC_RPORT_DBG(rdata, "Delete port\n");
339 335
340 fc_rport_state_enter(rport, RPORT_ST_DELETE); 336 fc_rport_state_enter(rdata, RPORT_ST_DELETE);
341 337
342 if (rdata->event == RPORT_EV_NONE) 338 if (rdata->event == RPORT_EV_NONE)
343 queue_work(rport_event_queue, &rdata->event_work); 339 queue_work(rport_event_queue, &rdata->event_work);
@@ -346,33 +342,31 @@ static void fc_rport_enter_delete(struct fc_rport *rport,
346 342
347/** 343/**
348 * fc_rport_logoff() - Logoff and remove an rport 344 * fc_rport_logoff() - Logoff and remove an rport
349 * @rport: Fibre Channel remote port to be removed 345 * @rdata: private remote port
350 * 346 *
351 * Locking Note: Called without the rport lock held. This 347 * Locking Note: Called without the rport lock held. This
352 * function will hold the rport lock, call an _enter_* 348 * function will hold the rport lock, call an _enter_*
353 * function and then unlock the rport. 349 * function and then unlock the rport.
354 */ 350 */
355int fc_rport_logoff(struct fc_rport *rport) 351int fc_rport_logoff(struct fc_rport_priv *rdata)
356{ 352{
357 struct fc_rport_priv *rdata = rport->dd_data;
358
359 mutex_lock(&rdata->rp_mutex); 353 mutex_lock(&rdata->rp_mutex);
360 354
361 FC_RPORT_DBG(rport, "Remove port\n"); 355 FC_RPORT_DBG(rdata, "Remove port\n");
362 356
363 if (rdata->rp_state == RPORT_ST_DELETE) { 357 if (rdata->rp_state == RPORT_ST_DELETE) {
364 FC_RPORT_DBG(rport, "Port in Delete state, not removing\n"); 358 FC_RPORT_DBG(rdata, "Port in Delete state, not removing\n");
365 mutex_unlock(&rdata->rp_mutex); 359 mutex_unlock(&rdata->rp_mutex);
366 goto out; 360 goto out;
367 } 361 }
368 362
369 fc_rport_enter_logo(rport); 363 fc_rport_enter_logo(rdata);
370 364
371 /* 365 /*
372 * Change the state to Delete so that we discard 366 * Change the state to Delete so that we discard
373 * the response. 367 * the response.
374 */ 368 */
375 fc_rport_enter_delete(rport, RPORT_EV_STOP); 369 fc_rport_enter_delete(rdata, RPORT_EV_STOP);
376 mutex_unlock(&rdata->rp_mutex); 370 mutex_unlock(&rdata->rp_mutex);
377 371
378out: 372out:
@@ -381,18 +375,16 @@ out:
381 375
382/** 376/**
383 * fc_rport_enter_ready() - The rport is ready 377 * fc_rport_enter_ready() - The rport is ready
384 * @rport: Fibre Channel remote port that is ready 378 * @rdata: private remote port
385 * 379 *
386 * Locking Note: The rport lock is expected to be held before calling 380 * Locking Note: The rport lock is expected to be held before calling
387 * this routine. 381 * this routine.
388 */ 382 */
389static void fc_rport_enter_ready(struct fc_rport *rport) 383static void fc_rport_enter_ready(struct fc_rport_priv *rdata)
390{ 384{
391 struct fc_rport_priv *rdata = rport->dd_data; 385 fc_rport_state_enter(rdata, RPORT_ST_READY);
392
393 fc_rport_state_enter(rport, RPORT_ST_READY);
394 386
395 FC_RPORT_DBG(rport, "Port is Ready\n"); 387 FC_RPORT_DBG(rdata, "Port is Ready\n");
396 388
397 if (rdata->event == RPORT_EV_NONE) 389 if (rdata->event == RPORT_EV_NONE)
398 queue_work(rport_event_queue, &rdata->event_work); 390 queue_work(rport_event_queue, &rdata->event_work);
@@ -411,22 +403,21 @@ static void fc_rport_timeout(struct work_struct *work)
411{ 403{
412 struct fc_rport_priv *rdata = 404 struct fc_rport_priv *rdata =
413 container_of(work, struct fc_rport_priv, retry_work.work); 405 container_of(work, struct fc_rport_priv, retry_work.work);
414 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
415 406
416 mutex_lock(&rdata->rp_mutex); 407 mutex_lock(&rdata->rp_mutex);
417 408
418 switch (rdata->rp_state) { 409 switch (rdata->rp_state) {
419 case RPORT_ST_PLOGI: 410 case RPORT_ST_PLOGI:
420 fc_rport_enter_plogi(rport); 411 fc_rport_enter_plogi(rdata);
421 break; 412 break;
422 case RPORT_ST_PRLI: 413 case RPORT_ST_PRLI:
423 fc_rport_enter_prli(rport); 414 fc_rport_enter_prli(rdata);
424 break; 415 break;
425 case RPORT_ST_RTV: 416 case RPORT_ST_RTV:
426 fc_rport_enter_rtv(rport); 417 fc_rport_enter_rtv(rdata);
427 break; 418 break;
428 case RPORT_ST_LOGO: 419 case RPORT_ST_LOGO:
429 fc_rport_enter_logo(rport); 420 fc_rport_enter_logo(rdata);
430 break; 421 break;
431 case RPORT_ST_READY: 422 case RPORT_ST_READY:
432 case RPORT_ST_INIT: 423 case RPORT_ST_INIT:
@@ -439,27 +430,25 @@ static void fc_rport_timeout(struct work_struct *work)
439 430
440/** 431/**
441 * fc_rport_error() - Error handler, called once retries have been exhausted 432 * fc_rport_error() - Error handler, called once retries have been exhausted
442 * @rport: The fc_rport object 433 * @rdata: private remote port
443 * @fp: The frame pointer 434 * @fp: The frame pointer
444 * 435 *
445 * Locking Note: The rport lock is expected to be held before 436 * Locking Note: The rport lock is expected to be held before
446 * calling this routine 437 * calling this routine
447 */ 438 */
448static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp) 439static void fc_rport_error(struct fc_rport_priv *rdata, struct fc_frame *fp)
449{ 440{
450 struct fc_rport_priv *rdata = rport->dd_data; 441 FC_RPORT_DBG(rdata, "Error %ld in state %s, retries %d\n",
451 442 PTR_ERR(fp), fc_rport_state(rdata), rdata->retries);
452 FC_RPORT_DBG(rport, "Error %ld in state %s, retries %d\n",
453 PTR_ERR(fp), fc_rport_state(rport), rdata->retries);
454 443
455 switch (rdata->rp_state) { 444 switch (rdata->rp_state) {
456 case RPORT_ST_PLOGI: 445 case RPORT_ST_PLOGI:
457 case RPORT_ST_PRLI: 446 case RPORT_ST_PRLI:
458 case RPORT_ST_LOGO: 447 case RPORT_ST_LOGO:
459 fc_rport_enter_delete(rport, RPORT_EV_FAILED); 448 fc_rport_enter_delete(rdata, RPORT_EV_FAILED);
460 break; 449 break;
461 case RPORT_ST_RTV: 450 case RPORT_ST_RTV:
462 fc_rport_enter_ready(rport); 451 fc_rport_enter_ready(rdata);
463 break; 452 break;
464 case RPORT_ST_DELETE: 453 case RPORT_ST_DELETE:
465 case RPORT_ST_READY: 454 case RPORT_ST_READY:
@@ -470,7 +459,7 @@ static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
470 459
471/** 460/**
472 * fc_rport_error_retry() - Error handler when retries are desired 461 * fc_rport_error_retry() - Error handler when retries are desired
473 * @rport: The fc_rport object 462 * @rdata: private remote port data
474 * @fp: The frame pointer 463 * @fp: The frame pointer
475 * 464 *
476 * If the error was an exchange timeout retry immediately, 465 * If the error was an exchange timeout retry immediately,
@@ -479,18 +468,18 @@ static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
479 * Locking Note: The rport lock is expected to be held before 468 * Locking Note: The rport lock is expected to be held before
480 * calling this routine 469 * calling this routine
481 */ 470 */
482static void fc_rport_error_retry(struct fc_rport *rport, struct fc_frame *fp) 471static void fc_rport_error_retry(struct fc_rport_priv *rdata,
472 struct fc_frame *fp)
483{ 473{
484 struct fc_rport_priv *rdata = rport->dd_data;
485 unsigned long delay = FC_DEF_E_D_TOV; 474 unsigned long delay = FC_DEF_E_D_TOV;
486 475
487 /* make sure this isn't an FC_EX_CLOSED error, never retry those */ 476 /* make sure this isn't an FC_EX_CLOSED error, never retry those */
488 if (PTR_ERR(fp) == -FC_EX_CLOSED) 477 if (PTR_ERR(fp) == -FC_EX_CLOSED)
489 return fc_rport_error(rport, fp); 478 return fc_rport_error(rdata, fp);
490 479
491 if (rdata->retries < rdata->local_port->max_rport_retry_count) { 480 if (rdata->retries < rdata->local_port->max_rport_retry_count) {
492 FC_RPORT_DBG(rport, "Error %ld in state %s, retrying\n", 481 FC_RPORT_DBG(rdata, "Error %ld in state %s, retrying\n",
493 PTR_ERR(fp), fc_rport_state(rport)); 482 PTR_ERR(fp), fc_rport_state(rdata));
494 rdata->retries++; 483 rdata->retries++;
495 /* no additional delay on exchange timeouts */ 484 /* no additional delay on exchange timeouts */
496 if (PTR_ERR(fp) == -FC_EX_TIMEOUT) 485 if (PTR_ERR(fp) == -FC_EX_TIMEOUT)
@@ -499,24 +488,24 @@ static void fc_rport_error_retry(struct fc_rport *rport, struct fc_frame *fp)
499 return; 488 return;
500 } 489 }
501 490
502 return fc_rport_error(rport, fp); 491 return fc_rport_error(rdata, fp);
503} 492}
504 493
505/** 494/**
506 * fc_rport_plogi_recv_resp() - Handle incoming ELS PLOGI response 495 * fc_rport_plogi_recv_resp() - Handle incoming ELS PLOGI response
507 * @sp: current sequence in the PLOGI exchange 496 * @sp: current sequence in the PLOGI exchange
508 * @fp: response frame 497 * @fp: response frame
509 * @rp_arg: Fibre Channel remote port 498 * @rdata_arg: private remote port data
510 * 499 *
511 * Locking Note: This function will be called without the rport lock 500 * Locking Note: This function will be called without the rport lock
512 * held, but it will lock, call an _enter_* function or fc_rport_error 501 * held, but it will lock, call an _enter_* function or fc_rport_error
513 * and then unlock the rport. 502 * and then unlock the rport.
514 */ 503 */
515static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp, 504static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
516 void *rp_arg) 505 void *rdata_arg)
517{ 506{
518 struct fc_rport *rport = rp_arg; 507 struct fc_rport_priv *rdata = rdata_arg;
519 struct fc_rport_priv *rdata = rport->dd_data; 508 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
520 struct fc_lport *lport = rdata->local_port; 509 struct fc_lport *lport = rdata->local_port;
521 struct fc_els_flogi *plp = NULL; 510 struct fc_els_flogi *plp = NULL;
522 unsigned int tov; 511 unsigned int tov;
@@ -526,18 +515,18 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
526 515
527 mutex_lock(&rdata->rp_mutex); 516 mutex_lock(&rdata->rp_mutex);
528 517
529 FC_RPORT_DBG(rport, "Received a PLOGI response\n"); 518 FC_RPORT_DBG(rdata, "Received a PLOGI response\n");
530 519
531 if (rdata->rp_state != RPORT_ST_PLOGI) { 520 if (rdata->rp_state != RPORT_ST_PLOGI) {
532 FC_RPORT_DBG(rport, "Received a PLOGI response, but in state " 521 FC_RPORT_DBG(rdata, "Received a PLOGI response, but in state "
533 "%s\n", fc_rport_state(rport)); 522 "%s\n", fc_rport_state(rdata));
534 if (IS_ERR(fp)) 523 if (IS_ERR(fp))
535 goto err; 524 goto err;
536 goto out; 525 goto out;
537 } 526 }
538 527
539 if (IS_ERR(fp)) { 528 if (IS_ERR(fp)) {
540 fc_rport_error_retry(rport, fp); 529 fc_rport_error_retry(rdata, fp);
541 goto err; 530 goto err;
542 } 531 }
543 532
@@ -565,11 +554,11 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
565 * we skip PRLI and RTV and go straight to READY. 554 * we skip PRLI and RTV and go straight to READY.
566 */ 555 */
567 if (rport->port_id >= FC_FID_DOM_MGR) 556 if (rport->port_id >= FC_FID_DOM_MGR)
568 fc_rport_enter_ready(rport); 557 fc_rport_enter_ready(rdata);
569 else 558 else
570 fc_rport_enter_prli(rport); 559 fc_rport_enter_prli(rdata);
571 } else 560 } else
572 fc_rport_error_retry(rport, fp); 561 fc_rport_error_retry(rdata, fp);
573 562
574out: 563out:
575 fc_frame_free(fp); 564 fc_frame_free(fp);
@@ -580,33 +569,33 @@ err:
580 569
581/** 570/**
582 * fc_rport_enter_plogi() - Send Port Login (PLOGI) request to peer 571 * fc_rport_enter_plogi() - Send Port Login (PLOGI) request to peer
583 * @rport: Fibre Channel remote port to send PLOGI to 572 * @rdata: private remote port data
584 * 573 *
585 * Locking Note: The rport lock is expected to be held before calling 574 * Locking Note: The rport lock is expected to be held before calling
586 * this routine. 575 * this routine.
587 */ 576 */
588static void fc_rport_enter_plogi(struct fc_rport *rport) 577static void fc_rport_enter_plogi(struct fc_rport_priv *rdata)
589{ 578{
590 struct fc_rport_priv *rdata = rport->dd_data;
591 struct fc_lport *lport = rdata->local_port; 579 struct fc_lport *lport = rdata->local_port;
580 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
592 struct fc_frame *fp; 581 struct fc_frame *fp;
593 582
594 FC_RPORT_DBG(rport, "Port entered PLOGI state from %s state\n", 583 FC_RPORT_DBG(rdata, "Port entered PLOGI state from %s state\n",
595 fc_rport_state(rport)); 584 fc_rport_state(rdata));
596 585
597 fc_rport_state_enter(rport, RPORT_ST_PLOGI); 586 fc_rport_state_enter(rdata, RPORT_ST_PLOGI);
598 587
599 rport->maxframe_size = FC_MIN_MAX_PAYLOAD; 588 rport->maxframe_size = FC_MIN_MAX_PAYLOAD;
600 fp = fc_frame_alloc(lport, sizeof(struct fc_els_flogi)); 589 fp = fc_frame_alloc(lport, sizeof(struct fc_els_flogi));
601 if (!fp) { 590 if (!fp) {
602 fc_rport_error_retry(rport, fp); 591 fc_rport_error_retry(rdata, fp);
603 return; 592 return;
604 } 593 }
605 rdata->e_d_tov = lport->e_d_tov; 594 rdata->e_d_tov = lport->e_d_tov;
606 595
607 if (!lport->tt.elsct_send(lport, rport, fp, ELS_PLOGI, 596 if (!lport->tt.elsct_send(lport, rdata, fp, ELS_PLOGI,
608 fc_rport_plogi_resp, rport, lport->e_d_tov)) 597 fc_rport_plogi_resp, rdata, lport->e_d_tov))
609 fc_rport_error_retry(rport, fp); 598 fc_rport_error_retry(rdata, fp);
610 else 599 else
611 get_device(&rport->dev); 600 get_device(&rport->dev);
612} 601}
@@ -615,17 +604,17 @@ static void fc_rport_enter_plogi(struct fc_rport *rport)
615 * fc_rport_prli_resp() - Process Login (PRLI) response handler 604 * fc_rport_prli_resp() - Process Login (PRLI) response handler
616 * @sp: current sequence in the PRLI exchange 605 * @sp: current sequence in the PRLI exchange
617 * @fp: response frame 606 * @fp: response frame
618 * @rp_arg: Fibre Channel remote port 607 * @rdata_arg: private remote port data
619 * 608 *
620 * Locking Note: This function will be called without the rport lock 609 * Locking Note: This function will be called without the rport lock
621 * held, but it will lock, call an _enter_* function or fc_rport_error 610 * held, but it will lock, call an _enter_* function or fc_rport_error
622 * and then unlock the rport. 611 * and then unlock the rport.
623 */ 612 */
624static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp, 613static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
625 void *rp_arg) 614 void *rdata_arg)
626{ 615{
627 struct fc_rport *rport = rp_arg; 616 struct fc_rport_priv *rdata = rdata_arg;
628 struct fc_rport_priv *rdata = rport->dd_data; 617 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
629 struct { 618 struct {
630 struct fc_els_prli prli; 619 struct fc_els_prli prli;
631 struct fc_els_spp spp; 620 struct fc_els_spp spp;
@@ -636,18 +625,18 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
636 625
637 mutex_lock(&rdata->rp_mutex); 626 mutex_lock(&rdata->rp_mutex);
638 627
639 FC_RPORT_DBG(rport, "Received a PRLI response\n"); 628 FC_RPORT_DBG(rdata, "Received a PRLI response\n");
640 629
641 if (rdata->rp_state != RPORT_ST_PRLI) { 630 if (rdata->rp_state != RPORT_ST_PRLI) {
642 FC_RPORT_DBG(rport, "Received a PRLI response, but in state " 631 FC_RPORT_DBG(rdata, "Received a PRLI response, but in state "
643 "%s\n", fc_rport_state(rport)); 632 "%s\n", fc_rport_state(rdata));
644 if (IS_ERR(fp)) 633 if (IS_ERR(fp))
645 goto err; 634 goto err;
646 goto out; 635 goto out;
647 } 636 }
648 637
649 if (IS_ERR(fp)) { 638 if (IS_ERR(fp)) {
650 fc_rport_error_retry(rport, fp); 639 fc_rport_error_retry(rdata, fp);
651 goto err; 640 goto err;
652 } 641 }
653 642
@@ -667,11 +656,11 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
667 roles |= FC_RPORT_ROLE_FCP_TARGET; 656 roles |= FC_RPORT_ROLE_FCP_TARGET;
668 657
669 rport->roles = roles; 658 rport->roles = roles;
670 fc_rport_enter_rtv(rport); 659 fc_rport_enter_rtv(rdata);
671 660
672 } else { 661 } else {
673 FC_RPORT_DBG(rport, "Bad ELS response for PRLI command\n"); 662 FC_RPORT_DBG(rdata, "Bad ELS response for PRLI command\n");
674 fc_rport_enter_delete(rport, RPORT_EV_FAILED); 663 fc_rport_enter_delete(rdata, RPORT_EV_FAILED);
675 } 664 }
676 665
677out: 666out:
@@ -685,42 +674,42 @@ err:
685 * fc_rport_logo_resp() - Logout (LOGO) response handler 674 * fc_rport_logo_resp() - Logout (LOGO) response handler
686 * @sp: current sequence in the LOGO exchange 675 * @sp: current sequence in the LOGO exchange
687 * @fp: response frame 676 * @fp: response frame
688 * @rp_arg: Fibre Channel remote port 677 * @rdata_arg: private remote port data
689 * 678 *
690 * Locking Note: This function will be called without the rport lock 679 * Locking Note: This function will be called without the rport lock
691 * held, but it will lock, call an _enter_* function or fc_rport_error 680 * held, but it will lock, call an _enter_* function or fc_rport_error
692 * and then unlock the rport. 681 * and then unlock the rport.
693 */ 682 */
694static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp, 683static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
695 void *rp_arg) 684 void *rdata_arg)
696{ 685{
697 struct fc_rport *rport = rp_arg; 686 struct fc_rport_priv *rdata = rdata_arg;
698 struct fc_rport_priv *rdata = rport->dd_data; 687 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
699 u8 op; 688 u8 op;
700 689
701 mutex_lock(&rdata->rp_mutex); 690 mutex_lock(&rdata->rp_mutex);
702 691
703 FC_RPORT_DBG(rport, "Received a LOGO response\n"); 692 FC_RPORT_DBG(rdata, "Received a LOGO response\n");
704 693
705 if (rdata->rp_state != RPORT_ST_LOGO) { 694 if (rdata->rp_state != RPORT_ST_LOGO) {
706 FC_RPORT_DBG(rport, "Received a LOGO response, but in state " 695 FC_RPORT_DBG(rdata, "Received a LOGO response, but in state "
707 "%s\n", fc_rport_state(rport)); 696 "%s\n", fc_rport_state(rdata));
708 if (IS_ERR(fp)) 697 if (IS_ERR(fp))
709 goto err; 698 goto err;
710 goto out; 699 goto out;
711 } 700 }
712 701
713 if (IS_ERR(fp)) { 702 if (IS_ERR(fp)) {
714 fc_rport_error_retry(rport, fp); 703 fc_rport_error_retry(rdata, fp);
715 goto err; 704 goto err;
716 } 705 }
717 706
718 op = fc_frame_payload_op(fp); 707 op = fc_frame_payload_op(fp);
719 if (op == ELS_LS_ACC) { 708 if (op == ELS_LS_ACC) {
720 fc_rport_enter_rtv(rport); 709 fc_rport_enter_rtv(rdata);
721 } else { 710 } else {
722 FC_RPORT_DBG(rport, "Bad ELS response for LOGO command\n"); 711 FC_RPORT_DBG(rdata, "Bad ELS response for LOGO command\n");
723 fc_rport_enter_delete(rport, RPORT_EV_LOGO); 712 fc_rport_enter_delete(rdata, RPORT_EV_LOGO);
724 } 713 }
725 714
726out: 715out:
@@ -732,14 +721,14 @@ err:
732 721
733/** 722/**
734 * fc_rport_enter_prli() - Send Process Login (PRLI) request to peer 723 * fc_rport_enter_prli() - Send Process Login (PRLI) request to peer
735 * @rport: Fibre Channel remote port to send PRLI to 724 * @rdata: private remote port data
736 * 725 *
737 * Locking Note: The rport lock is expected to be held before calling 726 * Locking Note: The rport lock is expected to be held before calling
738 * this routine. 727 * this routine.
739 */ 728 */
740static void fc_rport_enter_prli(struct fc_rport *rport) 729static void fc_rport_enter_prli(struct fc_rport_priv *rdata)
741{ 730{
742 struct fc_rport_priv *rdata = rport->dd_data; 731 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
743 struct fc_lport *lport = rdata->local_port; 732 struct fc_lport *lport = rdata->local_port;
744 struct { 733 struct {
745 struct fc_els_prli prli; 734 struct fc_els_prli prli;
@@ -747,20 +736,20 @@ static void fc_rport_enter_prli(struct fc_rport *rport)
747 } *pp; 736 } *pp;
748 struct fc_frame *fp; 737 struct fc_frame *fp;
749 738
750 FC_RPORT_DBG(rport, "Port entered PRLI state from %s state\n", 739 FC_RPORT_DBG(rdata, "Port entered PRLI state from %s state\n",
751 fc_rport_state(rport)); 740 fc_rport_state(rdata));
752 741
753 fc_rport_state_enter(rport, RPORT_ST_PRLI); 742 fc_rport_state_enter(rdata, RPORT_ST_PRLI);
754 743
755 fp = fc_frame_alloc(lport, sizeof(*pp)); 744 fp = fc_frame_alloc(lport, sizeof(*pp));
756 if (!fp) { 745 if (!fp) {
757 fc_rport_error_retry(rport, fp); 746 fc_rport_error_retry(rdata, fp);
758 return; 747 return;
759 } 748 }
760 749
761 if (!lport->tt.elsct_send(lport, rport, fp, ELS_PRLI, 750 if (!lport->tt.elsct_send(lport, rdata, fp, ELS_PRLI,
762 fc_rport_prli_resp, rport, lport->e_d_tov)) 751 fc_rport_prli_resp, rdata, lport->e_d_tov))
763 fc_rport_error_retry(rport, fp); 752 fc_rport_error_retry(rdata, fp);
764 else 753 else
765 get_device(&rport->dev); 754 get_device(&rport->dev);
766} 755}
@@ -769,7 +758,7 @@ static void fc_rport_enter_prli(struct fc_rport *rport)
769 * fc_rport_els_rtv_resp() - Request Timeout Value response handler 758 * fc_rport_els_rtv_resp() - Request Timeout Value response handler
770 * @sp: current sequence in the RTV exchange 759 * @sp: current sequence in the RTV exchange
771 * @fp: response frame 760 * @fp: response frame
772 * @rp_arg: Fibre Channel remote port 761 * @rdata_arg: private remote port data
773 * 762 *
774 * Many targets don't seem to support this. 763 * Many targets don't seem to support this.
775 * 764 *
@@ -778,26 +767,26 @@ static void fc_rport_enter_prli(struct fc_rport *rport)
778 * and then unlock the rport. 767 * and then unlock the rport.
779 */ 768 */
780static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp, 769static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp,
781 void *rp_arg) 770 void *rdata_arg)
782{ 771{
783 struct fc_rport *rport = rp_arg; 772 struct fc_rport_priv *rdata = rdata_arg;
784 struct fc_rport_priv *rdata = rport->dd_data; 773 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
785 u8 op; 774 u8 op;
786 775
787 mutex_lock(&rdata->rp_mutex); 776 mutex_lock(&rdata->rp_mutex);
788 777
789 FC_RPORT_DBG(rport, "Received a RTV response\n"); 778 FC_RPORT_DBG(rdata, "Received a RTV response\n");
790 779
791 if (rdata->rp_state != RPORT_ST_RTV) { 780 if (rdata->rp_state != RPORT_ST_RTV) {
792 FC_RPORT_DBG(rport, "Received a RTV response, but in state " 781 FC_RPORT_DBG(rdata, "Received a RTV response, but in state "
793 "%s\n", fc_rport_state(rport)); 782 "%s\n", fc_rport_state(rdata));
794 if (IS_ERR(fp)) 783 if (IS_ERR(fp))
795 goto err; 784 goto err;
796 goto out; 785 goto out;
797 } 786 }
798 787
799 if (IS_ERR(fp)) { 788 if (IS_ERR(fp)) {
800 fc_rport_error(rport, fp); 789 fc_rport_error(rdata, fp);
801 goto err; 790 goto err;
802 } 791 }
803 792
@@ -823,7 +812,7 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp,
823 } 812 }
824 } 813 }
825 814
826 fc_rport_enter_ready(rport); 815 fc_rport_enter_ready(rdata);
827 816
828out: 817out:
829 fc_frame_free(fp); 818 fc_frame_free(fp);
@@ -834,62 +823,62 @@ err:
834 823
835/** 824/**
836 * fc_rport_enter_rtv() - Send Request Timeout Value (RTV) request to peer 825 * fc_rport_enter_rtv() - Send Request Timeout Value (RTV) request to peer
837 * @rport: Fibre Channel remote port to send RTV to 826 * @rdata: private remote port data
838 * 827 *
839 * Locking Note: The rport lock is expected to be held before calling 828 * Locking Note: The rport lock is expected to be held before calling
840 * this routine. 829 * this routine.
841 */ 830 */
842static void fc_rport_enter_rtv(struct fc_rport *rport) 831static void fc_rport_enter_rtv(struct fc_rport_priv *rdata)
843{ 832{
844 struct fc_frame *fp; 833 struct fc_frame *fp;
845 struct fc_rport_priv *rdata = rport->dd_data;
846 struct fc_lport *lport = rdata->local_port; 834 struct fc_lport *lport = rdata->local_port;
835 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
847 836
848 FC_RPORT_DBG(rport, "Port entered RTV state from %s state\n", 837 FC_RPORT_DBG(rdata, "Port entered RTV state from %s state\n",
849 fc_rport_state(rport)); 838 fc_rport_state(rdata));
850 839
851 fc_rport_state_enter(rport, RPORT_ST_RTV); 840 fc_rport_state_enter(rdata, RPORT_ST_RTV);
852 841
853 fp = fc_frame_alloc(lport, sizeof(struct fc_els_rtv)); 842 fp = fc_frame_alloc(lport, sizeof(struct fc_els_rtv));
854 if (!fp) { 843 if (!fp) {
855 fc_rport_error_retry(rport, fp); 844 fc_rport_error_retry(rdata, fp);
856 return; 845 return;
857 } 846 }
858 847
859 if (!lport->tt.elsct_send(lport, rport, fp, ELS_RTV, 848 if (!lport->tt.elsct_send(lport, rdata, fp, ELS_RTV,
860 fc_rport_rtv_resp, rport, lport->e_d_tov)) 849 fc_rport_rtv_resp, rdata, lport->e_d_tov))
861 fc_rport_error_retry(rport, fp); 850 fc_rport_error_retry(rdata, fp);
862 else 851 else
863 get_device(&rport->dev); 852 get_device(&rport->dev);
864} 853}
865 854
866/** 855/**
867 * fc_rport_enter_logo() - Send Logout (LOGO) request to peer 856 * fc_rport_enter_logo() - Send Logout (LOGO) request to peer
868 * @rport: Fibre Channel remote port to send LOGO to 857 * @rdata: private remote port data
869 * 858 *
870 * Locking Note: The rport lock is expected to be held before calling 859 * Locking Note: The rport lock is expected to be held before calling
871 * this routine. 860 * this routine.
872 */ 861 */
873static void fc_rport_enter_logo(struct fc_rport *rport) 862static void fc_rport_enter_logo(struct fc_rport_priv *rdata)
874{ 863{
875 struct fc_rport_priv *rdata = rport->dd_data;
876 struct fc_lport *lport = rdata->local_port; 864 struct fc_lport *lport = rdata->local_port;
865 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
877 struct fc_frame *fp; 866 struct fc_frame *fp;
878 867
879 FC_RPORT_DBG(rport, "Port entered LOGO state from %s state\n", 868 FC_RPORT_DBG(rdata, "Port entered LOGO state from %s state\n",
880 fc_rport_state(rport)); 869 fc_rport_state(rdata));
881 870
882 fc_rport_state_enter(rport, RPORT_ST_LOGO); 871 fc_rport_state_enter(rdata, RPORT_ST_LOGO);
883 872
884 fp = fc_frame_alloc(lport, sizeof(struct fc_els_logo)); 873 fp = fc_frame_alloc(lport, sizeof(struct fc_els_logo));
885 if (!fp) { 874 if (!fp) {
886 fc_rport_error_retry(rport, fp); 875 fc_rport_error_retry(rdata, fp);
887 return; 876 return;
888 } 877 }
889 878
890 if (!lport->tt.elsct_send(lport, rport, fp, ELS_LOGO, 879 if (!lport->tt.elsct_send(lport, rdata, fp, ELS_LOGO,
891 fc_rport_logo_resp, rport, lport->e_d_tov)) 880 fc_rport_logo_resp, rdata, lport->e_d_tov))
892 fc_rport_error_retry(rport, fp); 881 fc_rport_error_retry(rdata, fp);
893 else 882 else
894 get_device(&rport->dev); 883 get_device(&rport->dev);
895} 884}
@@ -899,16 +888,15 @@ static void fc_rport_enter_logo(struct fc_rport *rport)
899 * fc_rport_recv_req() - Receive a request from a rport 888 * fc_rport_recv_req() - Receive a request from a rport
900 * @sp: current sequence in the PLOGI exchange 889 * @sp: current sequence in the PLOGI exchange
901 * @fp: response frame 890 * @fp: response frame
902 * @rp_arg: Fibre Channel remote port 891 * @rdata_arg: private remote port data
903 * 892 *
904 * Locking Note: Called without the rport lock held. This 893 * Locking Note: Called without the rport lock held. This
905 * function will hold the rport lock, call an _enter_* 894 * function will hold the rport lock, call an _enter_*
906 * function and then unlock the rport. 895 * function and then unlock the rport.
907 */ 896 */
908void fc_rport_recv_req(struct fc_seq *sp, struct fc_frame *fp, 897void fc_rport_recv_req(struct fc_seq *sp, struct fc_frame *fp,
909 struct fc_rport *rport) 898 struct fc_rport_priv *rdata)
910{ 899{
911 struct fc_rport_priv *rdata = rport->dd_data;
912 struct fc_lport *lport = rdata->local_port; 900 struct fc_lport *lport = rdata->local_port;
913 901
914 struct fc_frame_header *fh; 902 struct fc_frame_header *fh;
@@ -927,16 +915,16 @@ void fc_rport_recv_req(struct fc_seq *sp, struct fc_frame *fp,
927 op = fc_frame_payload_op(fp); 915 op = fc_frame_payload_op(fp);
928 switch (op) { 916 switch (op) {
929 case ELS_PLOGI: 917 case ELS_PLOGI:
930 fc_rport_recv_plogi_req(rport, sp, fp); 918 fc_rport_recv_plogi_req(rdata, sp, fp);
931 break; 919 break;
932 case ELS_PRLI: 920 case ELS_PRLI:
933 fc_rport_recv_prli_req(rport, sp, fp); 921 fc_rport_recv_prli_req(rdata, sp, fp);
934 break; 922 break;
935 case ELS_PRLO: 923 case ELS_PRLO:
936 fc_rport_recv_prlo_req(rport, sp, fp); 924 fc_rport_recv_prlo_req(rdata, sp, fp);
937 break; 925 break;
938 case ELS_LOGO: 926 case ELS_LOGO:
939 fc_rport_recv_logo_req(rport, sp, fp); 927 fc_rport_recv_logo_req(rdata, sp, fp);
940 break; 928 break;
941 case ELS_RRQ: 929 case ELS_RRQ:
942 els_data.fp = fp; 930 els_data.fp = fp;
@@ -958,17 +946,17 @@ void fc_rport_recv_req(struct fc_seq *sp, struct fc_frame *fp,
958 946
959/** 947/**
960 * fc_rport_recv_plogi_req() - Handle incoming Port Login (PLOGI) request 948 * fc_rport_recv_plogi_req() - Handle incoming Port Login (PLOGI) request
961 * @rport: Fibre Channel remote port that initiated PLOGI 949 * @rdata: private remote port data
962 * @sp: current sequence in the PLOGI exchange 950 * @sp: current sequence in the PLOGI exchange
963 * @fp: PLOGI request frame 951 * @fp: PLOGI request frame
964 * 952 *
965 * Locking Note: The rport lock is exected to be held before calling 953 * Locking Note: The rport lock is exected to be held before calling
966 * this function. 954 * this function.
967 */ 955 */
968static void fc_rport_recv_plogi_req(struct fc_rport *rport, 956static void fc_rport_recv_plogi_req(struct fc_rport_priv *rdata,
969 struct fc_seq *sp, struct fc_frame *rx_fp) 957 struct fc_seq *sp, struct fc_frame *rx_fp)
970{ 958{
971 struct fc_rport_priv *rdata = rport->dd_data; 959 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
972 struct fc_lport *lport = rdata->local_port; 960 struct fc_lport *lport = rdata->local_port;
973 struct fc_frame *fp = rx_fp; 961 struct fc_frame *fp = rx_fp;
974 struct fc_exch *ep; 962 struct fc_exch *ep;
@@ -984,13 +972,13 @@ static void fc_rport_recv_plogi_req(struct fc_rport *rport,
984 972
985 fh = fc_frame_header_get(fp); 973 fh = fc_frame_header_get(fp);
986 974
987 FC_RPORT_DBG(rport, "Received PLOGI request while in state %s\n", 975 FC_RPORT_DBG(rdata, "Received PLOGI request while in state %s\n",
988 fc_rport_state(rport)); 976 fc_rport_state(rdata));
989 977
990 sid = ntoh24(fh->fh_s_id); 978 sid = ntoh24(fh->fh_s_id);
991 pl = fc_frame_payload_get(fp, sizeof(*pl)); 979 pl = fc_frame_payload_get(fp, sizeof(*pl));
992 if (!pl) { 980 if (!pl) {
993 FC_RPORT_DBG(rport, "Received PLOGI too short\n"); 981 FC_RPORT_DBG(rdata, "Received PLOGI too short\n");
994 WARN_ON(1); 982 WARN_ON(1);
995 /* XXX TBD: send reject? */ 983 /* XXX TBD: send reject? */
996 fc_frame_free(fp); 984 fc_frame_free(fp);
@@ -1012,25 +1000,25 @@ static void fc_rport_recv_plogi_req(struct fc_rport *rport,
1012 */ 1000 */
1013 switch (rdata->rp_state) { 1001 switch (rdata->rp_state) {
1014 case RPORT_ST_INIT: 1002 case RPORT_ST_INIT:
1015 FC_RPORT_DBG(rport, "Received PLOGI, wwpn %llx state INIT " 1003 FC_RPORT_DBG(rdata, "Received PLOGI, wwpn %llx state INIT "
1016 "- reject\n", (unsigned long long)wwpn); 1004 "- reject\n", (unsigned long long)wwpn);
1017 reject = ELS_RJT_UNSUP; 1005 reject = ELS_RJT_UNSUP;
1018 break; 1006 break;
1019 case RPORT_ST_PLOGI: 1007 case RPORT_ST_PLOGI:
1020 FC_RPORT_DBG(rport, "Received PLOGI in PLOGI state %d\n", 1008 FC_RPORT_DBG(rdata, "Received PLOGI in PLOGI state %d\n",
1021 rdata->rp_state); 1009 rdata->rp_state);
1022 if (wwpn < lport->wwpn) 1010 if (wwpn < lport->wwpn)
1023 reject = ELS_RJT_INPROG; 1011 reject = ELS_RJT_INPROG;
1024 break; 1012 break;
1025 case RPORT_ST_PRLI: 1013 case RPORT_ST_PRLI:
1026 case RPORT_ST_READY: 1014 case RPORT_ST_READY:
1027 FC_RPORT_DBG(rport, "Received PLOGI in logged-in state %d " 1015 FC_RPORT_DBG(rdata, "Received PLOGI in logged-in state %d "
1028 "- ignored for now\n", rdata->rp_state); 1016 "- ignored for now\n", rdata->rp_state);
1029 /* XXX TBD - should reset */ 1017 /* XXX TBD - should reset */
1030 break; 1018 break;
1031 case RPORT_ST_DELETE: 1019 case RPORT_ST_DELETE:
1032 default: 1020 default:
1033 FC_RPORT_DBG(rport, "Received PLOGI in unexpected " 1021 FC_RPORT_DBG(rdata, "Received PLOGI in unexpected "
1034 "state %d\n", rdata->rp_state); 1022 "state %d\n", rdata->rp_state);
1035 fc_frame_free(fp); 1023 fc_frame_free(fp);
1036 return; 1024 return;
@@ -1074,24 +1062,24 @@ static void fc_rport_recv_plogi_req(struct fc_rport *rport,
1074 FC_TYPE_ELS, f_ctl, 0); 1062 FC_TYPE_ELS, f_ctl, 0);
1075 lport->tt.seq_send(lport, sp, fp); 1063 lport->tt.seq_send(lport, sp, fp);
1076 if (rdata->rp_state == RPORT_ST_PLOGI) 1064 if (rdata->rp_state == RPORT_ST_PLOGI)
1077 fc_rport_enter_prli(rport); 1065 fc_rport_enter_prli(rdata);
1078 } 1066 }
1079 } 1067 }
1080} 1068}
1081 1069
1082/** 1070/**
1083 * fc_rport_recv_prli_req() - Handle incoming Process Login (PRLI) request 1071 * fc_rport_recv_prli_req() - Handle incoming Process Login (PRLI) request
1084 * @rport: Fibre Channel remote port that initiated PRLI 1072 * @rdata: private remote port data
1085 * @sp: current sequence in the PRLI exchange 1073 * @sp: current sequence in the PRLI exchange
1086 * @fp: PRLI request frame 1074 * @fp: PRLI request frame
1087 * 1075 *
1088 * Locking Note: The rport lock is exected to be held before calling 1076 * Locking Note: The rport lock is exected to be held before calling
1089 * this function. 1077 * this function.
1090 */ 1078 */
1091static void fc_rport_recv_prli_req(struct fc_rport *rport, 1079static void fc_rport_recv_prli_req(struct fc_rport_priv *rdata,
1092 struct fc_seq *sp, struct fc_frame *rx_fp) 1080 struct fc_seq *sp, struct fc_frame *rx_fp)
1093{ 1081{
1094 struct fc_rport_priv *rdata = rport->dd_data; 1082 struct fc_rport *rport = PRIV_TO_RPORT(rdata);
1095 struct fc_lport *lport = rdata->local_port; 1083 struct fc_lport *lport = rdata->local_port;
1096 struct fc_exch *ep; 1084 struct fc_exch *ep;
1097 struct fc_frame *fp; 1085 struct fc_frame *fp;
@@ -1115,8 +1103,8 @@ static void fc_rport_recv_prli_req(struct fc_rport *rport,
1115 1103
1116 fh = fc_frame_header_get(rx_fp); 1104 fh = fc_frame_header_get(rx_fp);
1117 1105
1118 FC_RPORT_DBG(rport, "Received PRLI request while in state %s\n", 1106 FC_RPORT_DBG(rdata, "Received PRLI request while in state %s\n",
1119 fc_rport_state(rport)); 1107 fc_rport_state(rdata));
1120 1108
1121 switch (rdata->rp_state) { 1109 switch (rdata->rp_state) {
1122 case RPORT_ST_PRLI: 1110 case RPORT_ST_PRLI:
@@ -1220,7 +1208,7 @@ static void fc_rport_recv_prli_req(struct fc_rport *rport,
1220 */ 1208 */
1221 switch (rdata->rp_state) { 1209 switch (rdata->rp_state) {
1222 case RPORT_ST_PRLI: 1210 case RPORT_ST_PRLI:
1223 fc_rport_enter_ready(rport); 1211 fc_rport_enter_ready(rdata);
1224 break; 1212 break;
1225 case RPORT_ST_READY: 1213 case RPORT_ST_READY:
1226 break; 1214 break;
@@ -1233,17 +1221,17 @@ static void fc_rport_recv_prli_req(struct fc_rport *rport,
1233 1221
1234/** 1222/**
1235 * fc_rport_recv_prlo_req() - Handle incoming Process Logout (PRLO) request 1223 * fc_rport_recv_prlo_req() - Handle incoming Process Logout (PRLO) request
1236 * @rport: Fibre Channel remote port that initiated PRLO 1224 * @rdata: private remote port data
1237 * @sp: current sequence in the PRLO exchange 1225 * @sp: current sequence in the PRLO exchange
1238 * @fp: PRLO request frame 1226 * @fp: PRLO request frame
1239 * 1227 *
1240 * Locking Note: The rport lock is exected to be held before calling 1228 * Locking Note: The rport lock is exected to be held before calling
1241 * this function. 1229 * this function.
1242 */ 1230 */
1243static void fc_rport_recv_prlo_req(struct fc_rport *rport, struct fc_seq *sp, 1231static void fc_rport_recv_prlo_req(struct fc_rport_priv *rdata,
1232 struct fc_seq *sp,
1244 struct fc_frame *fp) 1233 struct fc_frame *fp)
1245{ 1234{
1246 struct fc_rport_priv *rdata = rport->dd_data;
1247 struct fc_lport *lport = rdata->local_port; 1235 struct fc_lport *lport = rdata->local_port;
1248 1236
1249 struct fc_frame_header *fh; 1237 struct fc_frame_header *fh;
@@ -1251,8 +1239,8 @@ static void fc_rport_recv_prlo_req(struct fc_rport *rport, struct fc_seq *sp,
1251 1239
1252 fh = fc_frame_header_get(fp); 1240 fh = fc_frame_header_get(fp);
1253 1241
1254 FC_RPORT_DBG(rport, "Received PRLO request while in state %s\n", 1242 FC_RPORT_DBG(rdata, "Received PRLO request while in state %s\n",
1255 fc_rport_state(rport)); 1243 fc_rport_state(rdata));
1256 1244
1257 if (rdata->rp_state == RPORT_ST_DELETE) { 1245 if (rdata->rp_state == RPORT_ST_DELETE) {
1258 fc_frame_free(fp); 1246 fc_frame_free(fp);
@@ -1268,24 +1256,24 @@ static void fc_rport_recv_prlo_req(struct fc_rport *rport, struct fc_seq *sp,
1268 1256
1269/** 1257/**
1270 * fc_rport_recv_logo_req() - Handle incoming Logout (LOGO) request 1258 * fc_rport_recv_logo_req() - Handle incoming Logout (LOGO) request
1271 * @rport: Fibre Channel remote port that initiated LOGO 1259 * @rdata: private remote port data
1272 * @sp: current sequence in the LOGO exchange 1260 * @sp: current sequence in the LOGO exchange
1273 * @fp: LOGO request frame 1261 * @fp: LOGO request frame
1274 * 1262 *
1275 * Locking Note: The rport lock is exected to be held before calling 1263 * Locking Note: The rport lock is exected to be held before calling
1276 * this function. 1264 * this function.
1277 */ 1265 */
1278static void fc_rport_recv_logo_req(struct fc_rport *rport, struct fc_seq *sp, 1266static void fc_rport_recv_logo_req(struct fc_rport_priv *rdata,
1267 struct fc_seq *sp,
1279 struct fc_frame *fp) 1268 struct fc_frame *fp)
1280{ 1269{
1281 struct fc_frame_header *fh; 1270 struct fc_frame_header *fh;
1282 struct fc_rport_priv *rdata = rport->dd_data;
1283 struct fc_lport *lport = rdata->local_port; 1271 struct fc_lport *lport = rdata->local_port;
1284 1272
1285 fh = fc_frame_header_get(fp); 1273 fh = fc_frame_header_get(fp);
1286 1274
1287 FC_RPORT_DBG(rport, "Received LOGO request while in state %s\n", 1275 FC_RPORT_DBG(rdata, "Received LOGO request while in state %s\n",
1288 fc_rport_state(rport)); 1276 fc_rport_state(rdata));
1289 1277
1290 if (rdata->rp_state == RPORT_ST_DELETE) { 1278 if (rdata->rp_state == RPORT_ST_DELETE) {
1291 fc_frame_free(fp); 1279 fc_frame_free(fp);
@@ -1293,7 +1281,7 @@ static void fc_rport_recv_logo_req(struct fc_rport *rport, struct fc_seq *sp,
1293 } 1281 }
1294 1282
1295 rdata->event = RPORT_EV_LOGO; 1283 rdata->event = RPORT_EV_LOGO;
1296 fc_rport_state_enter(rport, RPORT_ST_DELETE); 1284 fc_rport_state_enter(rdata, RPORT_ST_DELETE);
1297 queue_work(rport_event_queue, &rdata->event_work); 1285 queue_work(rport_event_queue, &rdata->event_work);
1298 1286
1299 lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL); 1287 lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL);