int
 cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server);
 int
-SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon);
+SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon, bool in_mount);
 
 void extract_unc_hostname(const char *unc, const char **h, size_t *len);
 int copy_path_name(char *dst, const char *src);
 
        /*
         * query server network interfaces, in case they change
         */
-       rc = SMB3_request_interfaces(0, tcon);
+       rc = SMB3_request_interfaces(0, tcon, false);
        if (rc) {
                cifs_dbg(FYI, "%s: failed to query server interfaces: %d\n",
                                __func__, rc);
 
 
 static int
 parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,
-                       size_t buf_len,
-                       struct cifs_ses *ses)
+                       size_t buf_len, struct cifs_ses *ses, bool in_mount)
 {
        struct network_interface_info_ioctl_rsp *p;
        struct sockaddr_in *addr4;
        }
        spin_unlock(&ses->iface_lock);
 
+       /*
+        * Samba server e.g. can return an empty interface list in some cases,
+        * which would only be a problem if we were requesting multichannel
+        */
+       if (bytes_left == 0) {
+               /* avoid spamming logs every 10 minutes, so log only in mount */
+               if ((ses->chan_max > 1) && in_mount)
+                       cifs_dbg(VFS,
+                                "empty network interface list returned by server %s\n",
+                                ses->server->hostname);
+               rc = -EINVAL;
+               goto out;
+       }
+
        while (bytes_left >= sizeof(*p)) {
                memset(&tmp_iface, 0, sizeof(tmp_iface));
                tmp_iface.speed = le64_to_cpu(p->LinkSpeed);
 }
 
 int
-SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon)
+SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon, bool in_mount)
 {
        int rc;
        unsigned int ret_data_len = 0;
                goto out;
        }
 
-       rc = parse_server_interfaces(out_buf, ret_data_len, ses);
+       rc = parse_server_interfaces(out_buf, ret_data_len, ses, in_mount);
        if (rc)
                goto out;
 
        if (rc)
                return;
 
-       SMB3_request_interfaces(xid, tcon);
+       SMB3_request_interfaces(xid, tcon, true /* called during  mount */);
 
        SMB2_QFS_attr(xid, tcon, fid.persistent_fid, fid.volatile_fid,
                        FS_ATTRIBUTE_INFORMATION);