Skip to content

Commit baa172c

Browse files
committed
Merge tag '6.13-rc3-SMB3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6
Pull smb client fixes from Steve French: - fix regression in display of write stats - fix rmmod failure with network namespaces - two minor cleanups * tag '6.13-rc3-SMB3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6: smb: fix bytes written value in /proc/fs/cifs/Stats smb: client: fix TCP timers deadlock after rmmod smb: client: Deduplicate "select NETFS_SUPPORT" in Kconfig smb: use macros instead of constants for leasekey size and default cifsattrs value
2 parents 4a5da3f + 92941c7 commit baa172c

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

fs/smb/client/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
config CIFS
33
tristate "SMB3 and CIFS support (advanced network filesystem)"
44
depends on INET
5-
select NETFS_SUPPORT
65
select NLS
76
select NLS_UCS2_UTILS
87
select CRYPTO

fs/smb/client/cifsfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ cifs_alloc_inode(struct super_block *sb)
398398
cifs_inode = alloc_inode_sb(sb, cifs_inode_cachep, GFP_KERNEL);
399399
if (!cifs_inode)
400400
return NULL;
401-
cifs_inode->cifsAttrs = 0x20; /* default */
401+
cifs_inode->cifsAttrs = ATTR_ARCHIVE; /* default */
402402
cifs_inode->time = 0;
403403
/*
404404
* Until the file is open and we have gotten oplock info back from the

fs/smb/client/connect.c

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -987,9 +987,13 @@ clean_demultiplex_info(struct TCP_Server_Info *server)
987987
msleep(125);
988988
if (cifs_rdma_enabled(server))
989989
smbd_destroy(server);
990+
990991
if (server->ssocket) {
991992
sock_release(server->ssocket);
992993
server->ssocket = NULL;
994+
995+
/* Release netns reference for the socket. */
996+
put_net(cifs_net_ns(server));
993997
}
994998

995999
if (!list_empty(&server->pending_mid_q)) {
@@ -1037,6 +1041,7 @@ clean_demultiplex_info(struct TCP_Server_Info *server)
10371041
*/
10381042
}
10391043

1044+
/* Release netns reference for this server. */
10401045
put_net(cifs_net_ns(server));
10411046
kfree(server->leaf_fullpath);
10421047
kfree(server);
@@ -1713,6 +1718,8 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
17131718

17141719
tcp_ses->ops = ctx->ops;
17151720
tcp_ses->vals = ctx->vals;
1721+
1722+
/* Grab netns reference for this server. */
17161723
cifs_set_net_ns(tcp_ses, get_net(current->nsproxy->net_ns));
17171724

17181725
tcp_ses->conn_id = atomic_inc_return(&tcpSesNextId);
@@ -1844,6 +1851,7 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
18441851
out_err_crypto_release:
18451852
cifs_crypto_secmech_release(tcp_ses);
18461853

1854+
/* Release netns reference for this server. */
18471855
put_net(cifs_net_ns(tcp_ses));
18481856

18491857
out_err:
@@ -1852,8 +1860,10 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
18521860
cifs_put_tcp_session(tcp_ses->primary_server, false);
18531861
kfree(tcp_ses->hostname);
18541862
kfree(tcp_ses->leaf_fullpath);
1855-
if (tcp_ses->ssocket)
1863+
if (tcp_ses->ssocket) {
18561864
sock_release(tcp_ses->ssocket);
1865+
put_net(cifs_net_ns(tcp_ses));
1866+
}
18571867
kfree(tcp_ses);
18581868
}
18591869
return ERR_PTR(rc);
@@ -3131,20 +3141,20 @@ generic_ip_connect(struct TCP_Server_Info *server)
31313141
socket = server->ssocket;
31323142
} else {
31333143
struct net *net = cifs_net_ns(server);
3134-
struct sock *sk;
31353144

3136-
rc = __sock_create(net, sfamily, SOCK_STREAM,
3137-
IPPROTO_TCP, &server->ssocket, 1);
3145+
rc = sock_create_kern(net, sfamily, SOCK_STREAM, IPPROTO_TCP, &server->ssocket);
31383146
if (rc < 0) {
31393147
cifs_server_dbg(VFS, "Error %d creating socket\n", rc);
31403148
return rc;
31413149
}
31423150

3143-
sk = server->ssocket->sk;
3144-
__netns_tracker_free(net, &sk->ns_tracker, false);
3145-
sk->sk_net_refcnt = 1;
3146-
get_net_track(net, &sk->ns_tracker, GFP_KERNEL);
3147-
sock_inuse_add(net, 1);
3151+
/*
3152+
* Grab netns reference for the socket.
3153+
*
3154+
* It'll be released here, on error, or in clean_demultiplex_info() upon server
3155+
* teardown.
3156+
*/
3157+
get_net(net);
31483158

31493159
/* BB other socket options to set KEEPALIVE, NODELAY? */
31503160
cifs_dbg(FYI, "Socket created\n");
@@ -3158,8 +3168,10 @@ generic_ip_connect(struct TCP_Server_Info *server)
31583168
}
31593169

31603170
rc = bind_socket(server);
3161-
if (rc < 0)
3171+
if (rc < 0) {
3172+
put_net(cifs_net_ns(server));
31623173
return rc;
3174+
}
31633175

31643176
/*
31653177
* Eventually check for other socket options to change from
@@ -3196,6 +3208,7 @@ generic_ip_connect(struct TCP_Server_Info *server)
31963208
if (rc < 0) {
31973209
cifs_dbg(FYI, "Error %d connecting to server\n", rc);
31983210
trace_smb3_connect_err(server->hostname, server->conn_id, &server->dstaddr, rc);
3211+
put_net(cifs_net_ns(server));
31993212
sock_release(socket);
32003213
server->ssocket = NULL;
32013214
return rc;
@@ -3204,6 +3217,9 @@ generic_ip_connect(struct TCP_Server_Info *server)
32043217
if (sport == htons(RFC1001_PORT))
32053218
rc = ip_rfc1001_connect(server);
32063219

3220+
if (rc < 0)
3221+
put_net(cifs_net_ns(server));
3222+
32073223
return rc;
32083224
}
32093225

fs/smb/client/smb2pdu.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4840,6 +4840,8 @@ smb2_writev_callback(struct mid_q_entry *mid)
48404840
if (written > wdata->subreq.len)
48414841
written &= 0xFFFF;
48424842

4843+
cifs_stats_bytes_written(tcon, written);
4844+
48434845
if (written < wdata->subreq.len)
48444846
wdata->result = -ENOSPC;
48454847
else
@@ -5156,6 +5158,7 @@ SMB2_write(const unsigned int xid, struct cifs_io_parms *io_parms,
51565158
cifs_dbg(VFS, "Send error in write = %d\n", rc);
51575159
} else {
51585160
*nbytes = le32_to_cpu(rsp->DataLength);
5161+
cifs_stats_bytes_written(io_parms->tcon, *nbytes);
51595162
trace_smb3_write_done(0, 0, xid,
51605163
req->PersistentFileId,
51615164
io_parms->tcon->tid,
@@ -6204,7 +6207,7 @@ SMB2_lease_break(const unsigned int xid, struct cifs_tcon *tcon,
62046207
req->StructureSize = cpu_to_le16(36);
62056208
total_len += 12;
62066209

6207-
memcpy(req->LeaseKey, lease_key, 16);
6210+
memcpy(req->LeaseKey, lease_key, SMB2_LEASE_KEY_SIZE);
62086211
req->LeaseState = lease_state;
62096212

62106213
flags |= CIFS_NO_RSP_BUF;

0 commit comments

Comments
 (0)