Updated patch attached. Let me know if any objections. Paulo, I made minor updates to Shyam's patch following your suggestion of changing the logging level you suggested, and saving off dstaddr so we don't have to hold a lock on it On Wed, Nov 8, 2023 at 9:44 AM Paulo Alcantara wrote: > > nspmangalore@gmail.com writes: > > > From: Shyam Prasad N > > > > The refcounting of server interfaces should account > > for the primary channel too. Although this is not > > strictly necessary, doing so will account for the primary > > channel in DebugData. > > > > Signed-off-by: Shyam Prasad N > > --- > > fs/smb/client/sess.c | 23 +++++++++++++++++++++++ > > fs/smb/client/smb2ops.c | 6 ++++++ > > 2 files changed, 29 insertions(+) > > > > diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c > > index d009994f82cf..6843deed6119 100644 > > --- a/fs/smb/client/sess.c > > +++ b/fs/smb/client/sess.c > > @@ -332,6 +332,16 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server) > > > > /* then look for a new one */ > > list_for_each_entry(iface, &ses->iface_list, iface_head) { > > + if (!chan_index) { > > + /* if we're trying to get the updated iface for primary channel */ > > + if (!cifs_match_ipaddr((struct sockaddr *) &server->dstaddr, > > + (struct sockaddr *) &iface->sockaddr)) > > + continue; > > You should hold @server->srv_lock to protect access of @server->dstaddr > as it might change over reconnect or mount. > > > + > > + kref_get(&iface->refcount); > > + break; > > + } > > + > > /* do not mix rdma and non-rdma interfaces */ > > if (iface->rdma_capable != server->rdma) > > continue; > > @@ -358,6 +368,13 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server) > > cifs_dbg(FYI, "unable to find a suitable iface\n"); > > } > > > > + if (!chan_index && !iface) { > > + cifs_dbg(VFS, "unable to get the interface matching: %pIS\n", > > + &server->dstaddr); > > Ditto. > > Also, I think you should log in FYI level as the above doesn't seem > unlikely to happen. -- Thanks, Steve