GNU Linux-libre 4.4.288-gnu1
[releases.git] / drivers / s390 / scsi / zfcp_scsi.c
1 /*
2  * zfcp device driver
3  *
4  * Interface to Linux SCSI midlayer.
5  *
6  * Copyright IBM Corp. 2002, 2018
7  */
8
9 #define KMSG_COMPONENT "zfcp"
10 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
11
12 #include <linux/module.h>
13 #include <linux/types.h>
14 #include <linux/slab.h>
15 #include <scsi/fc/fc_fcp.h>
16 #include <scsi/scsi_eh.h>
17 #include <linux/atomic.h>
18 #include "zfcp_ext.h"
19 #include "zfcp_dbf.h"
20 #include "zfcp_fc.h"
21 #include "zfcp_reqlist.h"
22
23 static unsigned int default_depth = 32;
24 module_param_named(queue_depth, default_depth, uint, 0600);
25 MODULE_PARM_DESC(queue_depth, "Default queue depth for new SCSI devices");
26
27 static bool enable_dif;
28 module_param_named(dif, enable_dif, bool, 0400);
29 MODULE_PARM_DESC(dif, "Enable DIF/DIX data integrity support");
30
31 static bool allow_lun_scan = 1;
32 module_param(allow_lun_scan, bool, 0600);
33 MODULE_PARM_DESC(allow_lun_scan, "For NPIV, scan and attach all storage LUNs");
34
35 static void zfcp_scsi_slave_destroy(struct scsi_device *sdev)
36 {
37         struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
38
39         /* if previous slave_alloc returned early, there is nothing to do */
40         if (!zfcp_sdev->port)
41                 return;
42
43         zfcp_erp_lun_shutdown_wait(sdev, "scssd_1");
44         put_device(&zfcp_sdev->port->dev);
45 }
46
47 static int zfcp_scsi_slave_configure(struct scsi_device *sdp)
48 {
49         if (sdp->tagged_supported)
50                 scsi_change_queue_depth(sdp, default_depth);
51         return 0;
52 }
53
54 static void zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result)
55 {
56         set_host_byte(scpnt, result);
57         zfcp_dbf_scsi_fail_send(scpnt);
58         scpnt->scsi_done(scpnt);
59 }
60
61 static
62 int zfcp_scsi_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scpnt)
63 {
64         struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
65         struct fc_rport *rport = starget_to_rport(scsi_target(scpnt->device));
66         int    status, scsi_result, ret;
67
68         /* reset the status for this request */
69         scpnt->result = 0;
70         scpnt->host_scribble = NULL;
71
72         scsi_result = fc_remote_port_chkready(rport);
73         if (unlikely(scsi_result)) {
74                 scpnt->result = scsi_result;
75                 zfcp_dbf_scsi_fail_send(scpnt);
76                 scpnt->scsi_done(scpnt);
77                 return 0;
78         }
79
80         status = atomic_read(&zfcp_sdev->status);
81         if (unlikely(status & ZFCP_STATUS_COMMON_ERP_FAILED) &&
82                      !(atomic_read(&zfcp_sdev->port->status) &
83                        ZFCP_STATUS_COMMON_ERP_FAILED)) {
84                 /* only LUN access denied, but port is good
85                  * not covered by FC transport, have to fail here */
86                 zfcp_scsi_command_fail(scpnt, DID_ERROR);
87                 return 0;
88         }
89
90         if (unlikely(!(status & ZFCP_STATUS_COMMON_UNBLOCKED))) {
91                 /* This could be
92                  * call to rport_delete pending: mimic retry from
93                  *      fc_remote_port_chkready until rport is BLOCKED
94                  */
95                 zfcp_scsi_command_fail(scpnt, DID_IMM_RETRY);
96                 return 0;
97         }
98
99         ret = zfcp_fsf_fcp_cmnd(scpnt);
100         if (unlikely(ret == -EBUSY))
101                 return SCSI_MLQUEUE_DEVICE_BUSY;
102         else if (unlikely(ret < 0))
103                 return SCSI_MLQUEUE_HOST_BUSY;
104
105         return ret;
106 }
107
108 static int zfcp_scsi_slave_alloc(struct scsi_device *sdev)
109 {
110         struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
111         struct zfcp_adapter *adapter =
112                 (struct zfcp_adapter *) sdev->host->hostdata[0];
113         struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
114         struct zfcp_port *port;
115         struct zfcp_unit *unit;
116         int npiv = adapter->connection_features & FSF_FEATURE_NPIV_MODE;
117
118         zfcp_sdev->erp_action.adapter = adapter;
119         zfcp_sdev->erp_action.sdev = sdev;
120
121         port = zfcp_get_port_by_wwpn(adapter, rport->port_name);
122         if (!port)
123                 return -ENXIO;
124
125         zfcp_sdev->erp_action.port = port;
126
127         mutex_lock(&zfcp_sysfs_port_units_mutex);
128         if (zfcp_sysfs_port_is_removing(port)) {
129                 /* port is already gone */
130                 mutex_unlock(&zfcp_sysfs_port_units_mutex);
131                 put_device(&port->dev); /* undo zfcp_get_port_by_wwpn() */
132                 return -ENXIO;
133         }
134         mutex_unlock(&zfcp_sysfs_port_units_mutex);
135
136         unit = zfcp_unit_find(port, zfcp_scsi_dev_lun(sdev));
137         if (unit)
138                 put_device(&unit->dev);
139
140         if (!unit && !(allow_lun_scan && npiv)) {
141                 put_device(&port->dev);
142                 return -ENXIO;
143         }
144
145         zfcp_sdev->port = port;
146         zfcp_sdev->latencies.write.channel.min = 0xFFFFFFFF;
147         zfcp_sdev->latencies.write.fabric.min = 0xFFFFFFFF;
148         zfcp_sdev->latencies.read.channel.min = 0xFFFFFFFF;
149         zfcp_sdev->latencies.read.fabric.min = 0xFFFFFFFF;
150         zfcp_sdev->latencies.cmd.channel.min = 0xFFFFFFFF;
151         zfcp_sdev->latencies.cmd.fabric.min = 0xFFFFFFFF;
152         spin_lock_init(&zfcp_sdev->latencies.lock);
153
154         zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_RUNNING);
155         zfcp_erp_lun_reopen(sdev, 0, "scsla_1");
156         zfcp_erp_wait(port->adapter);
157
158         return 0;
159 }
160
161 static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
162 {
163         struct Scsi_Host *scsi_host = scpnt->device->host;
164         struct zfcp_adapter *adapter =
165                 (struct zfcp_adapter *) scsi_host->hostdata[0];
166         struct zfcp_fsf_req *old_req, *abrt_req;
167         unsigned long flags;
168         unsigned long old_reqid = (unsigned long) scpnt->host_scribble;
169         int retval = SUCCESS, ret;
170         int retry = 3;
171         char *dbf_tag;
172
173         /* avoid race condition between late normal completion and abort */
174         write_lock_irqsave(&adapter->abort_lock, flags);
175
176         old_req = zfcp_reqlist_find(adapter->req_list, old_reqid);
177         if (!old_req) {
178                 write_unlock_irqrestore(&adapter->abort_lock, flags);
179                 zfcp_dbf_scsi_abort("abrt_or", scpnt, NULL);
180                 return FAILED; /* completion could be in progress */
181         }
182         old_req->data = NULL;
183
184         /* don't access old fsf_req after releasing the abort_lock */
185         write_unlock_irqrestore(&adapter->abort_lock, flags);
186
187         while (retry--) {
188                 abrt_req = zfcp_fsf_abort_fcp_cmnd(scpnt);
189                 if (abrt_req)
190                         break;
191
192                 zfcp_dbf_scsi_abort("abrt_wt", scpnt, NULL);
193                 zfcp_erp_wait(adapter);
194                 ret = fc_block_scsi_eh(scpnt);
195                 if (ret) {
196                         zfcp_dbf_scsi_abort("abrt_bl", scpnt, NULL);
197                         return ret;
198                 }
199                 if (!(atomic_read(&adapter->status) &
200                       ZFCP_STATUS_COMMON_RUNNING)) {
201                         zfcp_dbf_scsi_abort("abrt_ru", scpnt, NULL);
202                         return SUCCESS;
203                 }
204         }
205         if (!abrt_req) {
206                 zfcp_dbf_scsi_abort("abrt_ar", scpnt, NULL);
207                 return FAILED;
208         }
209
210         wait_for_completion(&abrt_req->completion);
211
212         if (abrt_req->status & ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED)
213                 dbf_tag = "abrt_ok";
214         else if (abrt_req->status & ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED)
215                 dbf_tag = "abrt_nn";
216         else {
217                 dbf_tag = "abrt_fa";
218                 retval = FAILED;
219         }
220         zfcp_dbf_scsi_abort(dbf_tag, scpnt, abrt_req);
221         zfcp_fsf_req_free(abrt_req);
222         return retval;
223 }
224
225 struct zfcp_scsi_req_filter {
226         u8 tmf_scope;
227         u32 lun_handle;
228         u32 port_handle;
229 };
230
231 static void zfcp_scsi_forget_cmnd(struct zfcp_fsf_req *old_req, void *data)
232 {
233         struct zfcp_scsi_req_filter *filter =
234                 (struct zfcp_scsi_req_filter *)data;
235
236         /* already aborted - prevent side-effects - or not a SCSI command */
237         if (old_req->data == NULL || old_req->fsf_command != FSF_QTCB_FCP_CMND)
238                 return;
239
240         /* (tmf_scope == FCP_TMF_TGT_RESET || tmf_scope == FCP_TMF_LUN_RESET) */
241         if (old_req->qtcb->header.port_handle != filter->port_handle)
242                 return;
243
244         if (filter->tmf_scope == FCP_TMF_LUN_RESET &&
245             old_req->qtcb->header.lun_handle != filter->lun_handle)
246                 return;
247
248         zfcp_dbf_scsi_nullcmnd((struct scsi_cmnd *)old_req->data, old_req);
249         old_req->data = NULL;
250 }
251
252 static void zfcp_scsi_forget_cmnds(struct zfcp_scsi_dev *zsdev, u8 tm_flags)
253 {
254         struct zfcp_adapter *adapter = zsdev->port->adapter;
255         struct zfcp_scsi_req_filter filter = {
256                 .tmf_scope = FCP_TMF_TGT_RESET,
257                 .port_handle = zsdev->port->handle,
258         };
259         unsigned long flags;
260
261         if (tm_flags == FCP_TMF_LUN_RESET) {
262                 filter.tmf_scope = FCP_TMF_LUN_RESET;
263                 filter.lun_handle = zsdev->lun_handle;
264         }
265
266         /*
267          * abort_lock secures against other processings - in the abort-function
268          * and normal cmnd-handler - of (struct zfcp_fsf_req *)->data
269          */
270         write_lock_irqsave(&adapter->abort_lock, flags);
271         zfcp_reqlist_apply_for_all(adapter->req_list, zfcp_scsi_forget_cmnd,
272                                    &filter);
273         write_unlock_irqrestore(&adapter->abort_lock, flags);
274 }
275
276 static int zfcp_task_mgmt_function(struct scsi_cmnd *scpnt, u8 tm_flags)
277 {
278         struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
279         struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
280         struct zfcp_fsf_req *fsf_req = NULL;
281         int retval = SUCCESS, ret;
282         int retry = 3;
283
284         while (retry--) {
285                 fsf_req = zfcp_fsf_fcp_task_mgmt(scpnt, tm_flags);
286                 if (fsf_req)
287                         break;
288
289                 zfcp_dbf_scsi_devreset("wait", scpnt, tm_flags, NULL);
290                 zfcp_erp_wait(adapter);
291                 ret = fc_block_scsi_eh(scpnt);
292                 if (ret) {
293                         zfcp_dbf_scsi_devreset("fiof", scpnt, tm_flags, NULL);
294                         return ret;
295                 }
296
297                 if (!(atomic_read(&adapter->status) &
298                       ZFCP_STATUS_COMMON_RUNNING)) {
299                         zfcp_dbf_scsi_devreset("nres", scpnt, tm_flags, NULL);
300                         return SUCCESS;
301                 }
302         }
303         if (!fsf_req) {
304                 zfcp_dbf_scsi_devreset("reqf", scpnt, tm_flags, NULL);
305                 return FAILED;
306         }
307
308         wait_for_completion(&fsf_req->completion);
309
310         if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCFAILED) {
311                 zfcp_dbf_scsi_devreset("fail", scpnt, tm_flags, fsf_req);
312                 retval = FAILED;
313         } else {
314                 zfcp_dbf_scsi_devreset("okay", scpnt, tm_flags, fsf_req);
315                 zfcp_scsi_forget_cmnds(zfcp_sdev, tm_flags);
316         }
317
318         zfcp_fsf_req_free(fsf_req);
319         return retval;
320 }
321
322 static int zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt)
323 {
324         return zfcp_task_mgmt_function(scpnt, FCP_TMF_LUN_RESET);
325 }
326
327 static int zfcp_scsi_eh_target_reset_handler(struct scsi_cmnd *scpnt)
328 {
329         return zfcp_task_mgmt_function(scpnt, FCP_TMF_TGT_RESET);
330 }
331
332 static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
333 {
334         struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
335         struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
336         int ret = SUCCESS, fc_ret;
337
338         if (!(adapter->connection_features & FSF_FEATURE_NPIV_MODE)) {
339                 zfcp_erp_port_forced_reopen_all(adapter, 0, "schrh_p");
340                 zfcp_erp_wait(adapter);
341         }
342         zfcp_erp_adapter_reopen(adapter, 0, "schrh_1");
343         zfcp_erp_wait(adapter);
344         fc_ret = fc_block_scsi_eh(scpnt);
345         if (fc_ret)
346                 ret = fc_ret;
347
348         zfcp_dbf_scsi_eh("schrh_r", adapter, ~0, ret);
349         return ret;
350 }
351
352 struct scsi_transport_template *zfcp_scsi_transport_template;
353
354 static struct scsi_host_template zfcp_scsi_host_template = {
355         .module                  = THIS_MODULE,
356         .name                    = "zfcp",
357         .queuecommand            = zfcp_scsi_queuecommand,
358         .eh_abort_handler        = zfcp_scsi_eh_abort_handler,
359         .eh_device_reset_handler = zfcp_scsi_eh_device_reset_handler,
360         .eh_target_reset_handler = zfcp_scsi_eh_target_reset_handler,
361         .eh_host_reset_handler   = zfcp_scsi_eh_host_reset_handler,
362         .slave_alloc             = zfcp_scsi_slave_alloc,
363         .slave_configure         = zfcp_scsi_slave_configure,
364         .slave_destroy           = zfcp_scsi_slave_destroy,
365         .change_queue_depth      = scsi_change_queue_depth,
366         .proc_name               = "zfcp",
367         .can_queue               = 4096,
368         .this_id                 = -1,
369         .sg_tablesize            = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
370                                      * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2),
371                                    /* GCD, adjusted later */
372         .max_sectors             = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
373                                      * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2) * 8,
374                                    /* GCD, adjusted later */
375         .dma_boundary            = ZFCP_QDIO_SBALE_LEN - 1,
376         .use_clustering          = 1,
377         .shost_attrs             = zfcp_sysfs_shost_attrs,
378         .sdev_attrs              = zfcp_sysfs_sdev_attrs,
379         .track_queue_depth       = 1,
380 };
381
382 /**
383  * zfcp_scsi_adapter_register - Register SCSI and FC host with SCSI midlayer
384  * @adapter: The zfcp adapter to register with the SCSI midlayer
385  */
386 int zfcp_scsi_adapter_register(struct zfcp_adapter *adapter)
387 {
388         struct ccw_dev_id dev_id;
389
390         if (adapter->scsi_host)
391                 return 0;
392
393         ccw_device_get_id(adapter->ccw_device, &dev_id);
394         /* register adapter as SCSI host with mid layer of SCSI stack */
395         adapter->scsi_host = scsi_host_alloc(&zfcp_scsi_host_template,
396                                              sizeof (struct zfcp_adapter *));
397         if (!adapter->scsi_host) {
398                 dev_err(&adapter->ccw_device->dev,
399                         "Registering the FCP device with the "
400                         "SCSI stack failed\n");
401                 return -EIO;
402         }
403
404         /* tell the SCSI stack some characteristics of this adapter */
405         adapter->scsi_host->max_id = 511;
406         adapter->scsi_host->max_lun = 0xFFFFFFFF;
407         adapter->scsi_host->max_channel = 0;
408         adapter->scsi_host->unique_id = dev_id.devno;
409         adapter->scsi_host->max_cmd_len = 16; /* in struct fcp_cmnd */
410         adapter->scsi_host->transportt = zfcp_scsi_transport_template;
411
412         adapter->scsi_host->hostdata[0] = (unsigned long) adapter;
413
414         if (scsi_add_host(adapter->scsi_host, &adapter->ccw_device->dev)) {
415                 scsi_host_put(adapter->scsi_host);
416                 return -EIO;
417         }
418
419         return 0;
420 }
421
422 /**
423  * zfcp_scsi_adapter_unregister - Unregister SCSI and FC host from SCSI midlayer
424  * @adapter: The zfcp adapter to unregister.
425  */
426 void zfcp_scsi_adapter_unregister(struct zfcp_adapter *adapter)
427 {
428         struct Scsi_Host *shost;
429         struct zfcp_port *port;
430
431         shost = adapter->scsi_host;
432         if (!shost)
433                 return;
434
435         read_lock_irq(&adapter->port_list_lock);
436         list_for_each_entry(port, &adapter->port_list, list)
437                 port->rport = NULL;
438         read_unlock_irq(&adapter->port_list_lock);
439
440         fc_remove_host(shost);
441         scsi_remove_host(shost);
442         scsi_host_put(shost);
443         adapter->scsi_host = NULL;
444 }
445
446 static struct fc_host_statistics*
447 zfcp_init_fc_host_stats(struct zfcp_adapter *adapter)
448 {
449         struct fc_host_statistics *fc_stats;
450
451         if (!adapter->fc_stats) {
452                 fc_stats = kmalloc(sizeof(*fc_stats), GFP_KERNEL);
453                 if (!fc_stats)
454                         return NULL;
455                 adapter->fc_stats = fc_stats; /* freed in adapter_release */
456         }
457         memset(adapter->fc_stats, 0, sizeof(*adapter->fc_stats));
458         return adapter->fc_stats;
459 }
460
461 static void zfcp_adjust_fc_host_stats(struct fc_host_statistics *fc_stats,
462                                       struct fsf_qtcb_bottom_port *data,
463                                       struct fsf_qtcb_bottom_port *old)
464 {
465         fc_stats->seconds_since_last_reset =
466                 data->seconds_since_last_reset - old->seconds_since_last_reset;
467         fc_stats->tx_frames = data->tx_frames - old->tx_frames;
468         fc_stats->tx_words = data->tx_words - old->tx_words;
469         fc_stats->rx_frames = data->rx_frames - old->rx_frames;
470         fc_stats->rx_words = data->rx_words - old->rx_words;
471         fc_stats->lip_count = data->lip - old->lip;
472         fc_stats->nos_count = data->nos - old->nos;
473         fc_stats->error_frames = data->error_frames - old->error_frames;
474         fc_stats->dumped_frames = data->dumped_frames - old->dumped_frames;
475         fc_stats->link_failure_count = data->link_failure - old->link_failure;
476         fc_stats->loss_of_sync_count = data->loss_of_sync - old->loss_of_sync;
477         fc_stats->loss_of_signal_count =
478                 data->loss_of_signal - old->loss_of_signal;
479         fc_stats->prim_seq_protocol_err_count =
480                 data->psp_error_counts - old->psp_error_counts;
481         fc_stats->invalid_tx_word_count =
482                 data->invalid_tx_words - old->invalid_tx_words;
483         fc_stats->invalid_crc_count = data->invalid_crcs - old->invalid_crcs;
484         fc_stats->fcp_input_requests =
485                 data->input_requests - old->input_requests;
486         fc_stats->fcp_output_requests =
487                 data->output_requests - old->output_requests;
488         fc_stats->fcp_control_requests =
489                 data->control_requests - old->control_requests;
490         fc_stats->fcp_input_megabytes = data->input_mb - old->input_mb;
491         fc_stats->fcp_output_megabytes = data->output_mb - old->output_mb;
492 }
493
494 static void zfcp_set_fc_host_stats(struct fc_host_statistics *fc_stats,
495                                    struct fsf_qtcb_bottom_port *data)
496 {
497         fc_stats->seconds_since_last_reset = data->seconds_since_last_reset;
498         fc_stats->tx_frames = data->tx_frames;
499         fc_stats->tx_words = data->tx_words;
500         fc_stats->rx_frames = data->rx_frames;
501         fc_stats->rx_words = data->rx_words;
502         fc_stats->lip_count = data->lip;
503         fc_stats->nos_count = data->nos;
504         fc_stats->error_frames = data->error_frames;
505         fc_stats->dumped_frames = data->dumped_frames;
506         fc_stats->link_failure_count = data->link_failure;
507         fc_stats->loss_of_sync_count = data->loss_of_sync;
508         fc_stats->loss_of_signal_count = data->loss_of_signal;
509         fc_stats->prim_seq_protocol_err_count = data->psp_error_counts;
510         fc_stats->invalid_tx_word_count = data->invalid_tx_words;
511         fc_stats->invalid_crc_count = data->invalid_crcs;
512         fc_stats->fcp_input_requests = data->input_requests;
513         fc_stats->fcp_output_requests = data->output_requests;
514         fc_stats->fcp_control_requests = data->control_requests;
515         fc_stats->fcp_input_megabytes = data->input_mb;
516         fc_stats->fcp_output_megabytes = data->output_mb;
517 }
518
519 static struct fc_host_statistics *zfcp_get_fc_host_stats(struct Scsi_Host *host)
520 {
521         struct zfcp_adapter *adapter;
522         struct fc_host_statistics *fc_stats;
523         struct fsf_qtcb_bottom_port *data;
524         int ret;
525
526         adapter = (struct zfcp_adapter *)host->hostdata[0];
527         fc_stats = zfcp_init_fc_host_stats(adapter);
528         if (!fc_stats)
529                 return NULL;
530
531         data = kzalloc(sizeof(*data), GFP_KERNEL);
532         if (!data)
533                 return NULL;
534
535         ret = zfcp_fsf_exchange_port_data_sync(adapter->qdio, data);
536         if (ret) {
537                 kfree(data);
538                 return NULL;
539         }
540
541         if (adapter->stats_reset &&
542             ((jiffies/HZ - adapter->stats_reset) <
543              data->seconds_since_last_reset))
544                 zfcp_adjust_fc_host_stats(fc_stats, data,
545                                           adapter->stats_reset_data);
546         else
547                 zfcp_set_fc_host_stats(fc_stats, data);
548
549         kfree(data);
550         return fc_stats;
551 }
552
553 static void zfcp_reset_fc_host_stats(struct Scsi_Host *shost)
554 {
555         struct zfcp_adapter *adapter;
556         struct fsf_qtcb_bottom_port *data;
557         int ret;
558
559         adapter = (struct zfcp_adapter *)shost->hostdata[0];
560         data = kzalloc(sizeof(*data), GFP_KERNEL);
561         if (!data)
562                 return;
563
564         ret = zfcp_fsf_exchange_port_data_sync(adapter->qdio, data);
565         if (ret)
566                 kfree(data);
567         else {
568                 adapter->stats_reset = jiffies/HZ;
569                 kfree(adapter->stats_reset_data);
570                 adapter->stats_reset_data = data; /* finally freed in
571                                                      adapter_release */
572         }
573 }
574
575 static void zfcp_get_host_port_state(struct Scsi_Host *shost)
576 {
577         struct zfcp_adapter *adapter =
578                 (struct zfcp_adapter *)shost->hostdata[0];
579         int status = atomic_read(&adapter->status);
580
581         if ((status & ZFCP_STATUS_COMMON_RUNNING) &&
582             !(status & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED))
583                 fc_host_port_state(shost) = FC_PORTSTATE_ONLINE;
584         else if (status & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED)
585                 fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN;
586         else if (status & ZFCP_STATUS_COMMON_ERP_FAILED)
587                 fc_host_port_state(shost) = FC_PORTSTATE_ERROR;
588         else
589                 fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN;
590 }
591
592 static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout)
593 {
594         rport->dev_loss_tmo = timeout;
595 }
596
597 /**
598  * zfcp_scsi_terminate_rport_io - Terminate all I/O on a rport
599  * @rport: The FC rport where to teminate I/O
600  *
601  * Abort all pending SCSI commands for a port by closing the
602  * port. Using a reopen avoids a conflict with a shutdown
603  * overwriting a reopen. The "forced" ensures that a disappeared port
604  * is not opened again as valid due to the cached plogi data in
605  * non-NPIV mode.
606  */
607 static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport)
608 {
609         struct zfcp_port *port;
610         struct Scsi_Host *shost = rport_to_shost(rport);
611         struct zfcp_adapter *adapter =
612                 (struct zfcp_adapter *)shost->hostdata[0];
613
614         port = zfcp_get_port_by_wwpn(adapter, rport->port_name);
615
616         if (port) {
617                 zfcp_erp_port_forced_reopen(port, 0, "sctrpi1");
618                 put_device(&port->dev);
619         } else {
620                 zfcp_erp_port_forced_no_port_dbf(
621                         "sctrpin", adapter,
622                         rport->port_name /* zfcp_scsi_rport_register */,
623                         rport->port_id /* zfcp_scsi_rport_register */);
624         }
625 }
626
627 static void zfcp_scsi_rport_register(struct zfcp_port *port)
628 {
629         struct fc_rport_identifiers ids;
630         struct fc_rport *rport;
631
632         if (port->rport)
633                 return;
634
635         ids.node_name = port->wwnn;
636         ids.port_name = port->wwpn;
637         ids.port_id = port->d_id;
638         ids.roles = FC_RPORT_ROLE_FCP_TARGET;
639
640         zfcp_dbf_rec_trig_lock("scpaddy", port->adapter, port, NULL,
641                                ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD,
642                                ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD);
643         rport = fc_remote_port_add(port->adapter->scsi_host, 0, &ids);
644         if (!rport) {
645                 dev_err(&port->adapter->ccw_device->dev,
646                         "Registering port 0x%016Lx failed\n",
647                         (unsigned long long)port->wwpn);
648                 return;
649         }
650
651         rport->maxframe_size = port->maxframe_size;
652         rport->supported_classes = port->supported_classes;
653         port->rport = rport;
654         port->starget_id = rport->scsi_target_id;
655
656         zfcp_unit_queue_scsi_scan(port);
657 }
658
659 static void zfcp_scsi_rport_block(struct zfcp_port *port)
660 {
661         struct fc_rport *rport = port->rport;
662
663         if (rport) {
664                 zfcp_dbf_rec_trig_lock("scpdely", port->adapter, port, NULL,
665                                        ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL,
666                                        ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL);
667                 fc_remote_port_delete(rport);
668                 port->rport = NULL;
669         }
670 }
671
672 void zfcp_scsi_schedule_rport_register(struct zfcp_port *port)
673 {
674         get_device(&port->dev);
675         port->rport_task = RPORT_ADD;
676
677         if (!queue_work(port->adapter->work_queue, &port->rport_work))
678                 put_device(&port->dev);
679 }
680
681 void zfcp_scsi_schedule_rport_block(struct zfcp_port *port)
682 {
683         get_device(&port->dev);
684         port->rport_task = RPORT_DEL;
685
686         if (port->rport && queue_work(port->adapter->work_queue,
687                                       &port->rport_work))
688                 return;
689
690         put_device(&port->dev);
691 }
692
693 void zfcp_scsi_schedule_rports_block(struct zfcp_adapter *adapter)
694 {
695         unsigned long flags;
696         struct zfcp_port *port;
697
698         read_lock_irqsave(&adapter->port_list_lock, flags);
699         list_for_each_entry(port, &adapter->port_list, list)
700                 zfcp_scsi_schedule_rport_block(port);
701         read_unlock_irqrestore(&adapter->port_list_lock, flags);
702 }
703
704 void zfcp_scsi_rport_work(struct work_struct *work)
705 {
706         struct zfcp_port *port = container_of(work, struct zfcp_port,
707                                               rport_work);
708
709         while (port->rport_task) {
710                 if (port->rport_task == RPORT_ADD) {
711                         port->rport_task = RPORT_NONE;
712                         zfcp_scsi_rport_register(port);
713                 } else {
714                         port->rport_task = RPORT_NONE;
715                         zfcp_scsi_rport_block(port);
716                 }
717         }
718
719         put_device(&port->dev);
720 }
721
722 /**
723  * zfcp_scsi_set_prot - Configure DIF/DIX support in scsi_host
724  * @adapter: The adapter where to configure DIF/DIX for the SCSI host
725  */
726 void zfcp_scsi_set_prot(struct zfcp_adapter *adapter)
727 {
728         unsigned int mask = 0;
729         unsigned int data_div;
730         struct Scsi_Host *shost = adapter->scsi_host;
731
732         data_div = atomic_read(&adapter->status) &
733                    ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED;
734
735         if (enable_dif &&
736             adapter->adapter_features & FSF_FEATURE_DIF_PROT_TYPE1)
737                 mask |= SHOST_DIF_TYPE1_PROTECTION;
738
739         if (enable_dif && data_div &&
740             adapter->adapter_features & FSF_FEATURE_DIX_PROT_TCPIP) {
741                 mask |= SHOST_DIX_TYPE1_PROTECTION;
742                 scsi_host_set_guard(shost, SHOST_DIX_GUARD_IP);
743                 shost->sg_prot_tablesize = adapter->qdio->max_sbale_per_req / 2;
744                 shost->sg_tablesize = adapter->qdio->max_sbale_per_req / 2;
745                 shost->max_sectors = shost->sg_tablesize * 8;
746         }
747
748         scsi_host_set_prot(shost, mask);
749 }
750
751 /**
752  * zfcp_scsi_dif_sense_error - Report DIF/DIX error as driver sense error
753  * @scmd: The SCSI command to report the error for
754  * @ascq: The ASCQ to put in the sense buffer
755  *
756  * See the error handling in sd_done for the sense codes used here.
757  * Set DID_SOFT_ERROR to retry the request, if possible.
758  */
759 void zfcp_scsi_dif_sense_error(struct scsi_cmnd *scmd, int ascq)
760 {
761         scsi_build_sense_buffer(1, scmd->sense_buffer,
762                                 ILLEGAL_REQUEST, 0x10, ascq);
763         set_driver_byte(scmd, DRIVER_SENSE);
764         scmd->result |= SAM_STAT_CHECK_CONDITION;
765         set_host_byte(scmd, DID_SOFT_ERROR);
766 }
767
768 struct fc_function_template zfcp_transport_functions = {
769         .show_starget_port_id = 1,
770         .show_starget_port_name = 1,
771         .show_starget_node_name = 1,
772         .show_rport_supported_classes = 1,
773         .show_rport_maxframe_size = 1,
774         .show_rport_dev_loss_tmo = 1,
775         .show_host_node_name = 1,
776         .show_host_port_name = 1,
777         .show_host_permanent_port_name = 1,
778         .show_host_supported_classes = 1,
779         .show_host_supported_fc4s = 1,
780         .show_host_supported_speeds = 1,
781         .show_host_maxframe_size = 1,
782         .show_host_serial_number = 1,
783         .get_fc_host_stats = zfcp_get_fc_host_stats,
784         .reset_fc_host_stats = zfcp_reset_fc_host_stats,
785         .set_rport_dev_loss_tmo = zfcp_set_rport_dev_loss_tmo,
786         .get_host_port_state = zfcp_get_host_port_state,
787         .terminate_rport_io = zfcp_scsi_terminate_rport_io,
788         .show_host_port_state = 1,
789         .show_host_active_fc4s = 1,
790         .bsg_request = zfcp_fc_exec_bsg_job,
791         .bsg_timeout = zfcp_fc_timeout_bsg_job,
792         /* no functions registered for following dynamic attributes but
793            directly set by LLDD */
794         .show_host_port_type = 1,
795         .show_host_symbolic_name = 1,
796         .show_host_speed = 1,
797         .show_host_port_id = 1,
798         .dd_bsg_size = sizeof(struct zfcp_fsf_ct_els),
799 };