All of lore.kernel.org
 help / color / mirror / Atom feed
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 --]

             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.