* [hare-scsi-devel:reserved-tags.v4 4/22] drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336)
@ 2020-07-07 14:30 ` Dan Carpenter
0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2020-07-07 14:30 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 20239 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git reserved-tags.v4
head: 2a2c3155f8291828f41350cf90a0c8a37cdd263c
commit: 3b695cc5f04ad6099906a94408410af8078704bf [4/22] fnic: use internal commands
config: i386-randconfig-m021-20200705 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336)
# https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=3b695cc5f04ad6099906a94408410af8078704bf
git remote add hare-scsi-devel https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
git remote update hare-scsi-devel
git checkout 3b695cc5f04ad6099906a94408410af8078704bf
vim +/reset_sc +2500 drivers/scsi/fnic/fnic_scsi.c
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2290 int fnic_device_reset(struct scsi_cmnd *sc)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2291 {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2292 struct fc_lport *lp;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2293 struct fnic *fnic;
4d7007b49d523d Hiral Patel 2013-02-12 2294 struct fnic_io_req *io_req = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2295 struct fc_rport *rport;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2296 int status;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2297 int ret = FAILED;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2298 spinlock_t *io_lock;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2299 unsigned long flags;
14eb5d905d16ec Hiral Patel 2013-02-12 2300 unsigned long start_time = 0;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2301 struct scsi_device *sdev = sc->device;
03298552cba38f Hiral Patel 2013-02-12 2302 struct scsi_lun fc_lun;
67125b0287a9e6 Hiral Patel 2013-09-12 2303 struct fnic_stats *fnic_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2304 struct reset_stats *reset_stats;
4d7007b49d523d Hiral Patel 2013-02-12 2305 int tag = 0;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2306 DECLARE_COMPLETION_ONSTACK(tm_done);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2307 struct scsi_cmnd *reset_sc = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2308
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2309 /* Wait for rport to unblock */
65d430fa99cbd0 Christof Schmitt 2009-10-30 2310 fc_block_scsi_eh(sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2311
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2312 /* Get local-port, check ready and link up */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2313 lp = shost_priv(sdev->host);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2314
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2315 fnic = lport_priv(lp);
67125b0287a9e6 Hiral Patel 2013-09-12 2316 fnic_stats = &fnic->fnic_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2317 reset_stats = &fnic->fnic_stats.reset_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2318
67125b0287a9e6 Hiral Patel 2013-09-12 2319 atomic64_inc(&reset_stats->device_resets);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2320
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2321 rport = starget_to_rport(scsi_target(sdev));
0db6f4353d68c0 Roel Kluin 2010-06-11 2322 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
9cb78c16f5dade Hannes Reinecke 2014-06-25 2323 "Device reset called FCID 0x%x, LUN 0x%llx sc 0x%p\n",
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2324 rport->port_id, sdev->lun, sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2325
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2326 if (lp->state != LPORT_ST_READY || !(lp->link_up))
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2327 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2328
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2329 /* Check if remote port up */
67125b0287a9e6 Hiral Patel 2013-09-12 2330 if (fc_remote_port_chkready(rport)) {
67125b0287a9e6 Hiral Patel 2013-09-12 2331 atomic64_inc(&fnic_stats->misc_stats.rport_not_ready);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2332 goto fnic_device_reset_end;
67125b0287a9e6 Hiral Patel 2013-09-12 2333 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2334
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2335 reset_sc = scsi_get_internal_cmd(sdev, DMA_NONE, REQ_NOWAIT);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 @2336 if (unlikely(!reset_sc))
03298552cba38f Hiral Patel 2013-02-12 2337 goto fnic_device_reset_end;
^^^^^^^^^^^^^^^^^^^^^^^^^^^
NULL on this path.
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2338
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2339 CMD_FLAGS(reset_sc) = FNIC_DEVICE_RESET;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2340 tag = reset_sc->request->tag;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2341 io_lock = fnic_io_lock_hash(fnic, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2342 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2343
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2344 /*
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2345 * Allocate a new io_req.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2346 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2347 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2348 if (!io_req) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2349 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2350 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2351 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2352 memset(io_req, 0, sizeof(*io_req));
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2353 io_req->port_id = rport->port_id;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2354 CMD_SP(reset_sc) = (char *)io_req;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2355
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2356 io_req->dr_done = &tm_done;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2357 CMD_STATE(reset_sc) = FNIC_IOREQ_CMD_PENDING;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2358 CMD_LR_STATUS(reset_sc) = FCPIO_INVALID_CODE;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2359 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2360
03298552cba38f Hiral Patel 2013-02-12 2361 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "TAG %x\n", tag);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2362
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2363 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2364 * issue the device reset, if enqueue failed, clean up the ioreq
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2365 * and break assoc with scsi cmd
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2366 */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2367 if (fnic_queue_dr_io_req(fnic, reset_sc, io_req)) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2368 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2369 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2370 if (io_req)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2371 io_req->dr_done = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2372 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2373 }
03298552cba38f Hiral Patel 2013-02-12 2374 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2375 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_ISSUED;
03298552cba38f Hiral Patel 2013-02-12 2376 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2377
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2378 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2379 * Wait on the local completion for LUN reset. The io_req may be
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2380 * freed while we wait since we hold no lock.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2381 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2382 wait_for_completion_timeout(&tm_done,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2383 msecs_to_jiffies(FNIC_LUN_RESET_TIMEOUT));
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2384
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2385 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2386 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2387 if (!io_req) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2388 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2389 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2390 "io_req is null tag 0x%x sc 0x%p\n", tag, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2391 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2392 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2393 io_req->dr_done = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2394
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2395 status = CMD_LR_STATUS(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2396
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2397 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2398 * If lun reset not completed, bail out with failed. io_req
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2399 * gets cleaned up during higher levels of EH
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2400 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2401 if (status == FCPIO_INVALID_CODE) {
67125b0287a9e6 Hiral Patel 2013-09-12 2402 atomic64_inc(&reset_stats->device_reset_timeouts);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2403 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2404 "Device reset timed out\n");
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2405 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_TIMED_OUT;
03298552cba38f Hiral Patel 2013-02-12 2406 spin_unlock_irqrestore(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2407 int_to_scsilun(sdev->lun, &fc_lun);
03298552cba38f Hiral Patel 2013-02-12 2408 /*
1259c5dc752474 Sesidhar Beddel 2013-09-09 2409 * Issue abort and terminate on device reset request.
1259c5dc752474 Sesidhar Beddel 2013-09-09 2410 * If q'ing of terminate fails, retry it after a delay.
03298552cba38f Hiral Patel 2013-02-12 2411 */
03298552cba38f Hiral Patel 2013-02-12 2412 while (1) {
03298552cba38f Hiral Patel 2013-02-12 2413 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2414 if (CMD_FLAGS(reset_sc) & FNIC_DEV_RST_TERM_ISSUED) {
03298552cba38f Hiral Patel 2013-02-12 2415 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2416 break;
03298552cba38f Hiral Patel 2013-02-12 2417 }
03298552cba38f Hiral Patel 2013-02-12 2418 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2419 if (fnic_queue_abort_io_req(fnic,
03298552cba38f Hiral Patel 2013-02-12 2420 tag | FNIC_TAG_DEV_RST,
03298552cba38f Hiral Patel 2013-02-12 2421 FCPIO_ITMF_ABT_TASK_TERM,
03298552cba38f Hiral Patel 2013-02-12 2422 fc_lun.scsi_lun, io_req)) {
03298552cba38f Hiral Patel 2013-02-12 2423 wait_for_completion_timeout(&tm_done,
03298552cba38f Hiral Patel 2013-02-12 2424 msecs_to_jiffies(FNIC_ABT_TERM_DELAY_TIMEOUT));
03298552cba38f Hiral Patel 2013-02-12 2425 } else {
03298552cba38f Hiral Patel 2013-02-12 2426 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2427 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_TERM_ISSUED;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2428 CMD_STATE(reset_sc) = FNIC_IOREQ_ABTS_PENDING;
03298552cba38f Hiral Patel 2013-02-12 2429 io_req->abts_done = &tm_done;
03298552cba38f Hiral Patel 2013-02-12 2430 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2431 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
03298552cba38f Hiral Patel 2013-02-12 2432 "Abort and terminate issued on Device reset "
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2433 "tag 0x%x sc 0x%p\n", tag, reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2434 break;
03298552cba38f Hiral Patel 2013-02-12 2435 }
03298552cba38f Hiral Patel 2013-02-12 2436 }
03298552cba38f Hiral Patel 2013-02-12 2437 while (1) {
03298552cba38f Hiral Patel 2013-02-12 2438 spin_lock_irqsave(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2439 if (!(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) {
03298552cba38f Hiral Patel 2013-02-12 2440 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2441 wait_for_completion_timeout(&tm_done,
03298552cba38f Hiral Patel 2013-02-12 2442 msecs_to_jiffies(FNIC_LUN_RESET_TIMEOUT));
03298552cba38f Hiral Patel 2013-02-12 2443 break;
03298552cba38f Hiral Patel 2013-02-12 2444 } else {
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2445 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2446 io_req->abts_done = NULL;
03298552cba38f Hiral Patel 2013-02-12 2447 goto fnic_device_reset_clean;
03298552cba38f Hiral Patel 2013-02-12 2448 }
03298552cba38f Hiral Patel 2013-02-12 2449 }
03298552cba38f Hiral Patel 2013-02-12 2450 } else {
03298552cba38f Hiral Patel 2013-02-12 2451 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2452 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2453
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2454 /* Completed, but not successful, clean up the io_req, return fail */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2455 if (status != FCPIO_SUCCESS) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2456 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2457 FNIC_SCSI_DBG(KERN_DEBUG,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2458 fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2459 "Device reset completed - failed\n");
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2460 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2461 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2462 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2463
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2464 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2465 * Clean up any aborts on this lun that have still not
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2466 * completed. If any of these fail, then LUN reset fails.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2467 * clean_pending_aborts cleans all cmds on this lun except
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2468 * the lun reset cmd. If all cmds get cleaned, the lun reset
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2469 * succeeds
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2470 */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2471 if (fnic_clean_pending_aborts(fnic, reset_sc)) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2472 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2473 io_req = (struct fnic_io_req *)CMD_SP(sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2474 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2475 "Device reset failed"
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2476 " since could not abort all IOs\n");
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2477 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2478 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2479
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2480 /* Clean lun reset command */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2481 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2482 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2483 if (io_req)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2484 /* Completed, and successful */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2485 ret = SUCCESS;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2486
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2487 fnic_device_reset_clean:
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2488 if (io_req)
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2489 CMD_SP(reset_sc) = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2490
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2491 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2492
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2493 if (io_req) {
14eb5d905d16ec Hiral Patel 2013-02-12 2494 start_time = io_req->start_time;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2495 fnic_release_ioreq_buf(fnic, io_req, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2496 mempool_free(io_req, fnic->io_req_pool);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2497 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2498
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2499 fnic_device_reset_end:
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 @2500 FNIC_TRACE(fnic_device_reset, sdev->host->host_no,
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2501 reset_sc->request->tag, reset_sc,
^^^^^^^^^^^^^^^^^
Unchecked dereference.
4d7007b49d523d Hiral Patel 2013-02-12 2502 jiffies_to_msecs(jiffies - start_time),
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2503 0, ((u64)reset_sc->cmnd[0] << 32 |
4d7007b49d523d Hiral Patel 2013-02-12 2504 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 |
4d7007b49d523d Hiral Patel 2013-02-12 2505 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]),
4d7007b49d523d Hiral Patel 2013-02-12 2506 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc)));
4d7007b49d523d Hiral Patel 2013-02-12 2507
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2508 /* free internal command if it is allocated */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2509 if (reset_sc)
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2510 scsi_put_internal_cmd(reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2511
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2512 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2513 "Returning from device reset %s\n",
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2514 (ret == SUCCESS) ?
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2515 "SUCCESS" : "FAILED");
67125b0287a9e6 Hiral Patel 2013-09-12 2516
67125b0287a9e6 Hiral Patel 2013-09-12 2517 if (ret == FAILED)
67125b0287a9e6 Hiral Patel 2013-09-12 2518 atomic64_inc(&reset_stats->device_reset_failures);
67125b0287a9e6 Hiral Patel 2013-09-12 2519
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2520 return ret;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2521 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37076 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [hare-scsi-devel:reserved-tags.v4 4/22] drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336)
@ 2020-07-07 14:30 ` Dan Carpenter
0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2020-07-07 14:30 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 20239 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git reserved-tags.v4
head: 2a2c3155f8291828f41350cf90a0c8a37cdd263c
commit: 3b695cc5f04ad6099906a94408410af8078704bf [4/22] fnic: use internal commands
config: i386-randconfig-m021-20200705 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336)
# https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=3b695cc5f04ad6099906a94408410af8078704bf
git remote add hare-scsi-devel https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
git remote update hare-scsi-devel
git checkout 3b695cc5f04ad6099906a94408410af8078704bf
vim +/reset_sc +2500 drivers/scsi/fnic/fnic_scsi.c
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2290 int fnic_device_reset(struct scsi_cmnd *sc)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2291 {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2292 struct fc_lport *lp;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2293 struct fnic *fnic;
4d7007b49d523d Hiral Patel 2013-02-12 2294 struct fnic_io_req *io_req = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2295 struct fc_rport *rport;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2296 int status;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2297 int ret = FAILED;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2298 spinlock_t *io_lock;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2299 unsigned long flags;
14eb5d905d16ec Hiral Patel 2013-02-12 2300 unsigned long start_time = 0;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2301 struct scsi_device *sdev = sc->device;
03298552cba38f Hiral Patel 2013-02-12 2302 struct scsi_lun fc_lun;
67125b0287a9e6 Hiral Patel 2013-09-12 2303 struct fnic_stats *fnic_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2304 struct reset_stats *reset_stats;
4d7007b49d523d Hiral Patel 2013-02-12 2305 int tag = 0;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2306 DECLARE_COMPLETION_ONSTACK(tm_done);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2307 struct scsi_cmnd *reset_sc = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2308
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2309 /* Wait for rport to unblock */
65d430fa99cbd0 Christof Schmitt 2009-10-30 2310 fc_block_scsi_eh(sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2311
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2312 /* Get local-port, check ready and link up */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2313 lp = shost_priv(sdev->host);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2314
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2315 fnic = lport_priv(lp);
67125b0287a9e6 Hiral Patel 2013-09-12 2316 fnic_stats = &fnic->fnic_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2317 reset_stats = &fnic->fnic_stats.reset_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2318
67125b0287a9e6 Hiral Patel 2013-09-12 2319 atomic64_inc(&reset_stats->device_resets);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2320
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2321 rport = starget_to_rport(scsi_target(sdev));
0db6f4353d68c0 Roel Kluin 2010-06-11 2322 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
9cb78c16f5dade Hannes Reinecke 2014-06-25 2323 "Device reset called FCID 0x%x, LUN 0x%llx sc 0x%p\n",
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2324 rport->port_id, sdev->lun, sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2325
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2326 if (lp->state != LPORT_ST_READY || !(lp->link_up))
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2327 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2328
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2329 /* Check if remote port up */
67125b0287a9e6 Hiral Patel 2013-09-12 2330 if (fc_remote_port_chkready(rport)) {
67125b0287a9e6 Hiral Patel 2013-09-12 2331 atomic64_inc(&fnic_stats->misc_stats.rport_not_ready);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2332 goto fnic_device_reset_end;
67125b0287a9e6 Hiral Patel 2013-09-12 2333 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2334
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2335 reset_sc = scsi_get_internal_cmd(sdev, DMA_NONE, REQ_NOWAIT);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 @2336 if (unlikely(!reset_sc))
03298552cba38f Hiral Patel 2013-02-12 2337 goto fnic_device_reset_end;
^^^^^^^^^^^^^^^^^^^^^^^^^^^
NULL on this path.
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2338
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2339 CMD_FLAGS(reset_sc) = FNIC_DEVICE_RESET;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2340 tag = reset_sc->request->tag;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2341 io_lock = fnic_io_lock_hash(fnic, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2342 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2343
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2344 /*
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2345 * Allocate a new io_req.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2346 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2347 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2348 if (!io_req) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2349 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2350 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2351 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2352 memset(io_req, 0, sizeof(*io_req));
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2353 io_req->port_id = rport->port_id;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2354 CMD_SP(reset_sc) = (char *)io_req;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2355
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2356 io_req->dr_done = &tm_done;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2357 CMD_STATE(reset_sc) = FNIC_IOREQ_CMD_PENDING;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2358 CMD_LR_STATUS(reset_sc) = FCPIO_INVALID_CODE;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2359 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2360
03298552cba38f Hiral Patel 2013-02-12 2361 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "TAG %x\n", tag);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2362
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2363 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2364 * issue the device reset, if enqueue failed, clean up the ioreq
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2365 * and break assoc with scsi cmd
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2366 */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2367 if (fnic_queue_dr_io_req(fnic, reset_sc, io_req)) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2368 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2369 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2370 if (io_req)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2371 io_req->dr_done = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2372 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2373 }
03298552cba38f Hiral Patel 2013-02-12 2374 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2375 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_ISSUED;
03298552cba38f Hiral Patel 2013-02-12 2376 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2377
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2378 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2379 * Wait on the local completion for LUN reset. The io_req may be
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2380 * freed while we wait since we hold no lock.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2381 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2382 wait_for_completion_timeout(&tm_done,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2383 msecs_to_jiffies(FNIC_LUN_RESET_TIMEOUT));
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2384
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2385 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2386 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2387 if (!io_req) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2388 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2389 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2390 "io_req is null tag 0x%x sc 0x%p\n", tag, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2391 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2392 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2393 io_req->dr_done = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2394
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2395 status = CMD_LR_STATUS(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2396
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2397 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2398 * If lun reset not completed, bail out with failed. io_req
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2399 * gets cleaned up during higher levels of EH
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2400 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2401 if (status == FCPIO_INVALID_CODE) {
67125b0287a9e6 Hiral Patel 2013-09-12 2402 atomic64_inc(&reset_stats->device_reset_timeouts);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2403 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2404 "Device reset timed out\n");
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2405 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_TIMED_OUT;
03298552cba38f Hiral Patel 2013-02-12 2406 spin_unlock_irqrestore(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2407 int_to_scsilun(sdev->lun, &fc_lun);
03298552cba38f Hiral Patel 2013-02-12 2408 /*
1259c5dc752474 Sesidhar Beddel 2013-09-09 2409 * Issue abort and terminate on device reset request.
1259c5dc752474 Sesidhar Beddel 2013-09-09 2410 * If q'ing of terminate fails, retry it after a delay.
03298552cba38f Hiral Patel 2013-02-12 2411 */
03298552cba38f Hiral Patel 2013-02-12 2412 while (1) {
03298552cba38f Hiral Patel 2013-02-12 2413 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2414 if (CMD_FLAGS(reset_sc) & FNIC_DEV_RST_TERM_ISSUED) {
03298552cba38f Hiral Patel 2013-02-12 2415 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2416 break;
03298552cba38f Hiral Patel 2013-02-12 2417 }
03298552cba38f Hiral Patel 2013-02-12 2418 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2419 if (fnic_queue_abort_io_req(fnic,
03298552cba38f Hiral Patel 2013-02-12 2420 tag | FNIC_TAG_DEV_RST,
03298552cba38f Hiral Patel 2013-02-12 2421 FCPIO_ITMF_ABT_TASK_TERM,
03298552cba38f Hiral Patel 2013-02-12 2422 fc_lun.scsi_lun, io_req)) {
03298552cba38f Hiral Patel 2013-02-12 2423 wait_for_completion_timeout(&tm_done,
03298552cba38f Hiral Patel 2013-02-12 2424 msecs_to_jiffies(FNIC_ABT_TERM_DELAY_TIMEOUT));
03298552cba38f Hiral Patel 2013-02-12 2425 } else {
03298552cba38f Hiral Patel 2013-02-12 2426 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2427 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_TERM_ISSUED;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2428 CMD_STATE(reset_sc) = FNIC_IOREQ_ABTS_PENDING;
03298552cba38f Hiral Patel 2013-02-12 2429 io_req->abts_done = &tm_done;
03298552cba38f Hiral Patel 2013-02-12 2430 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2431 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
03298552cba38f Hiral Patel 2013-02-12 2432 "Abort and terminate issued on Device reset "
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2433 "tag 0x%x sc 0x%p\n", tag, reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2434 break;
03298552cba38f Hiral Patel 2013-02-12 2435 }
03298552cba38f Hiral Patel 2013-02-12 2436 }
03298552cba38f Hiral Patel 2013-02-12 2437 while (1) {
03298552cba38f Hiral Patel 2013-02-12 2438 spin_lock_irqsave(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2439 if (!(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) {
03298552cba38f Hiral Patel 2013-02-12 2440 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2441 wait_for_completion_timeout(&tm_done,
03298552cba38f Hiral Patel 2013-02-12 2442 msecs_to_jiffies(FNIC_LUN_RESET_TIMEOUT));
03298552cba38f Hiral Patel 2013-02-12 2443 break;
03298552cba38f Hiral Patel 2013-02-12 2444 } else {
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2445 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2446 io_req->abts_done = NULL;
03298552cba38f Hiral Patel 2013-02-12 2447 goto fnic_device_reset_clean;
03298552cba38f Hiral Patel 2013-02-12 2448 }
03298552cba38f Hiral Patel 2013-02-12 2449 }
03298552cba38f Hiral Patel 2013-02-12 2450 } else {
03298552cba38f Hiral Patel 2013-02-12 2451 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2452 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2453
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2454 /* Completed, but not successful, clean up the io_req, return fail */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2455 if (status != FCPIO_SUCCESS) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2456 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2457 FNIC_SCSI_DBG(KERN_DEBUG,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2458 fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2459 "Device reset completed - failed\n");
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2460 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2461 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2462 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2463
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2464 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2465 * Clean up any aborts on this lun that have still not
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2466 * completed. If any of these fail, then LUN reset fails.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2467 * clean_pending_aborts cleans all cmds on this lun except
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2468 * the lun reset cmd. If all cmds get cleaned, the lun reset
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2469 * succeeds
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2470 */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2471 if (fnic_clean_pending_aborts(fnic, reset_sc)) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2472 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2473 io_req = (struct fnic_io_req *)CMD_SP(sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2474 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2475 "Device reset failed"
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2476 " since could not abort all IOs\n");
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2477 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2478 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2479
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2480 /* Clean lun reset command */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2481 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2482 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2483 if (io_req)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2484 /* Completed, and successful */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2485 ret = SUCCESS;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2486
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2487 fnic_device_reset_clean:
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2488 if (io_req)
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2489 CMD_SP(reset_sc) = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2490
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2491 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2492
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2493 if (io_req) {
14eb5d905d16ec Hiral Patel 2013-02-12 2494 start_time = io_req->start_time;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2495 fnic_release_ioreq_buf(fnic, io_req, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2496 mempool_free(io_req, fnic->io_req_pool);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2497 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2498
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2499 fnic_device_reset_end:
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 @2500 FNIC_TRACE(fnic_device_reset, sdev->host->host_no,
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2501 reset_sc->request->tag, reset_sc,
^^^^^^^^^^^^^^^^^
Unchecked dereference.
4d7007b49d523d Hiral Patel 2013-02-12 2502 jiffies_to_msecs(jiffies - start_time),
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2503 0, ((u64)reset_sc->cmnd[0] << 32 |
4d7007b49d523d Hiral Patel 2013-02-12 2504 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 |
4d7007b49d523d Hiral Patel 2013-02-12 2505 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]),
4d7007b49d523d Hiral Patel 2013-02-12 2506 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc)));
4d7007b49d523d Hiral Patel 2013-02-12 2507
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2508 /* free internal command if it is allocated */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2509 if (reset_sc)
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2510 scsi_put_internal_cmd(reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2511
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2512 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2513 "Returning from device reset %s\n",
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2514 (ret == SUCCESS) ?
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2515 "SUCCESS" : "FAILED");
67125b0287a9e6 Hiral Patel 2013-09-12 2516
67125b0287a9e6 Hiral Patel 2013-09-12 2517 if (ret == FAILED)
67125b0287a9e6 Hiral Patel 2013-09-12 2518 atomic64_inc(&reset_stats->device_reset_failures);
67125b0287a9e6 Hiral Patel 2013-09-12 2519
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2520 return ret;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2521 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37076 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [hare-scsi-devel:reserved-tags.v4 4/22] drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336)
@ 2020-07-05 5:56 kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2020-07-05 5:56 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 20685 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Hannes Reinecke <hare@suse.de>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git reserved-tags.v4
head: 2a2c3155f8291828f41350cf90a0c8a37cdd263c
commit: 3b695cc5f04ad6099906a94408410af8078704bf [4/22] fnic: use internal commands
:::::: branch date: 10 days ago
:::::: commit date: 2 weeks ago
config: i386-randconfig-m021-20200705 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336)
# https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=3b695cc5f04ad6099906a94408410af8078704bf
git remote add hare-scsi-devel https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
git remote update hare-scsi-devel
git checkout 3b695cc5f04ad6099906a94408410af8078704bf
vim +/reset_sc +2500 drivers/scsi/fnic/fnic_scsi.c
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2284
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2285 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2286 * SCSI Eh thread issues a Lun Reset when one or more commands on a LUN
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2287 * fail to get aborted. It calls driver's eh_device_reset with a SCSI command
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2288 * on the LUN.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2289 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2290 int fnic_device_reset(struct scsi_cmnd *sc)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2291 {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2292 struct fc_lport *lp;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2293 struct fnic *fnic;
4d7007b49d523d Hiral Patel 2013-02-12 2294 struct fnic_io_req *io_req = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2295 struct fc_rport *rport;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2296 int status;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2297 int ret = FAILED;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2298 spinlock_t *io_lock;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2299 unsigned long flags;
14eb5d905d16ec Hiral Patel 2013-02-12 2300 unsigned long start_time = 0;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2301 struct scsi_device *sdev = sc->device;
03298552cba38f Hiral Patel 2013-02-12 2302 struct scsi_lun fc_lun;
67125b0287a9e6 Hiral Patel 2013-09-12 2303 struct fnic_stats *fnic_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2304 struct reset_stats *reset_stats;
4d7007b49d523d Hiral Patel 2013-02-12 2305 int tag = 0;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2306 DECLARE_COMPLETION_ONSTACK(tm_done);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2307 struct scsi_cmnd *reset_sc = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2308
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2309 /* Wait for rport to unblock */
65d430fa99cbd0 Christof Schmitt 2009-10-30 2310 fc_block_scsi_eh(sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2311
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2312 /* Get local-port, check ready and link up */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2313 lp = shost_priv(sdev->host);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2314
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2315 fnic = lport_priv(lp);
67125b0287a9e6 Hiral Patel 2013-09-12 2316 fnic_stats = &fnic->fnic_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2317 reset_stats = &fnic->fnic_stats.reset_stats;
67125b0287a9e6 Hiral Patel 2013-09-12 2318
67125b0287a9e6 Hiral Patel 2013-09-12 2319 atomic64_inc(&reset_stats->device_resets);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2320
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2321 rport = starget_to_rport(scsi_target(sdev));
0db6f4353d68c0 Roel Kluin 2010-06-11 2322 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
9cb78c16f5dade Hannes Reinecke 2014-06-25 2323 "Device reset called FCID 0x%x, LUN 0x%llx sc 0x%p\n",
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2324 rport->port_id, sdev->lun, sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2325
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2326 if (lp->state != LPORT_ST_READY || !(lp->link_up))
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2327 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2328
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2329 /* Check if remote port up */
67125b0287a9e6 Hiral Patel 2013-09-12 2330 if (fc_remote_port_chkready(rport)) {
67125b0287a9e6 Hiral Patel 2013-09-12 2331 atomic64_inc(&fnic_stats->misc_stats.rport_not_ready);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2332 goto fnic_device_reset_end;
67125b0287a9e6 Hiral Patel 2013-09-12 2333 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2334
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2335 reset_sc = scsi_get_internal_cmd(sdev, DMA_NONE, REQ_NOWAIT);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 @2336 if (unlikely(!reset_sc))
03298552cba38f Hiral Patel 2013-02-12 2337 goto fnic_device_reset_end;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2338
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2339 CMD_FLAGS(reset_sc) = FNIC_DEVICE_RESET;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2340 tag = reset_sc->request->tag;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2341 io_lock = fnic_io_lock_hash(fnic, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2342 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2343
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2344 /*
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2345 * Allocate a new io_req.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2346 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2347 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2348 if (!io_req) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2349 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2350 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2351 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2352 memset(io_req, 0, sizeof(*io_req));
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2353 io_req->port_id = rport->port_id;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2354 CMD_SP(reset_sc) = (char *)io_req;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2355
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2356 io_req->dr_done = &tm_done;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2357 CMD_STATE(reset_sc) = FNIC_IOREQ_CMD_PENDING;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2358 CMD_LR_STATUS(reset_sc) = FCPIO_INVALID_CODE;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2359 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2360
03298552cba38f Hiral Patel 2013-02-12 2361 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "TAG %x\n", tag);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2362
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2363 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2364 * issue the device reset, if enqueue failed, clean up the ioreq
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2365 * and break assoc with scsi cmd
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2366 */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2367 if (fnic_queue_dr_io_req(fnic, reset_sc, io_req)) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2368 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2369 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2370 if (io_req)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2371 io_req->dr_done = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2372 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2373 }
03298552cba38f Hiral Patel 2013-02-12 2374 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2375 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_ISSUED;
03298552cba38f Hiral Patel 2013-02-12 2376 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2377
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2378 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2379 * Wait on the local completion for LUN reset. The io_req may be
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2380 * freed while we wait since we hold no lock.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2381 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2382 wait_for_completion_timeout(&tm_done,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2383 msecs_to_jiffies(FNIC_LUN_RESET_TIMEOUT));
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2384
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2385 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2386 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2387 if (!io_req) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2388 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2389 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2390 "io_req is null tag 0x%x sc 0x%p\n", tag, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2391 goto fnic_device_reset_end;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2392 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2393 io_req->dr_done = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2394
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2395 status = CMD_LR_STATUS(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2396
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2397 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2398 * If lun reset not completed, bail out with failed. io_req
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2399 * gets cleaned up during higher levels of EH
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2400 */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2401 if (status == FCPIO_INVALID_CODE) {
67125b0287a9e6 Hiral Patel 2013-09-12 2402 atomic64_inc(&reset_stats->device_reset_timeouts);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2403 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2404 "Device reset timed out\n");
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2405 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_TIMED_OUT;
03298552cba38f Hiral Patel 2013-02-12 2406 spin_unlock_irqrestore(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2407 int_to_scsilun(sdev->lun, &fc_lun);
03298552cba38f Hiral Patel 2013-02-12 2408 /*
1259c5dc752474 Sesidhar Beddel 2013-09-09 2409 * Issue abort and terminate on device reset request.
1259c5dc752474 Sesidhar Beddel 2013-09-09 2410 * If q'ing of terminate fails, retry it after a delay.
03298552cba38f Hiral Patel 2013-02-12 2411 */
03298552cba38f Hiral Patel 2013-02-12 2412 while (1) {
03298552cba38f Hiral Patel 2013-02-12 2413 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2414 if (CMD_FLAGS(reset_sc) & FNIC_DEV_RST_TERM_ISSUED) {
03298552cba38f Hiral Patel 2013-02-12 2415 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2416 break;
03298552cba38f Hiral Patel 2013-02-12 2417 }
03298552cba38f Hiral Patel 2013-02-12 2418 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2419 if (fnic_queue_abort_io_req(fnic,
03298552cba38f Hiral Patel 2013-02-12 2420 tag | FNIC_TAG_DEV_RST,
03298552cba38f Hiral Patel 2013-02-12 2421 FCPIO_ITMF_ABT_TASK_TERM,
03298552cba38f Hiral Patel 2013-02-12 2422 fc_lun.scsi_lun, io_req)) {
03298552cba38f Hiral Patel 2013-02-12 2423 wait_for_completion_timeout(&tm_done,
03298552cba38f Hiral Patel 2013-02-12 2424 msecs_to_jiffies(FNIC_ABT_TERM_DELAY_TIMEOUT));
03298552cba38f Hiral Patel 2013-02-12 2425 } else {
03298552cba38f Hiral Patel 2013-02-12 2426 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2427 CMD_FLAGS(reset_sc) |= FNIC_DEV_RST_TERM_ISSUED;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2428 CMD_STATE(reset_sc) = FNIC_IOREQ_ABTS_PENDING;
03298552cba38f Hiral Patel 2013-02-12 2429 io_req->abts_done = &tm_done;
03298552cba38f Hiral Patel 2013-02-12 2430 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2431 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
03298552cba38f Hiral Patel 2013-02-12 2432 "Abort and terminate issued on Device reset "
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2433 "tag 0x%x sc 0x%p\n", tag, reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2434 break;
03298552cba38f Hiral Patel 2013-02-12 2435 }
03298552cba38f Hiral Patel 2013-02-12 2436 }
03298552cba38f Hiral Patel 2013-02-12 2437 while (1) {
03298552cba38f Hiral Patel 2013-02-12 2438 spin_lock_irqsave(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2439 if (!(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) {
03298552cba38f Hiral Patel 2013-02-12 2440 spin_unlock_irqrestore(io_lock, flags);
03298552cba38f Hiral Patel 2013-02-12 2441 wait_for_completion_timeout(&tm_done,
03298552cba38f Hiral Patel 2013-02-12 2442 msecs_to_jiffies(FNIC_LUN_RESET_TIMEOUT));
03298552cba38f Hiral Patel 2013-02-12 2443 break;
03298552cba38f Hiral Patel 2013-02-12 2444 } else {
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2445 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2446 io_req->abts_done = NULL;
03298552cba38f Hiral Patel 2013-02-12 2447 goto fnic_device_reset_clean;
03298552cba38f Hiral Patel 2013-02-12 2448 }
03298552cba38f Hiral Patel 2013-02-12 2449 }
03298552cba38f Hiral Patel 2013-02-12 2450 } else {
03298552cba38f Hiral Patel 2013-02-12 2451 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2452 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2453
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2454 /* Completed, but not successful, clean up the io_req, return fail */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2455 if (status != FCPIO_SUCCESS) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2456 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2457 FNIC_SCSI_DBG(KERN_DEBUG,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2458 fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2459 "Device reset completed - failed\n");
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2460 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2461 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2462 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2463
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2464 /*
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2465 * Clean up any aborts on this lun that have still not
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2466 * completed. If any of these fail, then LUN reset fails.
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2467 * clean_pending_aborts cleans all cmds on this lun except
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2468 * the lun reset cmd. If all cmds get cleaned, the lun reset
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2469 * succeeds
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2470 */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2471 if (fnic_clean_pending_aborts(fnic, reset_sc)) {
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2472 spin_lock_irqsave(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2473 io_req = (struct fnic_io_req *)CMD_SP(sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2474 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2475 "Device reset failed"
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2476 " since could not abort all IOs\n");
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2477 goto fnic_device_reset_clean;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2478 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2479
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2480 /* Clean lun reset command */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2481 spin_lock_irqsave(io_lock, flags);
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2482 io_req = (struct fnic_io_req *)CMD_SP(reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2483 if (io_req)
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2484 /* Completed, and successful */
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2485 ret = SUCCESS;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2486
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2487 fnic_device_reset_clean:
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2488 if (io_req)
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2489 CMD_SP(reset_sc) = NULL;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2490
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2491 spin_unlock_irqrestore(io_lock, flags);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2492
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2493 if (io_req) {
14eb5d905d16ec Hiral Patel 2013-02-12 2494 start_time = io_req->start_time;
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2495 fnic_release_ioreq_buf(fnic, io_req, reset_sc);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2496 mempool_free(io_req, fnic->io_req_pool);
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2497 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2498
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2499 fnic_device_reset_end:
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 @2500 FNIC_TRACE(fnic_device_reset, sdev->host->host_no,
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2501 reset_sc->request->tag, reset_sc,
4d7007b49d523d Hiral Patel 2013-02-12 2502 jiffies_to_msecs(jiffies - start_time),
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2503 0, ((u64)reset_sc->cmnd[0] << 32 |
4d7007b49d523d Hiral Patel 2013-02-12 2504 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 |
4d7007b49d523d Hiral Patel 2013-02-12 2505 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]),
4d7007b49d523d Hiral Patel 2013-02-12 2506 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc)));
4d7007b49d523d Hiral Patel 2013-02-12 2507
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2508 /* free internal command if it is allocated */
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2509 if (reset_sc)
3b695cc5f04ad6 Hannes Reinecke 2020-03-11 2510 scsi_put_internal_cmd(reset_sc);
03298552cba38f Hiral Patel 2013-02-12 2511
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2512 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2513 "Returning from device reset %s\n",
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2514 (ret == SUCCESS) ?
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2515 "SUCCESS" : "FAILED");
67125b0287a9e6 Hiral Patel 2013-09-12 2516
67125b0287a9e6 Hiral Patel 2013-09-12 2517 if (ret == FAILED)
67125b0287a9e6 Hiral Patel 2013-09-12 2518 atomic64_inc(&reset_stats->device_reset_failures);
67125b0287a9e6 Hiral Patel 2013-09-12 2519
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2520 return ret;
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2521 }
5df6d737dd4b0f Abhijeet Joglekar 2009-04-17 2522
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37076 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-07-07 14:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-07 14:30 [hare-scsi-devel:reserved-tags.v4 4/22] drivers/scsi/fnic/fnic_scsi.c:2500 fnic_device_reset() error: we previously assumed 'reset_sc' could be null (see line 2336) Dan Carpenter
2020-07-07 14:30 ` Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2020-07-05 5:56 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.