[linux-next:master 7751/13846] drivers/scsi/ibmvscsi/ibmvfc-core.c:6134:15: warning: variable 'rport' is uninitialized when used here

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild-all,dev.linux.lists.llvm
Message-ID <[email protected]>
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   6b8c8af514d739d0335f5579b585e02babe8a727
commit: 696d1cc2aaa2d7041b64ea714a7460e2d365235c [7751/13846] scsi: ibmvfc: process NVMe/FC rports in work thread
config: powerpc-ppc64_defconfig (https://download.01.org/0day-ci/archive/20260809/[email protected]/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260809/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> drivers/scsi/ibmvscsi/ibmvfc-core.c:6134:15: warning: variable 'rport' is uninitialized when used here [-Wuninitialized]
    6134 |                         } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) {
         |                                    ^~~~~
   drivers/scsi/ibmvscsi/ibmvfc-core.c:5967:24: note: initialize the variable 'rport' to silence this warning
    5967 |         struct fc_rport *rport;
         |                               ^
         |                                = NULL
   1 warning generated.


vim +/rport +6134 drivers/scsi/ibmvscsi/ibmvfc-core.c

  5957	
  5958	/**
  5959	 * ibmvfc_do_work - Do task level work
  5960	 * @vhost:		ibmvfc host struct
  5961	 *
  5962	 **/
  5963	static void ibmvfc_do_work(struct ibmvfc_host *vhost)
  5964	{
  5965		struct ibmvfc_target *tgt;
  5966		unsigned long flags;
  5967		struct fc_rport *rport;
  5968		struct nvme_fc_remote_port *nvme_rport;
  5969		LIST_HEAD(purge);
  5970		int rc;
  5971	
  5972		ibmvfc_log_ae(vhost, vhost->events_to_log);
  5973		spin_lock_irqsave(vhost->host->host_lock, flags);
  5974		vhost->events_to_log = 0;
  5975		switch (vhost->action) {
  5976		case IBMVFC_HOST_ACTION_NONE:
  5977		case IBMVFC_HOST_ACTION_LOGO_WAIT:
  5978		case IBMVFC_HOST_ACTION_INIT_WAIT:
  5979			break;
  5980		case IBMVFC_HOST_ACTION_RESET:
  5981			list_splice_init(&vhost->purge, &purge);
  5982			spin_unlock_irqrestore(vhost->host->host_lock, flags);
  5983			ibmvfc_complete_purge(&purge);
  5984			ibmvfc_nvme_unregister(vhost);
  5985			rc = ibmvfc_reset_crq(vhost);
  5986	
  5987			spin_lock_irqsave(vhost->host->host_lock, flags);
  5988			if (!rc || rc == H_CLOSED)
  5989				vio_enable_interrupts(to_vio_dev(vhost->dev));
  5990			if (vhost->action == IBMVFC_HOST_ACTION_RESET) {
  5991				/*
  5992				 * The only action we could have changed to would have
  5993				 * been reenable, in which case, we skip the rest of
  5994				 * this path and wait until we've done the re-enable
  5995				 * before sending the crq init.
  5996				 */
  5997				vhost->action = IBMVFC_HOST_ACTION_TGT_DEL;
  5998	
  5999				if (rc || (rc = ibmvfc_send_crq_init(vhost)) ||
  6000				    (rc = vio_enable_interrupts(to_vio_dev(vhost->dev)))) {
  6001					ibmvfc_link_down(vhost, IBMVFC_LINK_DEAD);
  6002					dev_err(vhost->dev, "Error after reset (rc=%d)\n", rc);
  6003				}
  6004			}
  6005			break;
  6006		case IBMVFC_HOST_ACTION_REENABLE:
  6007			list_splice_init(&vhost->purge, &purge);
  6008			spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6009			ibmvfc_complete_purge(&purge);
  6010			rc = ibmvfc_reenable_crq_queue(vhost);
  6011	
  6012			spin_lock_irqsave(vhost->host->host_lock, flags);
  6013			if (vhost->action == IBMVFC_HOST_ACTION_REENABLE) {
  6014				/*
  6015				 * The only action we could have changed to would have
  6016				 * been reset, in which case, we skip the rest of this
  6017				 * path and wait until we've done the reset before
  6018				 * sending the crq init.
  6019				 */
  6020				vhost->action = IBMVFC_HOST_ACTION_TGT_DEL;
  6021				if (rc || (rc = ibmvfc_send_crq_init(vhost))) {
  6022					ibmvfc_link_down(vhost, IBMVFC_LINK_DEAD);
  6023					dev_err(vhost->dev, "Error after enable (rc=%d)\n", rc);
  6024				}
  6025			}
  6026			break;
  6027		case IBMVFC_HOST_ACTION_LOGO:
  6028			vhost->job_step(vhost);
  6029			break;
  6030		case IBMVFC_HOST_ACTION_INIT:
  6031			BUG_ON(vhost->state != IBMVFC_INITIALIZING);
  6032			if (vhost->delay_init) {
  6033				vhost->delay_init = 0;
  6034				spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6035				ssleep(15);
  6036				return;
  6037			} else
  6038				vhost->job_step(vhost);
  6039			break;
  6040		case IBMVFC_HOST_ACTION_QUERY:
  6041			list_for_each_entry(tgt, &vhost->scsi_scrqs.targets, queue)
  6042				ibmvfc_init_tgt(tgt, ibmvfc_tgt_query_target);
  6043			list_for_each_entry(tgt, &vhost->nvme_scrqs.targets, queue)
  6044				ibmvfc_init_tgt(tgt, ibmvfc_tgt_query_target);
  6045			ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_QUERY_TGTS);
  6046			break;
  6047		case IBMVFC_HOST_ACTION_QUERY_TGTS:
  6048			list_for_each_entry(tgt, &vhost->scsi_scrqs.targets, queue) {
  6049				if (tgt->action == IBMVFC_TGT_ACTION_INIT) {
  6050					tgt->job_step(tgt);
  6051					break;
  6052				}
  6053			}
  6054			list_for_each_entry(tgt, &vhost->nvme_scrqs.targets, queue) {
  6055				if (tgt->action == IBMVFC_TGT_ACTION_INIT) {
  6056					tgt->job_step(tgt);
  6057					break;
  6058				}
  6059			}
  6060	
  6061			if (!ibmvfc_dev_init_to_do(vhost))
  6062				ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_DEL);
  6063			break;
  6064		case IBMVFC_HOST_ACTION_TGT_DEL:
  6065		case IBMVFC_HOST_ACTION_TGT_DEL_FAILED:
  6066			list_for_each_entry(tgt, &vhost->scsi_scrqs.targets, queue) {
  6067				if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) {
  6068					tgt->job_step(tgt);
  6069					break;
  6070				}
  6071			}
  6072			list_for_each_entry(tgt, &vhost->nvme_scrqs.targets, queue) {
  6073				if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) {
  6074					tgt->job_step(tgt);
  6075					break;
  6076				}
  6077			}
  6078	
  6079			if (ibmvfc_dev_logo_to_do(vhost)) {
  6080				spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6081				return;
  6082			}
  6083	
  6084			list_for_each_entry(tgt, &vhost->scsi_scrqs.targets, queue) {
  6085				if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) {
  6086					tgt_dbg(tgt, "Deleting rport\n");
  6087					rport = tgt->rport;
  6088					tgt->rport = NULL;
  6089					list_del(&tgt->queue);
  6090					ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT);
  6091					spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6092					if (rport)
  6093						fc_remote_port_delete(rport);
  6094					timer_delete_sync(&tgt->timer);
  6095					kref_put(&tgt->kref, ibmvfc_release_tgt);
  6096					return;
  6097				} else if (tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) {
  6098					tgt_dbg(tgt, "Deleting rport with I/O outstanding\n");
  6099					rport = tgt->rport;
  6100					tgt->rport = NULL;
  6101					tgt->init_retries = 0;
  6102					ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT);
  6103	
  6104					/*
  6105					 * If fast fail is enabled, we wait for it to fire and then clean up
  6106					 * the old port, since we expect the fast fail timer to clean up the
  6107					 * outstanding I/O faster than waiting for normal command timeouts.
  6108					 * However, if fast fail is disabled, any I/O outstanding to the
  6109					 * rport LUNs will stay outstanding indefinitely, since the EH handlers
  6110					 * won't get invoked for I/O's timing out. If this is a NPIV failover
  6111					 * scenario, the better alternative is to use the move login.
  6112					 */
  6113					if (rport && rport->fast_io_fail_tmo == -1)
  6114						tgt->move_login = 1;
  6115					spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6116					if (rport)
  6117						fc_remote_port_delete(rport);
  6118					return;
  6119				}
  6120			}
  6121	
  6122			list_for_each_entry(tgt, &vhost->nvme_scrqs.targets, queue) {
  6123				if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) {
  6124					tgt_dbg(tgt, "Deleteing NVMe rport\n");
  6125					nvme_rport = tgt->nvme_remote_port;
  6126					list_del(&tgt->queue);
  6127					ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT);
  6128					spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6129					if (nvme_rport)
  6130						ibmvfc_nvme_unregister_remoteport(tgt);
  6131					timer_delete_sync(&tgt->timer);
  6132					kref_put(&tgt->kref, ibmvfc_release_tgt);
  6133					return;
