• Home
  • Raw
  • Download

Lines Matching refs:rport

126 	struct srp_rport *rport = transport_class_to_srp_rport(dev);  in show_srp_rport_id()  local
127 return sprintf(buf, SRP_PID_FMT "\n", SRP_PID(rport)); in show_srp_rport_id()
144 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_roles() local
149 if (srp_rport_role_names[i].value == rport->roles) { in show_srp_rport_roles()
162 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_delete() local
167 i->f->rport_delete(rport); in store_srp_rport_delete()
186 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_state() local
187 enum srp_rport_state state = rport->state; in show_srp_rport_state()
216 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_reconnect_delay() local
218 return srp_show_tmo(buf, rport->reconnect_delay); in show_reconnect_delay()
225 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_reconnect_delay() local
231 res = srp_tmo_valid(delay, rport->fast_io_fail_tmo, in store_reconnect_delay()
232 rport->dev_loss_tmo); in store_reconnect_delay()
236 if (rport->reconnect_delay <= 0 && delay > 0 && in store_reconnect_delay()
237 rport->state != SRP_RPORT_RUNNING) { in store_reconnect_delay()
238 queue_delayed_work(system_long_wq, &rport->reconnect_work, in store_reconnect_delay()
241 cancel_delayed_work(&rport->reconnect_work); in store_reconnect_delay()
243 rport->reconnect_delay = delay; in store_reconnect_delay()
256 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_failed_reconnects() local
258 return sprintf(buf, "%d\n", rport->failed_reconnects); in show_failed_reconnects()
267 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_fast_io_fail_tmo() local
269 return srp_show_tmo(buf, rport->fast_io_fail_tmo); in show_srp_rport_fast_io_fail_tmo()
276 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_fast_io_fail_tmo() local
283 res = srp_tmo_valid(rport->reconnect_delay, fast_io_fail_tmo, in store_srp_rport_fast_io_fail_tmo()
284 rport->dev_loss_tmo); in store_srp_rport_fast_io_fail_tmo()
287 rport->fast_io_fail_tmo = fast_io_fail_tmo; in store_srp_rport_fast_io_fail_tmo()
302 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_dev_loss_tmo() local
304 return srp_show_tmo(buf, rport->dev_loss_tmo); in show_srp_rport_dev_loss_tmo()
311 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_dev_loss_tmo() local
318 res = srp_tmo_valid(rport->reconnect_delay, rport->fast_io_fail_tmo, in store_srp_rport_dev_loss_tmo()
322 rport->dev_loss_tmo = dev_loss_tmo; in store_srp_rport_dev_loss_tmo()
333 static int srp_rport_set_state(struct srp_rport *rport, in srp_rport_set_state() argument
336 enum srp_rport_state old_state = rport->state; in srp_rport_set_state()
338 lockdep_assert_held(&rport->mutex); in srp_rport_set_state()
368 rport->state = new_state; in srp_rport_set_state()
381 struct srp_rport *rport = container_of(to_delayed_work(work), in srp_reconnect_work() local
383 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_work()
386 res = srp_reconnect_rport(rport); in srp_reconnect_work()
390 ++rport->failed_reconnects, res); in srp_reconnect_work()
391 delay = rport->reconnect_delay * in srp_reconnect_work()
392 min(100, max(1, rport->failed_reconnects - 10)); in srp_reconnect_work()
395 &rport->reconnect_work, delay * HZ); in srp_reconnect_work()
429 static void __rport_fail_io_fast(struct srp_rport *rport) in __rport_fail_io_fast() argument
431 struct Scsi_Host *shost = rport_to_shost(rport); in __rport_fail_io_fast()
434 lockdep_assert_held(&rport->mutex); in __rport_fail_io_fast()
436 if (srp_rport_set_state(rport, SRP_RPORT_FAIL_FAST)) in __rport_fail_io_fast()
438 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in __rport_fail_io_fast()
443 i->f->terminate_rport_io(rport); in __rport_fail_io_fast()
452 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_fast_io_fail_timedout() local
454 struct Scsi_Host *shost = rport_to_shost(rport); in rport_fast_io_fail_timedout()
457 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_fast_io_fail_timedout()
459 mutex_lock(&rport->mutex); in rport_fast_io_fail_timedout()
460 if (rport->state == SRP_RPORT_BLOCKED) in rport_fast_io_fail_timedout()
461 __rport_fail_io_fast(rport); in rport_fast_io_fail_timedout()
462 mutex_unlock(&rport->mutex); in rport_fast_io_fail_timedout()
471 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_dev_loss_timedout() local
473 struct Scsi_Host *shost = rport_to_shost(rport); in rport_dev_loss_timedout()
477 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_dev_loss_timedout()
479 mutex_lock(&rport->mutex); in rport_dev_loss_timedout()
480 WARN_ON(srp_rport_set_state(rport, SRP_RPORT_LOST) != 0); in rport_dev_loss_timedout()
481 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in rport_dev_loss_timedout()
482 mutex_unlock(&rport->mutex); in rport_dev_loss_timedout()
484 i->f->rport_delete(rport); in rport_dev_loss_timedout()
487 static void __srp_start_tl_fail_timers(struct srp_rport *rport) in __srp_start_tl_fail_timers() argument
489 struct Scsi_Host *shost = rport_to_shost(rport); in __srp_start_tl_fail_timers()
492 lockdep_assert_held(&rport->mutex); in __srp_start_tl_fail_timers()
494 delay = rport->reconnect_delay; in __srp_start_tl_fail_timers()
495 fast_io_fail_tmo = rport->fast_io_fail_tmo; in __srp_start_tl_fail_timers()
496 dev_loss_tmo = rport->dev_loss_tmo; in __srp_start_tl_fail_timers()
498 rport->state); in __srp_start_tl_fail_timers()
500 if (rport->state == SRP_RPORT_LOST) in __srp_start_tl_fail_timers()
503 queue_delayed_work(system_long_wq, &rport->reconnect_work, in __srp_start_tl_fail_timers()
506 srp_rport_set_state(rport, SRP_RPORT_BLOCKED) == 0) { in __srp_start_tl_fail_timers()
508 rport->state); in __srp_start_tl_fail_timers()
512 &rport->fast_io_fail_work, in __srp_start_tl_fail_timers()
516 &rport->dev_loss_work, in __srp_start_tl_fail_timers()
528 void srp_start_tl_fail_timers(struct srp_rport *rport) in srp_start_tl_fail_timers() argument
530 mutex_lock(&rport->mutex); in srp_start_tl_fail_timers()
531 __srp_start_tl_fail_timers(rport); in srp_start_tl_fail_timers()
532 mutex_unlock(&rport->mutex); in srp_start_tl_fail_timers()
558 int srp_reconnect_rport(struct srp_rport *rport) in srp_reconnect_rport() argument
560 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_rport()
567 res = mutex_lock_interruptible(&rport->mutex); in srp_reconnect_rport()
572 res = rport->state != SRP_RPORT_LOST ? i->f->reconnect(rport) : -ENODEV; in srp_reconnect_rport()
574 dev_name(&shost->shost_gendev), rport->state, res); in srp_reconnect_rport()
576 cancel_delayed_work(&rport->fast_io_fail_work); in srp_reconnect_rport()
577 cancel_delayed_work(&rport->dev_loss_work); in srp_reconnect_rport()
579 rport->failed_reconnects = 0; in srp_reconnect_rport()
580 srp_rport_set_state(rport, SRP_RPORT_RUNNING); in srp_reconnect_rport()
592 } else if (rport->state == SRP_RPORT_RUNNING) { in srp_reconnect_rport()
598 __rport_fail_io_fast(rport); in srp_reconnect_rport()
601 __srp_start_tl_fail_timers(rport); in srp_reconnect_rport()
602 } else if (rport->state != SRP_RPORT_BLOCKED) { in srp_reconnect_rport()
606 mutex_unlock(&rport->mutex); in srp_reconnect_rport()
637 struct srp_rport *rport = dev_to_rport(dev); in srp_rport_release() local
640 kfree(rport); in srp_rport_release()
689 void srp_rport_get(struct srp_rport *rport) in srp_rport_get() argument
691 get_device(&rport->dev); in srp_rport_get()
699 void srp_rport_put(struct srp_rport *rport) in srp_rport_put() argument
701 put_device(&rport->dev); in srp_rport_put()
715 struct srp_rport *rport; in srp_rport_add() local
720 rport = kzalloc(sizeof(*rport), GFP_KERNEL); in srp_rport_add()
721 if (!rport) in srp_rport_add()
724 mutex_init(&rport->mutex); in srp_rport_add()
726 device_initialize(&rport->dev); in srp_rport_add()
728 rport->dev.parent = get_device(parent); in srp_rport_add()
729 rport->dev.release = srp_rport_release; in srp_rport_add()
731 memcpy(rport->port_id, ids->port_id, sizeof(rport->port_id)); in srp_rport_add()
732 rport->roles = ids->roles; in srp_rport_add()
735 rport->reconnect_delay = i->f->reconnect_delay ? in srp_rport_add()
737 INIT_DELAYED_WORK(&rport->reconnect_work, srp_reconnect_work); in srp_rport_add()
738 rport->fast_io_fail_tmo = i->f->fast_io_fail_tmo ? in srp_rport_add()
740 rport->dev_loss_tmo = i->f->dev_loss_tmo ? *i->f->dev_loss_tmo : 60; in srp_rport_add()
741 INIT_DELAYED_WORK(&rport->fast_io_fail_work, in srp_rport_add()
743 INIT_DELAYED_WORK(&rport->dev_loss_work, rport_dev_loss_timedout); in srp_rport_add()
746 dev_set_name(&rport->dev, "port-%d:%d", shost->host_no, id); in srp_rport_add()
748 transport_setup_device(&rport->dev); in srp_rport_add()
750 ret = device_add(&rport->dev); in srp_rport_add()
752 transport_destroy_device(&rport->dev); in srp_rport_add()
753 put_device(&rport->dev); in srp_rport_add()
757 transport_add_device(&rport->dev); in srp_rport_add()
758 transport_configure_device(&rport->dev); in srp_rport_add()
760 return rport; in srp_rport_add()
770 void srp_rport_del(struct srp_rport *rport) in srp_rport_del() argument
772 struct device *dev = &rport->dev; in srp_rport_del()
810 void srp_stop_rport_timers(struct srp_rport *rport) in srp_stop_rport_timers() argument
812 mutex_lock(&rport->mutex); in srp_stop_rport_timers()
813 if (rport->state == SRP_RPORT_BLOCKED) in srp_stop_rport_timers()
814 __rport_fail_io_fast(rport); in srp_stop_rport_timers()
815 srp_rport_set_state(rport, SRP_RPORT_LOST); in srp_stop_rport_timers()
816 mutex_unlock(&rport->mutex); in srp_stop_rport_timers()
818 cancel_delayed_work_sync(&rport->reconnect_work); in srp_stop_rport_timers()
819 cancel_delayed_work_sync(&rport->fast_io_fail_work); in srp_stop_rport_timers()
820 cancel_delayed_work_sync(&rport->dev_loss_work); in srp_stop_rport_timers()