diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_fc.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_fc.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index 9252b65a13a5..7d6b3cadfb73 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -184,7 +184,7 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req) | |||
184 | range_mask = rscn_range_mask[fcp_rscn_element->addr_format]; | 184 | range_mask = rscn_range_mask[fcp_rscn_element->addr_format]; |
185 | _zfcp_fc_incoming_rscn(fsf_req, range_mask, fcp_rscn_element); | 185 | _zfcp_fc_incoming_rscn(fsf_req, range_mask, fcp_rscn_element); |
186 | } | 186 | } |
187 | schedule_work(&fsf_req->adapter->scan_work); | 187 | queue_work(fsf_req->adapter->work_queue, &fsf_req->adapter->scan_work); |
188 | } | 188 | } |
189 | 189 | ||
190 | static void zfcp_fc_incoming_wwpn(struct zfcp_fsf_req *req, u64 wwpn) | 190 | static void zfcp_fc_incoming_wwpn(struct zfcp_fsf_req *req, u64 wwpn) |
@@ -664,10 +664,12 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft, int max_entries) | |||
664 | 664 | ||
665 | /** | 665 | /** |
666 | * zfcp_fc_scan_ports - scan remote ports and attach new ports | 666 | * zfcp_fc_scan_ports - scan remote ports and attach new ports |
667 | * @adapter: pointer to struct zfcp_adapter | 667 | * @work: reference to scheduled work |
668 | */ | 668 | */ |
669 | int zfcp_fc_scan_ports(struct zfcp_adapter *adapter) | 669 | void zfcp_fc_scan_ports(struct work_struct *work) |
670 | { | 670 | { |
671 | struct zfcp_adapter *adapter = container_of(work, struct zfcp_adapter, | ||
672 | scan_work); | ||
671 | int ret, i; | 673 | int ret, i; |
672 | struct zfcp_gpn_ft *gpn_ft; | 674 | struct zfcp_gpn_ft *gpn_ft; |
673 | int chain, max_entries, buf_num, max_bytes; | 675 | int chain, max_entries, buf_num, max_bytes; |
@@ -679,17 +681,14 @@ int zfcp_fc_scan_ports(struct zfcp_adapter *adapter) | |||
679 | 681 | ||
680 | if (fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPORT && | 682 | if (fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPORT && |
681 | fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPIV) | 683 | fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPIV) |
682 | return 0; | 684 | return; |
683 | 685 | ||
684 | ret = zfcp_fc_wka_port_get(&adapter->gs->ds); | 686 | if (zfcp_fc_wka_port_get(&adapter->gs->ds)) |
685 | if (ret) | 687 | return; |
686 | return ret; | ||
687 | 688 | ||
688 | gpn_ft = zfcp_alloc_sg_env(buf_num); | 689 | gpn_ft = zfcp_alloc_sg_env(buf_num); |
689 | if (!gpn_ft) { | 690 | if (!gpn_ft) |
690 | ret = -ENOMEM; | ||
691 | goto out; | 691 | goto out; |
692 | } | ||
693 | 692 | ||
694 | for (i = 0; i < 3; i++) { | 693 | for (i = 0; i < 3; i++) { |
695 | ret = zfcp_fc_send_gpn_ft(gpn_ft, adapter, max_bytes); | 694 | ret = zfcp_fc_send_gpn_ft(gpn_ft, adapter, max_bytes); |
@@ -704,15 +703,9 @@ int zfcp_fc_scan_ports(struct zfcp_adapter *adapter) | |||
704 | zfcp_free_sg_env(gpn_ft, buf_num); | 703 | zfcp_free_sg_env(gpn_ft, buf_num); |
705 | out: | 704 | out: |
706 | zfcp_fc_wka_port_put(&adapter->gs->ds); | 705 | zfcp_fc_wka_port_put(&adapter->gs->ds); |
707 | return ret; | ||
708 | } | 706 | } |
709 | 707 | ||
710 | 708 | ||
711 | void _zfcp_fc_scan_ports_later(struct work_struct *work) | ||
712 | { | ||
713 | zfcp_fc_scan_ports(container_of(work, struct zfcp_adapter, scan_work)); | ||
714 | } | ||
715 | |||
716 | struct zfcp_els_fc_job { | 709 | struct zfcp_els_fc_job { |
717 | struct zfcp_send_els els; | 710 | struct zfcp_send_els els; |
718 | struct fc_bsg_job *job; | 711 | struct fc_bsg_job *job; |