> 6134				} else if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) {
  6135					tgt_dbg(tgt, "Deleting NVMe rport with outstanding I/O\n");
  6136					nvme_rport = tgt->nvme_remote_port;
  6137					ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT);
  6138					tgt->init_retries = 0;
  6139					spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6140					if (nvme_rport)
  6141						ibmvfc_nvme_unregister_remoteport(tgt);
  6142					return;
  6143				}
  6144			}
  6145	
  6146			if (vhost->state == IBMVFC_INITIALIZING) {
  6147				if (vhost->action == IBMVFC_HOST_ACTION_TGT_DEL_FAILED) {
  6148					if (vhost->reinit) {
  6149						vhost->reinit = 0;
  6150						scsi_block_requests(vhost->host);
  6151						ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_QUERY);
  6152						spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6153					} else {
  6154						ibmvfc_set_host_state(vhost, IBMVFC_ACTIVE);
  6155						ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_NONE);
  6156						wake_up(&vhost->init_wait_q);
  6157						schedule_work(&vhost->rport_add_work_q);
  6158						vhost->init_retries = 0;
  6159						spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6160						scsi_unblock_requests(vhost->host);
  6161					}
  6162	
  6163					return;
  6164				} else {
  6165					ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
  6166					vhost->job_step = ibmvfc_discover_targets;
  6167				}
  6168			} else {
  6169				ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_NONE);
  6170				spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6171				scsi_unblock_requests(vhost->host);
  6172				wake_up(&vhost->init_wait_q);
  6173				return;
  6174			}
  6175			break;
  6176		case IBMVFC_HOST_ACTION_ALLOC_TGTS:
  6177			ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_INIT);
  6178			spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6179			ibmvfc_alloc_targets(vhost);
  6180			spin_lock_irqsave(vhost->host->host_lock, flags);
  6181			break;
  6182		case IBMVFC_HOST_ACTION_TGT_INIT:
  6183			list_for_each_entry(tgt, &vhost->scsi_scrqs.targets, queue) {
  6184				if (tgt->action == IBMVFC_TGT_ACTION_INIT) {
  6185					tgt->job_step(tgt);
  6186					break;
  6187				}
  6188			}
  6189			list_for_each_entry(tgt, &vhost->nvme_scrqs.targets, queue) {
  6190				if (tgt->action == IBMVFC_TGT_ACTION_INIT) {
  6191					tgt->job_step(tgt);
  6192					break;
  6193				}
  6194			}
  6195	
  6196			if (!ibmvfc_dev_init_to_do(vhost))
  6197				ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_DEL_FAILED);
  6198			break;
  6199		default:
  6200			break;
  6201		}
  6202	
  6203		spin_unlock_irqrestore(vhost->host->host_lock, flags);
  6204	}
  6205	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.