All of lore.kernel.org
 help / color / mirror / Atom feed
* [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809
@ 2022-01-17 19:56 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2022-01-17 19:56 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 10254 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-cifs(a)vger.kernel.org
CC: samba-technical(a)lists.samba.org
TO: Shyam Prasad N <sprasad@microsoft.com>
CC: Steve French <stfrench@microsoft.com>

tree:   git://git.samba.org/sfrench/cifs-2.6.git tmp-mchan-branch
head:   5dcedd487447680668c095add4b24432a06b2644
commit: 81b88cd97eb7df45d283a92b56603f6e433a69b5 [14/21] cifs: check reconnects for channels of active tcons too
:::::: branch date: 13 hours ago
:::::: commit date: 18 hours ago
config: x86_64-randconfig-c022-20220117 (https://download.01.org/0day-ci/archive/20220118/202201180340.vQkWT5nw-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809

vim +3869 fs/cifs/smb2pdu.c

9094fad1ed90ca Pavel Shilovsky  2012-07-12  3784  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3785  void smb2_reconnect_server(struct work_struct *work)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3786  {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3787  	struct TCP_Server_Info *server = container_of(work,
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3788  					struct TCP_Server_Info, reconnect.work);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3789  	struct TCP_Server_Info *pserver;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3790  	struct cifs_ses *ses, *ses2;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3791  	struct cifs_tcon *tcon, *tcon2;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3792  	struct list_head tmp_list, tmp_ses_list;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3793  	bool tcon_exist = false, ses_exist = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3794  	bool tcon_selected = false, ses_selected = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3795  	int rc;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3796  	bool resched = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3797  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3798  	/* If server is a channel, select the primary channel */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3799  	pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3800  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3801  	/* Prevent simultaneous reconnects that can corrupt tcon->rlist list */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3802  	mutex_lock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3803  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3804  	INIT_LIST_HEAD(&tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3805  	INIT_LIST_HEAD(&tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3806  	cifs_dbg(FYI, "Reconnecting tcons and channels\n");
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3807  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3808  	spin_lock(&cifs_tcp_ses_lock);
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3809  	list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3810  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3811  		tcon_selected = ses_selected = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3812  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3813  		list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
96a988ffeb90db Pavel Shilovsky  2016-11-29  3814  			if (tcon->need_reconnect || tcon->need_reopen_files) {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3815  				tcon->tc_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3816  				list_add_tail(&tcon->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3817  				tcon_selected = tcon_exist = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3818  			}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3819  		}
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3820  		/*
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3821  		 * IPC has the same lifetime as its session and uses its
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3822  		 * refcount.
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3823  		 */
b327a717e50698 Aurelien Aptel   2018-01-24  3824  		if (ses->tcon_ipc && ses->tcon_ipc->need_reconnect) {
b327a717e50698 Aurelien Aptel   2018-01-24  3825  			list_add_tail(&ses->tcon_ipc->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3826  			tcon_selected = tcon_exist = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3827  			ses->ses_count++;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3828  		}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3829  		/*
81b88cd97eb7df Shyam Prasad N   2021-10-30  3830  		 * handle the case where channel needs to reconnect
81b88cd97eb7df Shyam Prasad N   2021-10-30  3831  		 * binding session, but tcon is healthy (some other channel
81b88cd97eb7df Shyam Prasad N   2021-10-30  3832  		 * is active)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3833  		 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3834  		if (!tcon_selected && cifs_chan_needs_reconnect(ses, server)) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3835  			list_add_tail(&ses->rlist, &tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3836  			ses_selected = ses_exist = true;
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3837  			ses->ses_count++;
b327a717e50698 Aurelien Aptel   2018-01-24  3838  		}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3839  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3840  	/*
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3841  	 * Get the reference to server struct to be sure that the last call of
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3842  	 * cifs_put_tcon() in the loop below won't release the server pointer.
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3843  	 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3844  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3845  		server->srv_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3846  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3847  	spin_unlock(&cifs_tcp_ses_lock);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3848  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3849  	list_for_each_entry_safe(tcon, tcon2, &tmp_list, rlist) {
352d96f3acc6e0 Aurelien Aptel   2020-05-31  3850  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
18ea43113f5b74 Germano Percossi 2017-04-07  3851  		if (!rc)
96a988ffeb90db Pavel Shilovsky  2016-11-29  3852  			cifs_reopen_persistent_handles(tcon);
18ea43113f5b74 Germano Percossi 2017-04-07  3853  		else
18ea43113f5b74 Germano Percossi 2017-04-07  3854  			resched = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3855  		list_del_init(&tcon->rlist);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3856  		if (tcon->ipc)
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3857  			cifs_put_smb_ses(tcon->ses);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3858  		else
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3859  			cifs_put_tcon(tcon);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3860  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3861  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3862  	if (!ses_exist)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3863  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3864  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3865  	/* allocate a dummy tcon struct used for reconnect */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3866  	tcon = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3867  	if (!tcon) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3868  		resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3869  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3870  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3871  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3872  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3873  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3874  	tcon->tidStatus = CifsGood;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3875  	tcon->retry = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3876  	tcon->need_reconnect = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3877  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3878  	/* now reconnect sessions for necessary channels */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3879  	list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3880  		tcon->ses = ses;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3881  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3882  		if (rc)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3883  			resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3884  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3885  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3886  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3887  	kfree(tcon);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3888  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3889  done:
81b88cd97eb7df Shyam Prasad N   2021-10-30  3890  	cifs_dbg(FYI, "Reconnecting tcons and channels finished\n");
18ea43113f5b74 Germano Percossi 2017-04-07  3891  	if (resched)
18ea43113f5b74 Germano Percossi 2017-04-07  3892  		queue_delayed_work(cifsiod_wq, &server->reconnect, 2 * HZ);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3893  	mutex_unlock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3894  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3895  	/* now we can safely release srv struct */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3896  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3897  		cifs_put_tcp_session(server, 1);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3898  }
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3899  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809
@ 2022-04-22  9:37 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2022-04-22  9:37 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 10213 bytes --]

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-cifs(a)vger.kernel.org
CC: samba-technical(a)lists.samba.org
TO: Shyam Prasad N <sprasad@microsoft.com>
CC: Steve French <stfrench@microsoft.com>

tree:   git://git.samba.org/sfrench/cifs-2.6.git tmp-mchan-branch
head:   5dcedd487447680668c095add4b24432a06b2644
commit: 81b88cd97eb7df45d283a92b56603f6e433a69b5 [14/21] cifs: check reconnects for channels of active tcons too
:::::: branch date: 3 months ago
:::::: commit date: 3 months ago
config: x86_64-randconfig-c022-20220117 (https://download.01.org/0day-ci/archive/20220422/202204221746.bDuYqNfI-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809

vim +3869 fs/cifs/smb2pdu.c

9094fad1ed90ca Pavel Shilovsky  2012-07-12  3784  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3785  void smb2_reconnect_server(struct work_struct *work)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3786  {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3787  	struct TCP_Server_Info *server = container_of(work,
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3788  					struct TCP_Server_Info, reconnect.work);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3789  	struct TCP_Server_Info *pserver;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3790  	struct cifs_ses *ses, *ses2;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3791  	struct cifs_tcon *tcon, *tcon2;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3792  	struct list_head tmp_list, tmp_ses_list;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3793  	bool tcon_exist = false, ses_exist = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3794  	bool tcon_selected = false, ses_selected = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3795  	int rc;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3796  	bool resched = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3797  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3798  	/* If server is a channel, select the primary channel */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3799  	pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3800  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3801  	/* Prevent simultaneous reconnects that can corrupt tcon->rlist list */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3802  	mutex_lock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3803  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3804  	INIT_LIST_HEAD(&tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3805  	INIT_LIST_HEAD(&tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3806  	cifs_dbg(FYI, "Reconnecting tcons and channels\n");
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3807  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3808  	spin_lock(&cifs_tcp_ses_lock);
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3809  	list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3810  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3811  		tcon_selected = ses_selected = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3812  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3813  		list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
96a988ffeb90db Pavel Shilovsky  2016-11-29  3814  			if (tcon->need_reconnect || tcon->need_reopen_files) {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3815  				tcon->tc_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3816  				list_add_tail(&tcon->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3817  				tcon_selected = tcon_exist = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3818  			}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3819  		}
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3820  		/*
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3821  		 * IPC has the same lifetime as its session and uses its
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3822  		 * refcount.
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3823  		 */
b327a717e50698 Aurelien Aptel   2018-01-24  3824  		if (ses->tcon_ipc && ses->tcon_ipc->need_reconnect) {
b327a717e50698 Aurelien Aptel   2018-01-24  3825  			list_add_tail(&ses->tcon_ipc->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3826  			tcon_selected = tcon_exist = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3827  			ses->ses_count++;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3828  		}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3829  		/*
81b88cd97eb7df Shyam Prasad N   2021-10-30  3830  		 * handle the case where channel needs to reconnect
81b88cd97eb7df Shyam Prasad N   2021-10-30  3831  		 * binding session, but tcon is healthy (some other channel
81b88cd97eb7df Shyam Prasad N   2021-10-30  3832  		 * is active)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3833  		 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3834  		if (!tcon_selected && cifs_chan_needs_reconnect(ses, server)) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3835  			list_add_tail(&ses->rlist, &tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3836  			ses_selected = ses_exist = true;
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3837  			ses->ses_count++;
b327a717e50698 Aurelien Aptel   2018-01-24  3838  		}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3839  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3840  	/*
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3841  	 * Get the reference to server struct to be sure that the last call of
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3842  	 * cifs_put_tcon() in the loop below won't release the server pointer.
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3843  	 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3844  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3845  		server->srv_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3846  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3847  	spin_unlock(&cifs_tcp_ses_lock);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3848  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3849  	list_for_each_entry_safe(tcon, tcon2, &tmp_list, rlist) {
352d96f3acc6e0 Aurelien Aptel   2020-05-31  3850  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
18ea43113f5b74 Germano Percossi 2017-04-07  3851  		if (!rc)
96a988ffeb90db Pavel Shilovsky  2016-11-29  3852  			cifs_reopen_persistent_handles(tcon);
18ea43113f5b74 Germano Percossi 2017-04-07  3853  		else
18ea43113f5b74 Germano Percossi 2017-04-07  3854  			resched = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3855  		list_del_init(&tcon->rlist);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3856  		if (tcon->ipc)
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3857  			cifs_put_smb_ses(tcon->ses);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3858  		else
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3859  			cifs_put_tcon(tcon);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3860  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3861  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3862  	if (!ses_exist)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3863  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3864  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3865  	/* allocate a dummy tcon struct used for reconnect */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3866  	tcon = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3867  	if (!tcon) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3868  		resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3869  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3870  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3871  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3872  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3873  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3874  	tcon->tidStatus = CifsGood;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3875  	tcon->retry = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3876  	tcon->need_reconnect = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3877  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3878  	/* now reconnect sessions for necessary channels */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3879  	list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3880  		tcon->ses = ses;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3881  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3882  		if (rc)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3883  			resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3884  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3885  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3886  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3887  	kfree(tcon);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3888  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3889  done:
81b88cd97eb7df Shyam Prasad N   2021-10-30  3890  	cifs_dbg(FYI, "Reconnecting tcons and channels finished\n");
18ea43113f5b74 Germano Percossi 2017-04-07  3891  	if (resched)
18ea43113f5b74 Germano Percossi 2017-04-07  3892  		queue_delayed_work(cifsiod_wq, &server->reconnect, 2 * HZ);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3893  	mutex_unlock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3894  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3895  	/* now we can safely release srv struct */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3896  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3897  		cifs_put_tcp_session(server, 1);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3898  }
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3899  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809
@ 2022-02-08 11:44 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2022-02-08 11:44 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 10252 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-cifs(a)vger.kernel.org
CC: samba-technical(a)lists.samba.org
TO: Shyam Prasad N <sprasad@microsoft.com>
CC: Steve French <stfrench@microsoft.com>

tree:   git://git.samba.org/sfrench/cifs-2.6.git tmp-mchan-branch
head:   5dcedd487447680668c095add4b24432a06b2644
commit: 81b88cd97eb7df45d283a92b56603f6e433a69b5 [14/21] cifs: check reconnects for channels of active tcons too
:::::: branch date: 3 weeks ago
:::::: commit date: 3 weeks ago
config: x86_64-randconfig-c022-20220117 (https://download.01.org/0day-ci/archive/20220208/202202081945.ce0L3eoG-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809

vim +3869 fs/cifs/smb2pdu.c

9094fad1ed90ca Pavel Shilovsky  2012-07-12  3784  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3785  void smb2_reconnect_server(struct work_struct *work)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3786  {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3787  	struct TCP_Server_Info *server = container_of(work,
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3788  					struct TCP_Server_Info, reconnect.work);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3789  	struct TCP_Server_Info *pserver;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3790  	struct cifs_ses *ses, *ses2;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3791  	struct cifs_tcon *tcon, *tcon2;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3792  	struct list_head tmp_list, tmp_ses_list;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3793  	bool tcon_exist = false, ses_exist = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3794  	bool tcon_selected = false, ses_selected = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3795  	int rc;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3796  	bool resched = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3797  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3798  	/* If server is a channel, select the primary channel */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3799  	pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3800  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3801  	/* Prevent simultaneous reconnects that can corrupt tcon->rlist list */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3802  	mutex_lock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3803  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3804  	INIT_LIST_HEAD(&tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3805  	INIT_LIST_HEAD(&tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3806  	cifs_dbg(FYI, "Reconnecting tcons and channels\n");
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3807  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3808  	spin_lock(&cifs_tcp_ses_lock);
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3809  	list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3810  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3811  		tcon_selected = ses_selected = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3812  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3813  		list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
96a988ffeb90db Pavel Shilovsky  2016-11-29  3814  			if (tcon->need_reconnect || tcon->need_reopen_files) {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3815  				tcon->tc_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3816  				list_add_tail(&tcon->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3817  				tcon_selected = tcon_exist = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3818  			}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3819  		}
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3820  		/*
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3821  		 * IPC has the same lifetime as its session and uses its
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3822  		 * refcount.
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3823  		 */
b327a717e50698 Aurelien Aptel   2018-01-24  3824  		if (ses->tcon_ipc && ses->tcon_ipc->need_reconnect) {
b327a717e50698 Aurelien Aptel   2018-01-24  3825  			list_add_tail(&ses->tcon_ipc->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3826  			tcon_selected = tcon_exist = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3827  			ses->ses_count++;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3828  		}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3829  		/*
81b88cd97eb7df Shyam Prasad N   2021-10-30  3830  		 * handle the case where channel needs to reconnect
81b88cd97eb7df Shyam Prasad N   2021-10-30  3831  		 * binding session, but tcon is healthy (some other channel
81b88cd97eb7df Shyam Prasad N   2021-10-30  3832  		 * is active)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3833  		 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3834  		if (!tcon_selected && cifs_chan_needs_reconnect(ses, server)) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3835  			list_add_tail(&ses->rlist, &tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3836  			ses_selected = ses_exist = true;
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3837  			ses->ses_count++;
b327a717e50698 Aurelien Aptel   2018-01-24  3838  		}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3839  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3840  	/*
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3841  	 * Get the reference to server struct to be sure that the last call of
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3842  	 * cifs_put_tcon() in the loop below won't release the server pointer.
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3843  	 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3844  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3845  		server->srv_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3846  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3847  	spin_unlock(&cifs_tcp_ses_lock);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3848  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3849  	list_for_each_entry_safe(tcon, tcon2, &tmp_list, rlist) {
352d96f3acc6e0 Aurelien Aptel   2020-05-31  3850  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
18ea43113f5b74 Germano Percossi 2017-04-07  3851  		if (!rc)
96a988ffeb90db Pavel Shilovsky  2016-11-29  3852  			cifs_reopen_persistent_handles(tcon);
18ea43113f5b74 Germano Percossi 2017-04-07  3853  		else
18ea43113f5b74 Germano Percossi 2017-04-07  3854  			resched = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3855  		list_del_init(&tcon->rlist);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3856  		if (tcon->ipc)
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3857  			cifs_put_smb_ses(tcon->ses);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3858  		else
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3859  			cifs_put_tcon(tcon);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3860  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3861  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3862  	if (!ses_exist)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3863  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3864  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3865  	/* allocate a dummy tcon struct used for reconnect */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3866  	tcon = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3867  	if (!tcon) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3868  		resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3869  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3870  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3871  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3872  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3873  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3874  	tcon->tidStatus = CifsGood;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3875  	tcon->retry = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3876  	tcon->need_reconnect = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3877  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3878  	/* now reconnect sessions for necessary channels */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3879  	list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3880  		tcon->ses = ses;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3881  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3882  		if (rc)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3883  			resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3884  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3885  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3886  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3887  	kfree(tcon);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3888  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3889  done:
81b88cd97eb7df Shyam Prasad N   2021-10-30  3890  	cifs_dbg(FYI, "Reconnecting tcons and channels finished\n");
18ea43113f5b74 Germano Percossi 2017-04-07  3891  	if (resched)
18ea43113f5b74 Germano Percossi 2017-04-07  3892  		queue_delayed_work(cifsiod_wq, &server->reconnect, 2 * HZ);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3893  	mutex_unlock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3894  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3895  	/* now we can safely release srv struct */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3896  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3897  		cifs_put_tcp_session(server, 1);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3898  }
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3899  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809
@ 2022-02-07  5:56 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2022-02-07  5:56 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 10252 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-cifs(a)vger.kernel.org
CC: samba-technical(a)lists.samba.org
TO: Shyam Prasad N <sprasad@microsoft.com>
CC: Steve French <stfrench@microsoft.com>

tree:   git://git.samba.org/sfrench/cifs-2.6.git tmp-mchan-branch
head:   5dcedd487447680668c095add4b24432a06b2644
commit: 81b88cd97eb7df45d283a92b56603f6e433a69b5 [14/21] cifs: check reconnects for channels of active tcons too
:::::: branch date: 3 weeks ago
:::::: commit date: 3 weeks ago
config: x86_64-randconfig-c022-20220117 (https://download.01.org/0day-ci/archive/20220207/202202071300.p4iFiNQU-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809

vim +3869 fs/cifs/smb2pdu.c

9094fad1ed90ca Pavel Shilovsky  2012-07-12  3784  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3785  void smb2_reconnect_server(struct work_struct *work)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3786  {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3787  	struct TCP_Server_Info *server = container_of(work,
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3788  					struct TCP_Server_Info, reconnect.work);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3789  	struct TCP_Server_Info *pserver;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3790  	struct cifs_ses *ses, *ses2;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3791  	struct cifs_tcon *tcon, *tcon2;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3792  	struct list_head tmp_list, tmp_ses_list;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3793  	bool tcon_exist = false, ses_exist = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3794  	bool tcon_selected = false, ses_selected = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3795  	int rc;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3796  	bool resched = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3797  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3798  	/* If server is a channel, select the primary channel */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3799  	pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3800  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3801  	/* Prevent simultaneous reconnects that can corrupt tcon->rlist list */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3802  	mutex_lock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3803  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3804  	INIT_LIST_HEAD(&tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3805  	INIT_LIST_HEAD(&tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3806  	cifs_dbg(FYI, "Reconnecting tcons and channels\n");
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3807  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3808  	spin_lock(&cifs_tcp_ses_lock);
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3809  	list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3810  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3811  		tcon_selected = ses_selected = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3812  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3813  		list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
96a988ffeb90db Pavel Shilovsky  2016-11-29  3814  			if (tcon->need_reconnect || tcon->need_reopen_files) {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3815  				tcon->tc_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3816  				list_add_tail(&tcon->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3817  				tcon_selected = tcon_exist = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3818  			}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3819  		}
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3820  		/*
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3821  		 * IPC has the same lifetime as its session and uses its
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3822  		 * refcount.
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3823  		 */
b327a717e50698 Aurelien Aptel   2018-01-24  3824  		if (ses->tcon_ipc && ses->tcon_ipc->need_reconnect) {
b327a717e50698 Aurelien Aptel   2018-01-24  3825  			list_add_tail(&ses->tcon_ipc->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3826  			tcon_selected = tcon_exist = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3827  			ses->ses_count++;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3828  		}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3829  		/*
81b88cd97eb7df Shyam Prasad N   2021-10-30  3830  		 * handle the case where channel needs to reconnect
81b88cd97eb7df Shyam Prasad N   2021-10-30  3831  		 * binding session, but tcon is healthy (some other channel
81b88cd97eb7df Shyam Prasad N   2021-10-30  3832  		 * is active)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3833  		 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3834  		if (!tcon_selected && cifs_chan_needs_reconnect(ses, server)) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3835  			list_add_tail(&ses->rlist, &tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3836  			ses_selected = ses_exist = true;
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3837  			ses->ses_count++;
b327a717e50698 Aurelien Aptel   2018-01-24  3838  		}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3839  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3840  	/*
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3841  	 * Get the reference to server struct to be sure that the last call of
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3842  	 * cifs_put_tcon() in the loop below won't release the server pointer.
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3843  	 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3844  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3845  		server->srv_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3846  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3847  	spin_unlock(&cifs_tcp_ses_lock);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3848  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3849  	list_for_each_entry_safe(tcon, tcon2, &tmp_list, rlist) {
352d96f3acc6e0 Aurelien Aptel   2020-05-31  3850  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
18ea43113f5b74 Germano Percossi 2017-04-07  3851  		if (!rc)
96a988ffeb90db Pavel Shilovsky  2016-11-29  3852  			cifs_reopen_persistent_handles(tcon);
18ea43113f5b74 Germano Percossi 2017-04-07  3853  		else
18ea43113f5b74 Germano Percossi 2017-04-07  3854  			resched = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3855  		list_del_init(&tcon->rlist);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3856  		if (tcon->ipc)
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3857  			cifs_put_smb_ses(tcon->ses);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3858  		else
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3859  			cifs_put_tcon(tcon);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3860  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3861  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3862  	if (!ses_exist)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3863  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3864  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3865  	/* allocate a dummy tcon struct used for reconnect */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3866  	tcon = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3867  	if (!tcon) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3868  		resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3869  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3870  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3871  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3872  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3873  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3874  	tcon->tidStatus = CifsGood;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3875  	tcon->retry = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3876  	tcon->need_reconnect = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3877  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3878  	/* now reconnect sessions for necessary channels */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3879  	list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3880  		tcon->ses = ses;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3881  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3882  		if (rc)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3883  			resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3884  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3885  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3886  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3887  	kfree(tcon);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3888  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3889  done:
81b88cd97eb7df Shyam Prasad N   2021-10-30  3890  	cifs_dbg(FYI, "Reconnecting tcons and channels finished\n");
18ea43113f5b74 Germano Percossi 2017-04-07  3891  	if (resched)
18ea43113f5b74 Germano Percossi 2017-04-07  3892  		queue_delayed_work(cifsiod_wq, &server->reconnect, 2 * HZ);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3893  	mutex_unlock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3894  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3895  	/* now we can safely release srv struct */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3896  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3897  		cifs_put_tcp_session(server, 1);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3898  }
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3899  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809
@ 2022-01-25  7:02 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2022-01-25  7:02 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 10250 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-cifs(a)vger.kernel.org
CC: samba-technical(a)lists.samba.org
TO: Shyam Prasad N <sprasad@microsoft.com>
CC: Steve French <stfrench@microsoft.com>

tree:   git://git.samba.org/sfrench/cifs-2.6.git tmp-mchan-branch
head:   5dcedd487447680668c095add4b24432a06b2644
commit: 81b88cd97eb7df45d283a92b56603f6e433a69b5 [14/21] cifs: check reconnects for channels of active tcons too
:::::: branch date: 8 days ago
:::::: commit date: 8 days ago
config: x86_64-randconfig-c022-20220117 (https://download.01.org/0day-ci/archive/20220125/202201251432.NdN6AWSx-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809

vim +3869 fs/cifs/smb2pdu.c

9094fad1ed90ca Pavel Shilovsky  2012-07-12  3784  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3785  void smb2_reconnect_server(struct work_struct *work)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3786  {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3787  	struct TCP_Server_Info *server = container_of(work,
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3788  					struct TCP_Server_Info, reconnect.work);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3789  	struct TCP_Server_Info *pserver;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3790  	struct cifs_ses *ses, *ses2;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3791  	struct cifs_tcon *tcon, *tcon2;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3792  	struct list_head tmp_list, tmp_ses_list;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3793  	bool tcon_exist = false, ses_exist = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3794  	bool tcon_selected = false, ses_selected = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3795  	int rc;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3796  	bool resched = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3797  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3798  	/* If server is a channel, select the primary channel */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3799  	pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3800  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3801  	/* Prevent simultaneous reconnects that can corrupt tcon->rlist list */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3802  	mutex_lock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3803  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3804  	INIT_LIST_HEAD(&tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3805  	INIT_LIST_HEAD(&tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3806  	cifs_dbg(FYI, "Reconnecting tcons and channels\n");
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3807  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3808  	spin_lock(&cifs_tcp_ses_lock);
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3809  	list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3810  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3811  		tcon_selected = ses_selected = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3812  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3813  		list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
96a988ffeb90db Pavel Shilovsky  2016-11-29  3814  			if (tcon->need_reconnect || tcon->need_reopen_files) {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3815  				tcon->tc_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3816  				list_add_tail(&tcon->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3817  				tcon_selected = tcon_exist = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3818  			}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3819  		}
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3820  		/*
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3821  		 * IPC has the same lifetime as its session and uses its
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3822  		 * refcount.
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3823  		 */
b327a717e50698 Aurelien Aptel   2018-01-24  3824  		if (ses->tcon_ipc && ses->tcon_ipc->need_reconnect) {
b327a717e50698 Aurelien Aptel   2018-01-24  3825  			list_add_tail(&ses->tcon_ipc->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3826  			tcon_selected = tcon_exist = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3827  			ses->ses_count++;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3828  		}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3829  		/*
81b88cd97eb7df Shyam Prasad N   2021-10-30  3830  		 * handle the case where channel needs to reconnect
81b88cd97eb7df Shyam Prasad N   2021-10-30  3831  		 * binding session, but tcon is healthy (some other channel
81b88cd97eb7df Shyam Prasad N   2021-10-30  3832  		 * is active)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3833  		 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3834  		if (!tcon_selected && cifs_chan_needs_reconnect(ses, server)) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3835  			list_add_tail(&ses->rlist, &tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3836  			ses_selected = ses_exist = true;
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3837  			ses->ses_count++;
b327a717e50698 Aurelien Aptel   2018-01-24  3838  		}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3839  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3840  	/*
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3841  	 * Get the reference to server struct to be sure that the last call of
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3842  	 * cifs_put_tcon() in the loop below won't release the server pointer.
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3843  	 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3844  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3845  		server->srv_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3846  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3847  	spin_unlock(&cifs_tcp_ses_lock);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3848  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3849  	list_for_each_entry_safe(tcon, tcon2, &tmp_list, rlist) {
352d96f3acc6e0 Aurelien Aptel   2020-05-31  3850  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
18ea43113f5b74 Germano Percossi 2017-04-07  3851  		if (!rc)
96a988ffeb90db Pavel Shilovsky  2016-11-29  3852  			cifs_reopen_persistent_handles(tcon);
18ea43113f5b74 Germano Percossi 2017-04-07  3853  		else
18ea43113f5b74 Germano Percossi 2017-04-07  3854  			resched = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3855  		list_del_init(&tcon->rlist);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3856  		if (tcon->ipc)
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3857  			cifs_put_smb_ses(tcon->ses);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3858  		else
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3859  			cifs_put_tcon(tcon);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3860  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3861  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3862  	if (!ses_exist)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3863  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3864  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3865  	/* allocate a dummy tcon struct used for reconnect */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3866  	tcon = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3867  	if (!tcon) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3868  		resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3869  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3870  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3871  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3872  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3873  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3874  	tcon->tidStatus = CifsGood;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3875  	tcon->retry = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3876  	tcon->need_reconnect = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3877  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3878  	/* now reconnect sessions for necessary channels */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3879  	list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3880  		tcon->ses = ses;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3881  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3882  		if (rc)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3883  			resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3884  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3885  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3886  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3887  	kfree(tcon);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3888  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3889  done:
81b88cd97eb7df Shyam Prasad N   2021-10-30  3890  	cifs_dbg(FYI, "Reconnecting tcons and channels finished\n");
18ea43113f5b74 Germano Percossi 2017-04-07  3891  	if (resched)
18ea43113f5b74 Germano Percossi 2017-04-07  3892  		queue_delayed_work(cifsiod_wq, &server->reconnect, 2 * HZ);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3893  	mutex_unlock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3894  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3895  	/* now we can safely release srv struct */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3896  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3897  		cifs_put_tcp_session(server, 1);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3898  }
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3899  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809
@ 2022-01-20 13:41 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2022-01-20 13:41 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 10250 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-cifs(a)vger.kernel.org
CC: samba-technical(a)lists.samba.org
TO: Shyam Prasad N <sprasad@microsoft.com>
CC: Steve French <stfrench@microsoft.com>

tree:   git://git.samba.org/sfrench/cifs-2.6.git tmp-mchan-branch
head:   5dcedd487447680668c095add4b24432a06b2644
commit: 81b88cd97eb7df45d283a92b56603f6e433a69b5 [14/21] cifs: check reconnects for channels of active tcons too
:::::: branch date: 3 days ago
:::::: commit date: 3 days ago
config: x86_64-randconfig-c022-20220117 (https://download.01.org/0day-ci/archive/20220120/202201202110.RLz0FiV5-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809

vim +3869 fs/cifs/smb2pdu.c

9094fad1ed90ca Pavel Shilovsky  2012-07-12  3784  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3785  void smb2_reconnect_server(struct work_struct *work)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3786  {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3787  	struct TCP_Server_Info *server = container_of(work,
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3788  					struct TCP_Server_Info, reconnect.work);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3789  	struct TCP_Server_Info *pserver;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3790  	struct cifs_ses *ses, *ses2;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3791  	struct cifs_tcon *tcon, *tcon2;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3792  	struct list_head tmp_list, tmp_ses_list;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3793  	bool tcon_exist = false, ses_exist = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3794  	bool tcon_selected = false, ses_selected = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3795  	int rc;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3796  	bool resched = false;
18ea43113f5b74 Germano Percossi 2017-04-07  3797  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3798  	/* If server is a channel, select the primary channel */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3799  	pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3800  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3801  	/* Prevent simultaneous reconnects that can corrupt tcon->rlist list */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3802  	mutex_lock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3803  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3804  	INIT_LIST_HEAD(&tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3805  	INIT_LIST_HEAD(&tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3806  	cifs_dbg(FYI, "Reconnecting tcons and channels\n");
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3807  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3808  	spin_lock(&cifs_tcp_ses_lock);
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3809  	list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3810  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3811  		tcon_selected = ses_selected = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3812  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3813  		list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
96a988ffeb90db Pavel Shilovsky  2016-11-29  3814  			if (tcon->need_reconnect || tcon->need_reopen_files) {
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3815  				tcon->tc_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3816  				list_add_tail(&tcon->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3817  				tcon_selected = tcon_exist = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3818  			}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3819  		}
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3820  		/*
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3821  		 * IPC has the same lifetime as its session and uses its
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3822  		 * refcount.
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3823  		 */
b327a717e50698 Aurelien Aptel   2018-01-24  3824  		if (ses->tcon_ipc && ses->tcon_ipc->need_reconnect) {
b327a717e50698 Aurelien Aptel   2018-01-24  3825  			list_add_tail(&ses->tcon_ipc->rlist, &tmp_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3826  			tcon_selected = tcon_exist = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3827  			ses->ses_count++;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3828  		}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3829  		/*
81b88cd97eb7df Shyam Prasad N   2021-10-30  3830  		 * handle the case where channel needs to reconnect
81b88cd97eb7df Shyam Prasad N   2021-10-30  3831  		 * binding session, but tcon is healthy (some other channel
81b88cd97eb7df Shyam Prasad N   2021-10-30  3832  		 * is active)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3833  		 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3834  		if (!tcon_selected && cifs_chan_needs_reconnect(ses, server)) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3835  			list_add_tail(&ses->rlist, &tmp_ses_list);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3836  			ses_selected = ses_exist = true;
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3837  			ses->ses_count++;
b327a717e50698 Aurelien Aptel   2018-01-24  3838  		}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3839  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3840  	/*
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3841  	 * Get the reference to server struct to be sure that the last call of
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3842  	 * cifs_put_tcon() in the loop below won't release the server pointer.
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3843  	 */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3844  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3845  		server->srv_count++;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3846  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3847  	spin_unlock(&cifs_tcp_ses_lock);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3848  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3849  	list_for_each_entry_safe(tcon, tcon2, &tmp_list, rlist) {
352d96f3acc6e0 Aurelien Aptel   2020-05-31  3850  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
18ea43113f5b74 Germano Percossi 2017-04-07  3851  		if (!rc)
96a988ffeb90db Pavel Shilovsky  2016-11-29  3852  			cifs_reopen_persistent_handles(tcon);
18ea43113f5b74 Germano Percossi 2017-04-07  3853  		else
18ea43113f5b74 Germano Percossi 2017-04-07  3854  			resched = true;
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3855  		list_del_init(&tcon->rlist);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3856  		if (tcon->ipc)
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3857  			cifs_put_smb_ses(tcon->ses);
0ff2b018b02f89 Ronnie Sahlberg  2019-06-05  3858  		else
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3859  			cifs_put_tcon(tcon);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3860  	}
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3861  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3862  	if (!ses_exist)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3863  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3864  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3865  	/* allocate a dummy tcon struct used for reconnect */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3866  	tcon = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3867  	if (!tcon) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3868  		resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30 @3869  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3870  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3871  		goto done;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3872  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3873  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3874  	tcon->tidStatus = CifsGood;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3875  	tcon->retry = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3876  	tcon->need_reconnect = false;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3877  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3878  	/* now reconnect sessions for necessary channels */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3879  	list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
81b88cd97eb7df Shyam Prasad N   2021-10-30  3880  		tcon->ses = ses;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3881  		rc = smb2_reconnect(SMB2_INTERNAL_CMD, tcon, server);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3882  		if (rc)
81b88cd97eb7df Shyam Prasad N   2021-10-30  3883  			resched = true;
81b88cd97eb7df Shyam Prasad N   2021-10-30  3884  		list_del_init(&ses->rlist);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3885  		cifs_put_smb_ses(ses);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3886  	}
81b88cd97eb7df Shyam Prasad N   2021-10-30  3887  	kfree(tcon);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3888  
81b88cd97eb7df Shyam Prasad N   2021-10-30  3889  done:
81b88cd97eb7df Shyam Prasad N   2021-10-30  3890  	cifs_dbg(FYI, "Reconnecting tcons and channels finished\n");
18ea43113f5b74 Germano Percossi 2017-04-07  3891  	if (resched)
18ea43113f5b74 Germano Percossi 2017-04-07  3892  		queue_delayed_work(cifsiod_wq, &server->reconnect, 2 * HZ);
81b88cd97eb7df Shyam Prasad N   2021-10-30  3893  	mutex_unlock(&pserver->reconnect_mutex);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3894  
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3895  	/* now we can safely release srv struct */
81b88cd97eb7df Shyam Prasad N   2021-10-30  3896  	if (tcon_exist || ses_exist)
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3897  		cifs_put_tcp_session(server, 1);
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3898  }
53e0e11efe9289 Pavel Shilovsky  2016-11-04  3899  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-04-22  9:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-17 19:56 [cifs:tmp-mchan-branch 14/21] fs/cifs/smb2pdu.c:3869:17-20: ERROR: invalid reference to the index variable of the iterator on line 3809 kernel test robot
2022-01-20 13:41 kernel test robot
2022-01-25  7:02 kernel test robot
2022-02-07  5:56 kernel test robot
2022-02-08 11:44 kernel test robot
2022-04-22  9:37 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.