Lines Matching refs:rport
148 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_id() local
149 return sprintf(buf, SRP_PID_FMT "\n", SRP_PID(rport)); in show_srp_rport_id()
166 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_roles() local
171 if (srp_rport_role_names[i].value == rport->roles) { in show_srp_rport_roles()
184 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_delete() local
189 i->f->rport_delete(rport); in store_srp_rport_delete()
208 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_state() local
209 enum srp_rport_state state = rport->state; in show_srp_rport_state()
239 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_reconnect_delay() local
241 return srp_show_tmo(buf, rport->reconnect_delay); in show_reconnect_delay()
248 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_reconnect_delay() local
254 res = srp_tmo_valid(delay, rport->fast_io_fail_tmo, in store_reconnect_delay()
255 rport->dev_loss_tmo); in store_reconnect_delay()
259 if (rport->reconnect_delay <= 0 && delay > 0 && in store_reconnect_delay()
260 rport->state != SRP_RPORT_RUNNING) { in store_reconnect_delay()
261 queue_delayed_work(system_long_wq, &rport->reconnect_work, in store_reconnect_delay()
264 cancel_delayed_work(&rport->reconnect_work); in store_reconnect_delay()
266 rport->reconnect_delay = delay; in store_reconnect_delay()
279 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_failed_reconnects() local
281 return sprintf(buf, "%d\n", rport->failed_reconnects); in show_failed_reconnects()
290 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_fast_io_fail_tmo() local
292 return srp_show_tmo(buf, rport->fast_io_fail_tmo); in show_srp_rport_fast_io_fail_tmo()
299 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_fast_io_fail_tmo() local
306 res = srp_tmo_valid(rport->reconnect_delay, fast_io_fail_tmo, in store_srp_rport_fast_io_fail_tmo()
307 rport->dev_loss_tmo); in store_srp_rport_fast_io_fail_tmo()
310 rport->fast_io_fail_tmo = fast_io_fail_tmo; in store_srp_rport_fast_io_fail_tmo()
325 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_dev_loss_tmo() local
327 return srp_show_tmo(buf, rport->dev_loss_tmo); in show_srp_rport_dev_loss_tmo()
334 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_dev_loss_tmo() local
341 res = srp_tmo_valid(rport->reconnect_delay, rport->fast_io_fail_tmo, in store_srp_rport_dev_loss_tmo()
345 rport->dev_loss_tmo = dev_loss_tmo; in store_srp_rport_dev_loss_tmo()
356 static int srp_rport_set_state(struct srp_rport *rport, in srp_rport_set_state() argument
359 enum srp_rport_state old_state = rport->state; in srp_rport_set_state()
361 lockdep_assert_held(&rport->mutex); in srp_rport_set_state()
391 rport->state = new_state; in srp_rport_set_state()
404 struct srp_rport *rport = container_of(to_delayed_work(work), in srp_reconnect_work() local
406 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_work()
409 res = srp_reconnect_rport(rport); in srp_reconnect_work()
413 ++rport->failed_reconnects, res); in srp_reconnect_work()
414 delay = rport->reconnect_delay * in srp_reconnect_work()
415 min(100, max(1, rport->failed_reconnects - 10)); in srp_reconnect_work()
418 &rport->reconnect_work, delay * HZ); in srp_reconnect_work()
452 static void __rport_fail_io_fast(struct srp_rport *rport) in __rport_fail_io_fast() argument
454 struct Scsi_Host *shost = rport_to_shost(rport); in __rport_fail_io_fast()
457 lockdep_assert_held(&rport->mutex); in __rport_fail_io_fast()
459 if (srp_rport_set_state(rport, SRP_RPORT_FAIL_FAST)) in __rport_fail_io_fast()
461 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in __rport_fail_io_fast()
467 i->f->terminate_rport_io(rport); in __rport_fail_io_fast()
477 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_fast_io_fail_timedout() local
479 struct Scsi_Host *shost = rport_to_shost(rport); in rport_fast_io_fail_timedout()
482 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_fast_io_fail_timedout()
484 mutex_lock(&rport->mutex); in rport_fast_io_fail_timedout()
485 if (rport->state == SRP_RPORT_BLOCKED) in rport_fast_io_fail_timedout()
486 __rport_fail_io_fast(rport); in rport_fast_io_fail_timedout()
487 mutex_unlock(&rport->mutex); in rport_fast_io_fail_timedout()
496 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_dev_loss_timedout() local
498 struct Scsi_Host *shost = rport_to_shost(rport); in rport_dev_loss_timedout()
502 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_dev_loss_timedout()
504 mutex_lock(&rport->mutex); in rport_dev_loss_timedout()
505 WARN_ON(srp_rport_set_state(rport, SRP_RPORT_LOST) != 0); in rport_dev_loss_timedout()
506 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in rport_dev_loss_timedout()
507 mutex_unlock(&rport->mutex); in rport_dev_loss_timedout()
509 i->f->rport_delete(rport); in rport_dev_loss_timedout()
512 static void __srp_start_tl_fail_timers(struct srp_rport *rport) in __srp_start_tl_fail_timers() argument
514 struct Scsi_Host *shost = rport_to_shost(rport); in __srp_start_tl_fail_timers()
517 lockdep_assert_held(&rport->mutex); in __srp_start_tl_fail_timers()
519 delay = rport->reconnect_delay; in __srp_start_tl_fail_timers()
520 fast_io_fail_tmo = rport->fast_io_fail_tmo; in __srp_start_tl_fail_timers()
521 dev_loss_tmo = rport->dev_loss_tmo; in __srp_start_tl_fail_timers()
523 rport->state); in __srp_start_tl_fail_timers()
525 if (rport->state == SRP_RPORT_LOST) in __srp_start_tl_fail_timers()
528 queue_delayed_work(system_long_wq, &rport->reconnect_work, in __srp_start_tl_fail_timers()
531 srp_rport_set_state(rport, SRP_RPORT_BLOCKED) == 0) { in __srp_start_tl_fail_timers()
533 rport->state); in __srp_start_tl_fail_timers()
537 &rport->fast_io_fail_work, in __srp_start_tl_fail_timers()
541 &rport->dev_loss_work, in __srp_start_tl_fail_timers()
553 void srp_start_tl_fail_timers(struct srp_rport *rport) in srp_start_tl_fail_timers() argument
555 mutex_lock(&rport->mutex); in srp_start_tl_fail_timers()
556 __srp_start_tl_fail_timers(rport); in srp_start_tl_fail_timers()
557 mutex_unlock(&rport->mutex); in srp_start_tl_fail_timers()
583 int srp_reconnect_rport(struct srp_rport *rport) in srp_reconnect_rport() argument
585 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_rport()
592 res = mutex_lock_interruptible(&rport->mutex); in srp_reconnect_rport()
597 res = rport->state != SRP_RPORT_LOST ? i->f->reconnect(rport) : -ENODEV; in srp_reconnect_rport()
599 dev_name(&shost->shost_gendev), rport->state, res); in srp_reconnect_rport()
601 cancel_delayed_work(&rport->fast_io_fail_work); in srp_reconnect_rport()
602 cancel_delayed_work(&rport->dev_loss_work); in srp_reconnect_rport()
604 rport->failed_reconnects = 0; in srp_reconnect_rport()
605 srp_rport_set_state(rport, SRP_RPORT_RUNNING); in srp_reconnect_rport()
617 } else if (rport->state == SRP_RPORT_RUNNING) { in srp_reconnect_rport()
623 __rport_fail_io_fast(rport); in srp_reconnect_rport()
626 __srp_start_tl_fail_timers(rport); in srp_reconnect_rport()
627 } else if (rport->state != SRP_RPORT_BLOCKED) { in srp_reconnect_rport()
631 mutex_unlock(&rport->mutex); in srp_reconnect_rport()
654 struct srp_rport *rport = shost_to_rport(shost); in srp_timed_out() local
657 return rport && rport->fast_io_fail_tmo < 0 && in srp_timed_out()
658 rport->dev_loss_tmo < 0 && in srp_timed_out()
665 struct srp_rport *rport = dev_to_rport(dev); in srp_rport_release() local
668 kfree(rport); in srp_rport_release()
717 void srp_rport_get(struct srp_rport *rport) in srp_rport_get() argument
719 get_device(&rport->dev); in srp_rport_get()
727 void srp_rport_put(struct srp_rport *rport) in srp_rport_put() argument
729 put_device(&rport->dev); in srp_rport_put()
743 struct srp_rport *rport; in srp_rport_add() local
748 rport = kzalloc(sizeof(*rport), GFP_KERNEL); in srp_rport_add()
749 if (!rport) in srp_rport_add()
752 mutex_init(&rport->mutex); in srp_rport_add()
754 device_initialize(&rport->dev); in srp_rport_add()
756 rport->dev.parent = get_device(parent); in srp_rport_add()
757 rport->dev.release = srp_rport_release; in srp_rport_add()
759 memcpy(rport->port_id, ids->port_id, sizeof(rport->port_id)); in srp_rport_add()
760 rport->roles = ids->roles; in srp_rport_add()
763 rport->reconnect_delay = i->f->reconnect_delay ? in srp_rport_add()
765 INIT_DELAYED_WORK(&rport->reconnect_work, srp_reconnect_work); in srp_rport_add()
766 rport->fast_io_fail_tmo = i->f->fast_io_fail_tmo ? in srp_rport_add()
768 rport->dev_loss_tmo = i->f->dev_loss_tmo ? *i->f->dev_loss_tmo : 60; in srp_rport_add()
769 INIT_DELAYED_WORK(&rport->fast_io_fail_work, in srp_rport_add()
771 INIT_DELAYED_WORK(&rport->dev_loss_work, rport_dev_loss_timedout); in srp_rport_add()
774 dev_set_name(&rport->dev, "port-%d:%d", shost->host_no, id); in srp_rport_add()
776 transport_setup_device(&rport->dev); in srp_rport_add()
778 ret = device_add(&rport->dev); in srp_rport_add()
780 transport_destroy_device(&rport->dev); in srp_rport_add()
781 put_device(&rport->dev); in srp_rport_add()
785 transport_add_device(&rport->dev); in srp_rport_add()
786 transport_configure_device(&rport->dev); in srp_rport_add()
788 return rport; in srp_rport_add()
798 void srp_rport_del(struct srp_rport *rport) in srp_rport_del() argument
800 struct device *dev = &rport->dev; in srp_rport_del()
838 void srp_stop_rport_timers(struct srp_rport *rport) in srp_stop_rport_timers() argument
840 mutex_lock(&rport->mutex); in srp_stop_rport_timers()
841 if (rport->state == SRP_RPORT_BLOCKED) in srp_stop_rport_timers()
842 __rport_fail_io_fast(rport); in srp_stop_rport_timers()
843 srp_rport_set_state(rport, SRP_RPORT_LOST); in srp_stop_rport_timers()
844 mutex_unlock(&rport->mutex); in srp_stop_rport_timers()
846 cancel_delayed_work_sync(&rport->reconnect_work); in srp_stop_rport_timers()
847 cancel_delayed_work_sync(&rport->fast_io_fail_work); in srp_stop_rport_timers()
848 cancel_delayed_work_sync(&rport->dev_loss_work); in srp_stop_rport_timers()