Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag '5.17-rc4-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6

Pull cifs fixes from Steve French:
"Three small smb3 reconnect fixes and an error log clarification"

* tag '5.17-rc4-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6:
cifs: mark sessions for reconnection in helper function
cifs: call helper functions for marking channels for reconnect
cifs: call cifs_reconnect when a connection is marked
[smb3] improve error message when mount options conflict with posix

+31 -17
+3 -3
fs/cifs/cifs_swn.c
··· 396 396 switch (state) { 397 397 case CIFS_SWN_RESOURCE_STATE_UNAVAILABLE: 398 398 cifs_dbg(FYI, "%s: resource name '%s' become unavailable\n", __func__, name); 399 - cifs_reconnect(swnreg->tcon->ses->server, true); 399 + cifs_mark_tcp_ses_conns_for_reconnect(swnreg->tcon->ses->server, true); 400 400 break; 401 401 case CIFS_SWN_RESOURCE_STATE_AVAILABLE: 402 402 cifs_dbg(FYI, "%s: resource name '%s' become available\n", __func__, name); 403 - cifs_reconnect(swnreg->tcon->ses->server, true); 403 + cifs_mark_tcp_ses_conns_for_reconnect(swnreg->tcon->ses->server, true); 404 404 break; 405 405 case CIFS_SWN_RESOURCE_STATE_UNKNOWN: 406 406 cifs_dbg(FYI, "%s: resource name '%s' changed to unknown state\n", __func__, name); ··· 498 498 goto unlock; 499 499 } 500 500 501 - cifs_reconnect(tcon->ses->server, false); 501 + cifs_mark_tcp_ses_conns_for_reconnect(tcon->ses->server, false); 502 502 503 503 unlock: 504 504 mutex_unlock(&tcon->ses->server->srv_mutex);
+25 -6
fs/cifs/connect.c
··· 175 175 struct TCP_Server_Info *pserver; 176 176 struct cifs_ses *ses; 177 177 struct cifs_tcon *tcon; 178 - struct mid_q_entry *mid, *nmid; 179 - struct list_head retry_list; 180 - 181 - server->maxBuf = 0; 182 - server->max_read = 0; 183 178 184 179 /* 185 180 * before reconnecting the tcp session, mark the smb session (uid) and the tid bad so they ··· 214 219 spin_unlock(&ses->chan_lock); 215 220 } 216 221 spin_unlock(&cifs_tcp_ses_lock); 222 + } 223 + 224 + static void 225 + cifs_abort_connection(struct TCP_Server_Info *server) 226 + { 227 + struct mid_q_entry *mid, *nmid; 228 + struct list_head retry_list; 229 + 230 + server->maxBuf = 0; 231 + server->max_read = 0; 217 232 218 233 /* do not want to be sending data on a socket we are freeing */ 219 234 cifs_dbg(FYI, "%s: tearing down socket\n", __func__); ··· 314 309 return 0; 315 310 316 311 cifs_mark_tcp_ses_conns_for_reconnect(server, mark_smb_session); 312 + 313 + cifs_abort_connection(server); 317 314 318 315 do { 319 316 try_to_freeze(); ··· 440 433 return 0; 441 434 442 435 cifs_mark_tcp_ses_conns_for_reconnect(server, mark_smb_session); 436 + 437 + cifs_abort_connection(server); 443 438 444 439 do { 445 440 try_to_freeze(); ··· 648 639 649 640 if (server->tcpStatus == CifsNeedReconnect) { 650 641 spin_unlock(&cifs_tcp_ses_lock); 642 + cifs_reconnect(server, false); 651 643 return -ECONNABORTED; 652 644 } 653 645 spin_unlock(&cifs_tcp_ses_lock); ··· 2350 2340 if (ses->server->posix_ext_supported) { 2351 2341 tcon->posix_extensions = true; 2352 2342 pr_warn_once("SMB3.11 POSIX Extensions are experimental\n"); 2353 - } else { 2343 + } else if ((ses->server->vals->protocol_id == SMB311_PROT_ID) || 2344 + (strcmp(ses->server->vals->version_string, 2345 + SMB3ANY_VERSION_STRING) == 0) || 2346 + (strcmp(ses->server->vals->version_string, 2347 + SMBDEFAULT_VERSION_STRING) == 0)) { 2354 2348 cifs_dbg(VFS, "Server does not support mounting with posix SMB3.11 extensions\n"); 2349 + rc = -EOPNOTSUPP; 2350 + goto out_fail; 2351 + } else { 2352 + cifs_dbg(VFS, "Check vers= mount option. SMB3.11 " 2353 + "disabled but required for POSIX extensions\n"); 2355 2354 rc = -EOPNOTSUPP; 2356 2355 goto out_fail; 2357 2356 }
+1 -1
fs/cifs/dfs_cache.c
··· 1355 1355 } 1356 1356 1357 1357 cifs_dbg(FYI, "%s: no cached or matched targets. mark dfs share for reconnect.\n", __func__); 1358 - cifs_reconnect(tcon->ses->server, true); 1358 + cifs_mark_tcp_ses_conns_for_reconnect(tcon->ses->server, true); 1359 1359 } 1360 1360 1361 1361 /* Refresh dfs referral of tcon and mark it for reconnect if needed */
+1 -3
fs/cifs/smb1ops.c
··· 228 228 spin_unlock(&GlobalMid_Lock); 229 229 230 230 if (reconnect) { 231 - spin_lock(&cifs_tcp_ses_lock); 232 - server->tcpStatus = CifsNeedReconnect; 233 - spin_unlock(&cifs_tcp_ses_lock); 231 + cifs_mark_tcp_ses_conns_for_reconnect(server, false); 234 232 } 235 233 236 234 return mid;
+1 -4
fs/cifs/transport.c
··· 430 430 * be taken as the remainder of this one. We need to kill the 431 431 * socket so the server throws away the partial SMB 432 432 */ 433 - spin_lock(&cifs_tcp_ses_lock); 434 - if (server->tcpStatus != CifsExiting) 435 - server->tcpStatus = CifsNeedReconnect; 436 - spin_unlock(&cifs_tcp_ses_lock); 433 + cifs_mark_tcp_ses_conns_for_reconnect(server, false); 437 434 trace_smb3_partial_send_reconnect(server->CurrentMid, 438 435 server->conn_id, server->hostname); 439 436 }