Skip to content

Commit d9987d4

Browse files
hreineckemartinkpetersen
authored andcommitted
scsi: message: fusion: Simplify mptfc_block_error_handler()
Instead of passing in a function to mptfc_block_error_handler() we can as well return a status and call the function afterwards. Signed-off-by: Hannes Reinecke <hare@suse.de> Link: https://lore.kernel.org/r/20231002154328.43718-2-hare@suse.de Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 0bb80ec commit d9987d4

1 file changed

Lines changed: 54 additions & 29 deletions

File tree

drivers/message/fusion/mptfc.c

Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -183,73 +183,98 @@ static struct fc_function_template mptfc_transport_functions = {
183183
};
184184

185185
static int
186-
mptfc_block_error_handler(struct scsi_cmnd *SCpnt,
187-
int (*func)(struct scsi_cmnd *SCpnt),
188-
const char *caller)
186+
mptfc_block_error_handler(struct fc_rport *rport)
189187
{
190188
MPT_SCSI_HOST *hd;
191-
struct scsi_device *sdev = SCpnt->device;
192-
struct Scsi_Host *shost = sdev->host;
193-
struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
189+
struct Scsi_Host *shost = rport_to_shost(rport);
194190
unsigned long flags;
195191
int ready;
196-
MPT_ADAPTER *ioc;
192+
MPT_ADAPTER *ioc;
197193
int loops = 40; /* seconds */
198194

199-
hd = shost_priv(SCpnt->device->host);
195+
hd = shost_priv(shost);
200196
ioc = hd->ioc;
201197
spin_lock_irqsave(shost->host_lock, flags);
202198
while ((ready = fc_remote_port_chkready(rport) >> 16) == DID_IMM_RETRY
203199
|| (loops > 0 && ioc->active == 0)) {
204200
spin_unlock_irqrestore(shost->host_lock, flags);
205201
dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
206-
"mptfc_block_error_handler.%d: %d:%llu, port status is "
207-
"%x, active flag %d, deferring %s recovery.\n",
202+
"mptfc_block_error_handler.%d: %s, port status is "
203+
"%x, active flag %d, deferring recovery.\n",
208204
ioc->name, ioc->sh->host_no,
209-
SCpnt->device->id, SCpnt->device->lun,
210-
ready, ioc->active, caller));
205+
dev_name(&rport->dev), ready, ioc->active));
211206
msleep(1000);
212207
spin_lock_irqsave(shost->host_lock, flags);
213208
loops --;
214209
}
215210
spin_unlock_irqrestore(shost->host_lock, flags);
216211

217-
if (ready == DID_NO_CONNECT || !SCpnt->device->hostdata
218-
|| ioc->active == 0) {
212+
if (ready == DID_NO_CONNECT || ioc->active == 0) {
219213
dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
220-
"%s.%d: %d:%llu, failing recovery, "
221-
"port state %x, active %d, vdevice %p.\n", caller,
214+
"mpt_block_error_handler.%d: %s, failing recovery, "
215+
"port state %x, active %d.\n",
222216
ioc->name, ioc->sh->host_no,
223-
SCpnt->device->id, SCpnt->device->lun, ready,
224-
ioc->active, SCpnt->device->hostdata));
217+
dev_name(&rport->dev), ready, ioc->active));
225218
return FAILED;
226219
}
227-
dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
228-
"%s.%d: %d:%llu, executing recovery.\n", caller,
229-
ioc->name, ioc->sh->host_no,
230-
SCpnt->device->id, SCpnt->device->lun));
231-
return (*func)(SCpnt);
220+
return SUCCESS;
232221
}
233222

234223
static int
235224
mptfc_abort(struct scsi_cmnd *SCpnt)
236225
{
237-
return
238-
mptfc_block_error_handler(SCpnt, mptscsih_abort, __func__);
226+
struct Scsi_Host *shost = SCpnt->device->host;
227+
struct fc_rport *rport = starget_to_rport(scsi_target(SCpnt->device));
228+
MPT_SCSI_HOST __maybe_unused *hd = shost_priv(shost);
229+
int rtn;
230+
231+
rtn = mptfc_block_error_handler(rport);
232+
if (rtn == SUCCESS) {
233+
dfcprintk (hd->ioc, printk(MYIOC_s_DEBUG_FMT
234+
"%s.%d: %d:%llu, executing recovery.\n", __func__,
235+
hd->ioc->name, shost->host_no,
236+
SCpnt->device->id, SCpnt->device->lun));
237+
rtn = mptscsih_abort(SCpnt);
238+
}
239+
return rtn;
239240
}
240241

241242
static int
242243
mptfc_dev_reset(struct scsi_cmnd *SCpnt)
243244
{
244-
return
245-
mptfc_block_error_handler(SCpnt, mptscsih_dev_reset, __func__);
245+
struct Scsi_Host *shost = SCpnt->device->host;
246+
struct fc_rport *rport = starget_to_rport(scsi_target(SCpnt->device));
247+
MPT_SCSI_HOST __maybe_unused *hd = shost_priv(shost);
248+
int rtn;
249+
250+
rtn = mptfc_block_error_handler(rport);
251+
if (rtn == SUCCESS) {
252+
dfcprintk (hd->ioc, printk(MYIOC_s_DEBUG_FMT
253+
"%s.%d: %d:%llu, executing recovery.\n", __func__,
254+
hd->ioc->name, shost->host_no,
255+
SCpnt->device->id, SCpnt->device->lun));
256+
rtn = mptscsih_dev_reset(SCpnt);
257+
}
258+
return rtn;
246259
}
247260

248261
static int
249262
mptfc_bus_reset(struct scsi_cmnd *SCpnt)
250263
{
251-
return
252-
mptfc_block_error_handler(SCpnt, mptscsih_bus_reset, __func__);
264+
struct Scsi_Host *shost = SCpnt->device->host;
265+
struct fc_rport *rport = starget_to_rport(scsi_target(SCpnt->device));
266+
MPT_SCSI_HOST __maybe_unused *hd = shost_priv(shost);
267+
int rtn;
268+
269+
rtn = mptfc_block_error_handler(rport);
270+
if (rtn == SUCCESS) {
271+
dfcprintk (hd->ioc, printk(MYIOC_s_DEBUG_FMT
272+
"%s.%d: %d:%llu, executing recovery.\n", __func__,
273+
hd->ioc->name, shost->host_no,
274+
SCpnt->device->id, SCpnt->device->lun));
275+
rtn = mptscsih_bus_reset(SCpnt);
276+
}
277+
return rtn;
253278
}
254279

255280
static void

0 commit comments

Comments
 (0)