From: kernel test robot <lkp@intel.com>
To: Shyam Prasad N <nspmangalore@gmail.com>,
smfrench@gmail.com, bharathsm.hsk@gmail.com, pc@cjr.nz,
tom@talpey.com, linux-cifs@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev, Shyam Prasad N <sprasad@microsoft.com>
Subject: Re: [PATCH 09/11] cifs: account for primary channel in the interface list
Date: Mon, 13 Mar 2023 13:27:45 +0800 [thread overview]
Message-ID: <202303131349.VOlTuw2U-lkp@intel.com> (raw)
In-Reply-To: <20230310153211.10982-9-sprasad@microsoft.com>
Hi Shyam,
I love your patch! Perhaps something to improve:
[auto build test WARNING on cifs/for-next]
[also build test WARNING on linus/master v6.3-rc2 next-20230310]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Shyam-Prasad-N/cifs-generate-signkey-for-the-channel-that-s-reconnecting/20230310-234711
base: git://git.samba.org/sfrench/cifs-2.6.git for-next
patch link: https://lore.kernel.org/r/20230310153211.10982-9-sprasad%40microsoft.com
patch subject: [PATCH 09/11] cifs: account for primary channel in the interface list
config: i386-randconfig-m021 (https://download.01.org/0day-ci/archive/20230313/202303131349.VOlTuw2U-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303131349.VOlTuw2U-lkp@intel.com/
New smatch warnings:
fs/cifs/sess.c:366 cifs_chan_update_iface() warn: unsigned '--old_iface->weight_fulfilled' is never less than zero.
Old smatch warnings:
fs/cifs/sess.c:377 cifs_chan_update_iface() warn: unsigned '--old_iface->weight_fulfilled' is never less than zero.
vim +366 fs/cifs/sess.c
276
277 /*
278 * update the iface for the channel if necessary.
279 * will return 0 when iface is updated, 1 if removed, 2 otherwise
280 * Must be called with chan_lock held.
281 */
282 int
283 cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server)
284 {
285 unsigned int chan_index;
286 size_t iface_weight = 0, iface_min_speed = 0;
287 struct cifs_server_iface *iface = NULL;
288 struct cifs_server_iface *old_iface = NULL;
289 struct cifs_server_iface *last_iface = NULL;
290 int rc = 0;
291
292 spin_lock(&ses->chan_lock);
293 chan_index = cifs_ses_get_chan_index(ses, server);
294 if (ses->chans[chan_index].iface) {
295 old_iface = ses->chans[chan_index].iface;
296 if (old_iface->is_active) {
297 spin_unlock(&ses->chan_lock);
298 return 1;
299 }
300 }
301 spin_unlock(&ses->chan_lock);
302
303 spin_lock(&ses->iface_lock);
304 if (!ses->iface_count) {
305 spin_unlock(&ses->iface_lock);
306 cifs_dbg(VFS, "server %s does not advertise interfaces\n", ses->server->hostname);
307 return 0;
308 }
309
310 last_iface = list_last_entry(&ses->iface_list, struct cifs_server_iface,
311 iface_head);
312 iface_min_speed = last_iface->speed;
313
314 /* then look for a new one */
315 list_for_each_entry(iface, &ses->iface_list, iface_head) {
316 if (!chan_index) {
317 /* if we're trying to get the updated iface for primary channel */
318 if (!cifs_match_ipaddr((struct sockaddr *) &server->dstaddr,
319 (struct sockaddr *) &iface->sockaddr))
320 continue;
321
322 kref_get(&iface->refcount);
323 break;
324 }
325
326 /* do not mix rdma and non-rdma interfaces */
327 if (iface->rdma_capable != server->rdma)
328 continue;
329
330 if (!iface->is_active ||
331 (is_ses_using_iface(ses, iface) &&
332 !iface->rss_capable)) {
333 continue;
334 }
335
336 /* check if we already allocated enough channels */
337 iface_weight = iface->speed / iface_min_speed;
338
339 if (iface->weight_fulfilled >= iface_weight)
340 continue;
341
342 kref_get(&iface->refcount);
343 break;
344 }
345
346 if (list_entry_is_head(iface, &ses->iface_list, iface_head)) {
347 rc = 1;
348 iface = NULL;
349 cifs_dbg(FYI, "unable to find a suitable iface\n");
350 }
351
352 if (!chan_index && !iface) {
353 cifs_dbg(VFS, "unable to get the interface matching: %pIS\n",
354 &server->dstaddr);
355 spin_unlock(&ses->iface_lock);
356 return 0;
357 }
358
359 /* now drop the ref to the current iface */
360 if (old_iface && iface) {
361 cifs_dbg(FYI, "replacing iface: %pIS with %pIS\n",
362 &old_iface->sockaddr,
363 &iface->sockaddr);
364
365 old_iface->num_channels--;
> 366 if (--old_iface->weight_fulfilled < 0)
367 old_iface->weight_fulfilled = 0;
368 iface->num_channels++;
369 iface->weight_fulfilled++;
370
371 kref_put(&old_iface->refcount, release_iface);
372 } else if (old_iface) {
373 cifs_dbg(FYI, "releasing ref to iface: %pIS\n",
374 &old_iface->sockaddr);
375
376 old_iface->num_channels--;
377 if (--old_iface->weight_fulfilled < 0)
378 old_iface->weight_fulfilled = 0;
379
380 kref_put(&old_iface->refcount, release_iface);
381 } else if (!chan_index) {
382 /* special case: update interface for primary channel */
383 cifs_dbg(FYI, "referencing primary channel iface: %pIS\n",
384 &iface->sockaddr);
385 iface->num_channels++;
386 iface->weight_fulfilled++;
387 } else {
388 WARN_ON(!iface);
389 cifs_dbg(FYI, "adding new iface: %pIS\n", &iface->sockaddr);
390 }
391 spin_unlock(&ses->iface_lock);
392
393 spin_lock(&ses->chan_lock);
394 chan_index = cifs_ses_get_chan_index(ses, server);
395 ses->chans[chan_index].iface = iface;
396
397 /* No iface is found. if secondary chan, drop connection */
398 if (!iface && CIFS_SERVER_IS_CHAN(server))
399 ses->chans[chan_index].server = NULL;
400
401 spin_unlock(&ses->chan_lock);
402
403 if (!iface && CIFS_SERVER_IS_CHAN(server))
404 cifs_put_tcp_session(server, false);
405
406 return rc;
407 }
408
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
next prev parent reply other threads:[~2023-03-13 5:28 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-10 15:32 [PATCH 01/11] cifs: fix tcon status change after tree connect Shyam Prasad N
2023-03-10 15:32 ` [PATCH 02/11] cifs: generate signkey for the channel that's reconnecting Shyam Prasad N
2023-03-10 15:32 ` [PATCH 03/11] cifs: avoid race conditions with parallel reconnects Shyam Prasad N
2023-03-10 15:32 ` [PATCH 04/11] cifs: serialize channel reconnects Shyam Prasad N
2023-03-10 22:40 ` Steve French
2023-03-10 15:32 ` [PATCH 05/11] cifs: lock chan_lock outside match_session Shyam Prasad N
2023-03-10 15:32 ` [PATCH 06/11] cifs: fix sockaddr comparison in iface_cmp Shyam Prasad N
2023-03-11 4:51 ` kernel test robot
2023-03-10 15:32 ` [PATCH 07/11] cifs: do not poll server interfaces too regularly Shyam Prasad N
2023-03-10 15:32 ` [PATCH 08/11] cifs: distribute channels across interfaces based on speed Shyam Prasad N
2024-02-27 11:16 ` Jan Čermák
2024-02-27 16:17 ` Shyam Prasad N
2024-02-28 9:22 ` Jan Čermák
2024-03-05 14:56 ` Shyam Prasad N
2024-03-06 15:43 ` Paulo Alcantara
2024-03-11 10:01 ` Jan Čermák
2024-03-11 11:14 ` Shyam Prasad N
2024-03-12 14:20 ` Jan Čermák
2024-03-13 10:45 ` Shyam Prasad N
2024-03-26 14:10 ` Jan Čermák
2023-03-10 15:32 ` [PATCH 09/11] cifs: account for primary channel in the interface list Shyam Prasad N
2023-03-13 5:27 ` kernel test robot [this message]
2023-03-10 15:32 ` [PATCH 10/11] cifs: handle when server stops supporting multichannel Shyam Prasad N
2023-03-13 6:09 ` kernel test robot
2023-03-10 15:32 ` [PATCH 11/11] cifs: empty interface list when server doesn't support query interfaces Shyam Prasad N
2023-03-14 22:19 ` [PATCH 01/11] cifs: fix tcon status change after tree connect Paulo Alcantara
2023-03-16 10:57 ` Shyam Prasad N
2023-03-16 20:59 ` Paulo Alcantara
2023-03-17 10:48 ` Shyam Prasad N
2023-03-17 12:35 ` Paulo Alcantara
2023-03-17 18:25 ` Steve French
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=202303131349.VOlTuw2U-lkp@intel.com \
--to=lkp@intel.com \
--cc=bharathsm.hsk@gmail.com \
--cc=linux-cifs@vger.kernel.org \
--cc=nspmangalore@gmail.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=pc@cjr.nz \
--cc=smfrench@gmail.com \
--cc=sprasad@microsoft.com \
--cc=tom@talpey.com \
/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.