Lines Matching refs:rport
131 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_id() local
132 return sprintf(buf, SRP_PID_FMT "\n", SRP_PID(rport)); in show_srp_rport_id()
149 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_roles() local
154 if (srp_rport_role_names[i].value == rport->roles) { in show_srp_rport_roles()
167 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_delete() local
172 i->f->rport_delete(rport); in store_srp_rport_delete()
191 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_state() local
192 enum srp_rport_state state = rport->state; in show_srp_rport_state()
222 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_reconnect_delay() local
224 return srp_show_tmo(buf, rport->reconnect_delay); in show_reconnect_delay()
231 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_reconnect_delay() local
237 res = srp_tmo_valid(delay, rport->fast_io_fail_tmo, in store_reconnect_delay()
238 rport->dev_loss_tmo); in store_reconnect_delay()
242 if (rport->reconnect_delay <= 0 && delay > 0 && in store_reconnect_delay()
243 rport->state != SRP_RPORT_RUNNING) { in store_reconnect_delay()
244 queue_delayed_work(system_long_wq, &rport->reconnect_work, in store_reconnect_delay()
247 cancel_delayed_work(&rport->reconnect_work); in store_reconnect_delay()
249 rport->reconnect_delay = delay; in store_reconnect_delay()
262 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_failed_reconnects() local
264 return sprintf(buf, "%d\n", rport->failed_reconnects); in show_failed_reconnects()
273 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_fast_io_fail_tmo() local
275 return srp_show_tmo(buf, rport->fast_io_fail_tmo); in show_srp_rport_fast_io_fail_tmo()
282 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_fast_io_fail_tmo() local
289 res = srp_tmo_valid(rport->reconnect_delay, fast_io_fail_tmo, in store_srp_rport_fast_io_fail_tmo()
290 rport->dev_loss_tmo); in store_srp_rport_fast_io_fail_tmo()
293 rport->fast_io_fail_tmo = fast_io_fail_tmo; in store_srp_rport_fast_io_fail_tmo()
308 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_dev_loss_tmo() local
310 return srp_show_tmo(buf, rport->dev_loss_tmo); in show_srp_rport_dev_loss_tmo()
317 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_dev_loss_tmo() local
324 res = srp_tmo_valid(rport->reconnect_delay, rport->fast_io_fail_tmo, in store_srp_rport_dev_loss_tmo()
328 rport->dev_loss_tmo = dev_loss_tmo; in store_srp_rport_dev_loss_tmo()
339 static int srp_rport_set_state(struct srp_rport *rport, in srp_rport_set_state() argument
342 enum srp_rport_state old_state = rport->state; in srp_rport_set_state()
344 lockdep_assert_held(&rport->mutex); in srp_rport_set_state()
374 rport->state = new_state; in srp_rport_set_state()
387 struct srp_rport *rport = container_of(to_delayed_work(work), in srp_reconnect_work() local
389 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_work()
392 res = srp_reconnect_rport(rport); in srp_reconnect_work()
396 ++rport->failed_reconnects, res); in srp_reconnect_work()
397 delay = rport->reconnect_delay * in srp_reconnect_work()
398 min(100, max(1, rport->failed_reconnects - 10)); in srp_reconnect_work()
401 &rport->reconnect_work, delay * HZ); in srp_reconnect_work()
435 static void __rport_fail_io_fast(struct srp_rport *rport) in __rport_fail_io_fast() argument
437 struct Scsi_Host *shost = rport_to_shost(rport); in __rport_fail_io_fast()
440 lockdep_assert_held(&rport->mutex); in __rport_fail_io_fast()
442 if (srp_rport_set_state(rport, SRP_RPORT_FAIL_FAST)) in __rport_fail_io_fast()
444 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in __rport_fail_io_fast()
450 i->f->terminate_rport_io(rport); in __rport_fail_io_fast()
460 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_fast_io_fail_timedout() local
462 struct Scsi_Host *shost = rport_to_shost(rport); in rport_fast_io_fail_timedout()
465 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_fast_io_fail_timedout()
467 mutex_lock(&rport->mutex); in rport_fast_io_fail_timedout()
468 if (rport->state == SRP_RPORT_BLOCKED) in rport_fast_io_fail_timedout()
469 __rport_fail_io_fast(rport); in rport_fast_io_fail_timedout()
470 mutex_unlock(&rport->mutex); in rport_fast_io_fail_timedout()
479 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_dev_loss_timedout() local
481 struct Scsi_Host *shost = rport_to_shost(rport); in rport_dev_loss_timedout()
485 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_dev_loss_timedout()
487 mutex_lock(&rport->mutex); in rport_dev_loss_timedout()
488 WARN_ON(srp_rport_set_state(rport, SRP_RPORT_LOST) != 0); in rport_dev_loss_timedout()
489 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in rport_dev_loss_timedout()
490 mutex_unlock(&rport->mutex); in rport_dev_loss_timedout()
492 i->f->rport_delete(rport); in rport_dev_loss_timedout()
495 static void __srp_start_tl_fail_timers(struct srp_rport *rport) in __srp_start_tl_fail_timers() argument
497 struct Scsi_Host *shost = rport_to_shost(rport); in __srp_start_tl_fail_timers()
500 lockdep_assert_held(&rport->mutex); in __srp_start_tl_fail_timers()
502 delay = rport->reconnect_delay; in __srp_start_tl_fail_timers()
503 fast_io_fail_tmo = rport->fast_io_fail_tmo; in __srp_start_tl_fail_timers()
504 dev_loss_tmo = rport->dev_loss_tmo; in __srp_start_tl_fail_timers()
506 rport->state); in __srp_start_tl_fail_timers()
508 if (rport->state == SRP_RPORT_LOST) in __srp_start_tl_fail_timers()
511 queue_delayed_work(system_long_wq, &rport->reconnect_work, in __srp_start_tl_fail_timers()
514 srp_rport_set_state(rport, SRP_RPORT_BLOCKED) == 0) { in __srp_start_tl_fail_timers()
516 rport->state); in __srp_start_tl_fail_timers()
520 &rport->fast_io_fail_work, in __srp_start_tl_fail_timers()
524 &rport->dev_loss_work, in __srp_start_tl_fail_timers()
536 void srp_start_tl_fail_timers(struct srp_rport *rport) in srp_start_tl_fail_timers() argument
538 mutex_lock(&rport->mutex); in srp_start_tl_fail_timers()
539 __srp_start_tl_fail_timers(rport); in srp_start_tl_fail_timers()
540 mutex_unlock(&rport->mutex); in srp_start_tl_fail_timers()
566 int srp_reconnect_rport(struct srp_rport *rport) in srp_reconnect_rport() argument
568 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_rport()
575 res = mutex_lock_interruptible(&rport->mutex); in srp_reconnect_rport()
580 res = rport->state != SRP_RPORT_LOST ? i->f->reconnect(rport) : -ENODEV; in srp_reconnect_rport()
582 dev_name(&shost->shost_gendev), rport->state, res); in srp_reconnect_rport()
584 cancel_delayed_work(&rport->fast_io_fail_work); in srp_reconnect_rport()
585 cancel_delayed_work(&rport->dev_loss_work); in srp_reconnect_rport()
587 rport->failed_reconnects = 0; in srp_reconnect_rport()
588 srp_rport_set_state(rport, SRP_RPORT_RUNNING); in srp_reconnect_rport()
600 } else if (rport->state == SRP_RPORT_RUNNING) { in srp_reconnect_rport()
606 __rport_fail_io_fast(rport); in srp_reconnect_rport()
609 __srp_start_tl_fail_timers(rport); in srp_reconnect_rport()
610 } else if (rport->state != SRP_RPORT_BLOCKED) { in srp_reconnect_rport()
614 mutex_unlock(&rport->mutex); in srp_reconnect_rport()
637 struct srp_rport *rport = shost_to_rport(shost); in srp_timed_out() local
640 return rport->fast_io_fail_tmo < 0 && rport->dev_loss_tmo < 0 && in srp_timed_out()
647 struct srp_rport *rport = dev_to_rport(dev); in srp_rport_release() local
650 kfree(rport); in srp_rport_release()
699 void srp_rport_get(struct srp_rport *rport) in srp_rport_get() argument
701 get_device(&rport->dev); in srp_rport_get()
709 void srp_rport_put(struct srp_rport *rport) in srp_rport_put() argument
711 put_device(&rport->dev); in srp_rport_put()
725 struct srp_rport *rport; in srp_rport_add() local
730 rport = kzalloc(sizeof(*rport), GFP_KERNEL); in srp_rport_add()
731 if (!rport) in srp_rport_add()
734 mutex_init(&rport->mutex); in srp_rport_add()
736 device_initialize(&rport->dev); in srp_rport_add()
738 rport->dev.parent = get_device(parent); in srp_rport_add()
739 rport->dev.release = srp_rport_release; in srp_rport_add()
741 memcpy(rport->port_id, ids->port_id, sizeof(rport->port_id)); in srp_rport_add()
742 rport->roles = ids->roles; in srp_rport_add()
745 rport->reconnect_delay = i->f->reconnect_delay ? in srp_rport_add()
747 INIT_DELAYED_WORK(&rport->reconnect_work, srp_reconnect_work); in srp_rport_add()
748 rport->fast_io_fail_tmo = i->f->fast_io_fail_tmo ? in srp_rport_add()
750 rport->dev_loss_tmo = i->f->dev_loss_tmo ? *i->f->dev_loss_tmo : 60; in srp_rport_add()
751 INIT_DELAYED_WORK(&rport->fast_io_fail_work, in srp_rport_add()
753 INIT_DELAYED_WORK(&rport->dev_loss_work, rport_dev_loss_timedout); in srp_rport_add()
756 dev_set_name(&rport->dev, "port-%d:%d", shost->host_no, id); in srp_rport_add()
758 transport_setup_device(&rport->dev); in srp_rport_add()
760 ret = device_add(&rport->dev); in srp_rport_add()
762 transport_destroy_device(&rport->dev); in srp_rport_add()
763 put_device(&rport->dev); in srp_rport_add()
767 transport_add_device(&rport->dev); in srp_rport_add()
768 transport_configure_device(&rport->dev); in srp_rport_add()
770 return rport; in srp_rport_add()
780 void srp_rport_del(struct srp_rport *rport) in srp_rport_del() argument
782 struct device *dev = &rport->dev; in srp_rport_del()
820 void srp_stop_rport_timers(struct srp_rport *rport) in srp_stop_rport_timers() argument
822 mutex_lock(&rport->mutex); in srp_stop_rport_timers()
823 if (rport->state == SRP_RPORT_BLOCKED) in srp_stop_rport_timers()
824 __rport_fail_io_fast(rport); in srp_stop_rport_timers()
825 srp_rport_set_state(rport, SRP_RPORT_LOST); in srp_stop_rport_timers()
826 mutex_unlock(&rport->mutex); in srp_stop_rport_timers()
828 cancel_delayed_work_sync(&rport->reconnect_work); in srp_stop_rport_timers()
829 cancel_delayed_work_sync(&rport->fast_io_fail_work); in srp_stop_rport_timers()
830 cancel_delayed_work_sync(&rport->dev_loss_work); in srp_stop_rport_timers()