From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org
Subject: [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)
Date: Tue, 07 Jul 2020 17:30:49 +0300 [thread overview]
Message-ID: <20200707143048.GE2549@kadam> (raw)
[-- 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 --]
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [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)
Date: Tue, 07 Jul 2020 17:30:49 +0300 [thread overview]
Message-ID: <20200707143048.GE2549@kadam> (raw)
[-- 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 --]
next reply other threads:[~2020-07-07 14:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-07 14:30 Dan Carpenter [this message]
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
-- strict thread matches above, loose matches on Subject: below --
2020-07-05 5:56 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200707143048.GE2549@kadam \
--to=dan.carpenter@oracle.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.