• Home
  • Raw
  • Download

Lines Matching refs:rport

138 	struct srp_rport *rport = transport_class_to_srp_rport(dev);  in show_srp_rport_id()  local
139 return sprintf(buf, "%16phC\n", rport->port_id); in show_srp_rport_id()
156 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_roles() local
161 if (srp_rport_role_names[i].value == rport->roles) { in show_srp_rport_roles()
174 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_delete() local
179 i->f->rport_delete(rport); in store_srp_rport_delete()
198 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_state() local
199 enum srp_rport_state state = rport->state; in show_srp_rport_state()
229 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_reconnect_delay() local
231 return srp_show_tmo(buf, rport->reconnect_delay); in show_reconnect_delay()
238 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_reconnect_delay() local
244 res = srp_tmo_valid(delay, rport->fast_io_fail_tmo, in store_reconnect_delay()
245 rport->dev_loss_tmo); in store_reconnect_delay()
249 if (rport->reconnect_delay <= 0 && delay > 0 && in store_reconnect_delay()
250 rport->state != SRP_RPORT_RUNNING) { in store_reconnect_delay()
251 queue_delayed_work(system_long_wq, &rport->reconnect_work, in store_reconnect_delay()
254 cancel_delayed_work(&rport->reconnect_work); in store_reconnect_delay()
256 rport->reconnect_delay = delay; in store_reconnect_delay()
269 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_failed_reconnects() local
271 return sprintf(buf, "%d\n", rport->failed_reconnects); in show_failed_reconnects()
280 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_fast_io_fail_tmo() local
282 return srp_show_tmo(buf, rport->fast_io_fail_tmo); in show_srp_rport_fast_io_fail_tmo()
289 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_fast_io_fail_tmo() local
296 res = srp_tmo_valid(rport->reconnect_delay, fast_io_fail_tmo, in store_srp_rport_fast_io_fail_tmo()
297 rport->dev_loss_tmo); in store_srp_rport_fast_io_fail_tmo()
300 rport->fast_io_fail_tmo = fast_io_fail_tmo; in store_srp_rport_fast_io_fail_tmo()
315 struct srp_rport *rport = transport_class_to_srp_rport(dev); in show_srp_rport_dev_loss_tmo() local
317 return srp_show_tmo(buf, rport->dev_loss_tmo); in show_srp_rport_dev_loss_tmo()
324 struct srp_rport *rport = transport_class_to_srp_rport(dev); in store_srp_rport_dev_loss_tmo() local
331 res = srp_tmo_valid(rport->reconnect_delay, rport->fast_io_fail_tmo, in store_srp_rport_dev_loss_tmo()
335 rport->dev_loss_tmo = dev_loss_tmo; in store_srp_rport_dev_loss_tmo()
346 static int srp_rport_set_state(struct srp_rport *rport, in srp_rport_set_state() argument
349 enum srp_rport_state old_state = rport->state; in srp_rport_set_state()
351 lockdep_assert_held(&rport->mutex); in srp_rport_set_state()
381 rport->state = new_state; in srp_rport_set_state()
394 struct srp_rport *rport = container_of(to_delayed_work(work), in srp_reconnect_work() local
396 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_work()
399 res = srp_reconnect_rport(rport); in srp_reconnect_work()
403 ++rport->failed_reconnects, res); in srp_reconnect_work()
404 delay = rport->reconnect_delay * in srp_reconnect_work()
405 min(100, max(1, rport->failed_reconnects - 10)); in srp_reconnect_work()
408 &rport->reconnect_work, delay * HZ); in srp_reconnect_work()
412 static void __rport_fail_io_fast(struct srp_rport *rport) in __rport_fail_io_fast() argument
414 struct Scsi_Host *shost = rport_to_shost(rport); in __rport_fail_io_fast()
417 lockdep_assert_held(&rport->mutex); in __rport_fail_io_fast()
419 if (srp_rport_set_state(rport, SRP_RPORT_FAIL_FAST)) in __rport_fail_io_fast()
425 scsi_target_block(rport->dev.parent); in __rport_fail_io_fast()
426 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in __rport_fail_io_fast()
431 i->f->terminate_rport_io(rport); in __rport_fail_io_fast()
440 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_fast_io_fail_timedout() local
442 struct Scsi_Host *shost = rport_to_shost(rport); in rport_fast_io_fail_timedout()
445 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_fast_io_fail_timedout()
447 mutex_lock(&rport->mutex); in rport_fast_io_fail_timedout()
448 if (rport->state == SRP_RPORT_BLOCKED) in rport_fast_io_fail_timedout()
449 __rport_fail_io_fast(rport); in rport_fast_io_fail_timedout()
450 mutex_unlock(&rport->mutex); in rport_fast_io_fail_timedout()
459 struct srp_rport *rport = container_of(to_delayed_work(work), in rport_dev_loss_timedout() local
461 struct Scsi_Host *shost = rport_to_shost(rport); in rport_dev_loss_timedout()
465 dev_name(&rport->dev), dev_name(&shost->shost_gendev)); in rport_dev_loss_timedout()
467 mutex_lock(&rport->mutex); in rport_dev_loss_timedout()
468 WARN_ON(srp_rport_set_state(rport, SRP_RPORT_LOST) != 0); in rport_dev_loss_timedout()
469 scsi_target_unblock(rport->dev.parent, SDEV_TRANSPORT_OFFLINE); in rport_dev_loss_timedout()
470 mutex_unlock(&rport->mutex); in rport_dev_loss_timedout()
472 i->f->rport_delete(rport); in rport_dev_loss_timedout()
475 static void __srp_start_tl_fail_timers(struct srp_rport *rport) in __srp_start_tl_fail_timers() argument
477 struct Scsi_Host *shost = rport_to_shost(rport); in __srp_start_tl_fail_timers()
480 lockdep_assert_held(&rport->mutex); in __srp_start_tl_fail_timers()
482 delay = rport->reconnect_delay; in __srp_start_tl_fail_timers()
483 fast_io_fail_tmo = rport->fast_io_fail_tmo; in __srp_start_tl_fail_timers()
484 dev_loss_tmo = rport->dev_loss_tmo; in __srp_start_tl_fail_timers()
486 rport->state); in __srp_start_tl_fail_timers()
488 if (rport->state == SRP_RPORT_LOST) in __srp_start_tl_fail_timers()
491 queue_delayed_work(system_long_wq, &rport->reconnect_work, in __srp_start_tl_fail_timers()
494 srp_rport_set_state(rport, SRP_RPORT_BLOCKED) == 0) { in __srp_start_tl_fail_timers()
496 rport->state); in __srp_start_tl_fail_timers()
500 &rport->fast_io_fail_work, in __srp_start_tl_fail_timers()
504 &rport->dev_loss_work, in __srp_start_tl_fail_timers()
516 void srp_start_tl_fail_timers(struct srp_rport *rport) in srp_start_tl_fail_timers() argument
518 mutex_lock(&rport->mutex); in srp_start_tl_fail_timers()
519 __srp_start_tl_fail_timers(rport); in srp_start_tl_fail_timers()
520 mutex_unlock(&rport->mutex); in srp_start_tl_fail_timers()
546 int srp_reconnect_rport(struct srp_rport *rport) in srp_reconnect_rport() argument
548 struct Scsi_Host *shost = rport_to_shost(rport); in srp_reconnect_rport()
555 res = mutex_lock_interruptible(&rport->mutex); in srp_reconnect_rport()
559 res = rport->state != SRP_RPORT_LOST ? i->f->reconnect(rport) : -ENODEV; in srp_reconnect_rport()
561 dev_name(&shost->shost_gendev), rport->state, res); in srp_reconnect_rport()
563 cancel_delayed_work(&rport->fast_io_fail_work); in srp_reconnect_rport()
564 cancel_delayed_work(&rport->dev_loss_work); in srp_reconnect_rport()
566 rport->failed_reconnects = 0; in srp_reconnect_rport()
567 srp_rport_set_state(rport, SRP_RPORT_RUNNING); in srp_reconnect_rport()
580 } else if (rport->state == SRP_RPORT_RUNNING) { in srp_reconnect_rport()
586 __rport_fail_io_fast(rport); in srp_reconnect_rport()
589 __srp_start_tl_fail_timers(rport); in srp_reconnect_rport()
590 } else if (rport->state != SRP_RPORT_BLOCKED) { in srp_reconnect_rport()
594 mutex_unlock(&rport->mutex); in srp_reconnect_rport()
617 struct srp_rport *rport = shost_to_rport(shost); in srp_timed_out() local
620 return rport && rport->fast_io_fail_tmo < 0 && in srp_timed_out()
621 rport->dev_loss_tmo < 0 && in srp_timed_out()
629 struct srp_rport *rport = dev_to_rport(dev); in srp_rport_release() local
632 kfree(rport); in srp_rport_release()
681 void srp_rport_get(struct srp_rport *rport) in srp_rport_get() argument
683 get_device(&rport->dev); in srp_rport_get()
691 void srp_rport_put(struct srp_rport *rport) in srp_rport_put() argument
693 put_device(&rport->dev); in srp_rport_put()
707 struct srp_rport *rport; in srp_rport_add() local
712 rport = kzalloc(sizeof(*rport), GFP_KERNEL); in srp_rport_add()
713 if (!rport) in srp_rport_add()
716 mutex_init(&rport->mutex); in srp_rport_add()
718 device_initialize(&rport->dev); in srp_rport_add()
720 rport->dev.parent = get_device(parent); in srp_rport_add()
721 rport->dev.release = srp_rport_release; in srp_rport_add()
723 memcpy(rport->port_id, ids->port_id, sizeof(rport->port_id)); in srp_rport_add()
724 rport->roles = ids->roles; in srp_rport_add()
727 rport->reconnect_delay = i->f->reconnect_delay ? in srp_rport_add()
729 INIT_DELAYED_WORK(&rport->reconnect_work, srp_reconnect_work); in srp_rport_add()
730 rport->fast_io_fail_tmo = i->f->fast_io_fail_tmo ? in srp_rport_add()
732 rport->dev_loss_tmo = i->f->dev_loss_tmo ? *i->f->dev_loss_tmo : 60; in srp_rport_add()
733 INIT_DELAYED_WORK(&rport->fast_io_fail_work, in srp_rport_add()
735 INIT_DELAYED_WORK(&rport->dev_loss_work, rport_dev_loss_timedout); in srp_rport_add()
738 dev_set_name(&rport->dev, "port-%d:%d", shost->host_no, id); in srp_rport_add()
740 transport_setup_device(&rport->dev); in srp_rport_add()
742 ret = device_add(&rport->dev); in srp_rport_add()
744 transport_destroy_device(&rport->dev); in srp_rport_add()
745 put_device(&rport->dev); in srp_rport_add()
749 transport_add_device(&rport->dev); in srp_rport_add()
750 transport_configure_device(&rport->dev); in srp_rport_add()
752 return rport; in srp_rport_add()
762 void srp_rport_del(struct srp_rport *rport) in srp_rport_del() argument
764 struct device *dev = &rport->dev; in srp_rport_del()
802 void srp_stop_rport_timers(struct srp_rport *rport) in srp_stop_rport_timers() argument
804 mutex_lock(&rport->mutex); in srp_stop_rport_timers()
805 if (rport->state == SRP_RPORT_BLOCKED) in srp_stop_rport_timers()
806 __rport_fail_io_fast(rport); in srp_stop_rport_timers()
807 srp_rport_set_state(rport, SRP_RPORT_LOST); in srp_stop_rport_timers()
808 mutex_unlock(&rport->mutex); in srp_stop_rport_timers()
810 cancel_delayed_work_sync(&rport->reconnect_work); in srp_stop_rport_timers()
811 cancel_delayed_work_sync(&rport->fast_io_fail_work); in srp_stop_rport_timers()
812 cancel_delayed_work_sync(&rport->dev_loss_work); in srp_stop_rport_timers()