Skip to content

Commit 714820c

Browse files
committed
Merge tag '6.0-rc5-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6
Pull cifs fixes from Steve French: "Four smb3 fixes for stable: - important fix to revalidate mapping when doing direct writes - missing spinlock - two fixes to socket handling - trivial change to update internal version number for cifs.ko" * tag '6.0-rc5-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: update internal module number cifs: add missing spinlock around tcon refcount cifs: always initialize struct msghdr smb_msg completely cifs: don't send down the destination address to sendmsg for a SOCK_STREAM cifs: revalidate mapping when doing direct writes
2 parents 3245cb6 + 8af8aed commit 714820c

File tree

4 files changed

+12
-15
lines changed

4 files changed

+12
-15
lines changed

fs/cifs/cifsfs.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,6 @@ extern const struct export_operations cifs_export_ops;
153153
#endif /* CONFIG_CIFS_NFSD_EXPORT */
154154

155155
/* when changing internal version - update following two lines at same time */
156-
#define SMB3_PRODUCT_BUILD 38
157-
#define CIFS_VERSION "2.38"
156+
#define SMB3_PRODUCT_BUILD 39
157+
#define CIFS_VERSION "2.39"
158158
#endif /* _CIFSFS_H */

fs/cifs/connect.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -702,9 +702,6 @@ cifs_readv_from_socket(struct TCP_Server_Info *server, struct msghdr *smb_msg)
702702
int length = 0;
703703
int total_read;
704704

705-
smb_msg->msg_control = NULL;
706-
smb_msg->msg_controllen = 0;
707-
708705
for (total_read = 0; msg_data_left(smb_msg); total_read += length) {
709706
try_to_freeze();
710707

@@ -760,7 +757,7 @@ int
760757
cifs_read_from_socket(struct TCP_Server_Info *server, char *buf,
761758
unsigned int to_read)
762759
{
763-
struct msghdr smb_msg;
760+
struct msghdr smb_msg = {};
764761
struct kvec iov = {.iov_base = buf, .iov_len = to_read};
765762
iov_iter_kvec(&smb_msg.msg_iter, READ, &iov, 1, to_read);
766763

@@ -770,15 +767,13 @@ cifs_read_from_socket(struct TCP_Server_Info *server, char *buf,
770767
ssize_t
771768
cifs_discard_from_socket(struct TCP_Server_Info *server, size_t to_read)
772769
{
773-
struct msghdr smb_msg;
770+
struct msghdr smb_msg = {};
774771

775772
/*
776773
* iov_iter_discard already sets smb_msg.type and count and iov_offset
777774
* and cifs_readv_from_socket sets msg_control and msg_controllen
778775
* so little to initialize in struct msghdr
779776
*/
780-
smb_msg.msg_name = NULL;
781-
smb_msg.msg_namelen = 0;
782777
iov_iter_discard(&smb_msg.msg_iter, READ, to_read);
783778

784779
return cifs_readv_from_socket(server, &smb_msg);
@@ -788,7 +783,7 @@ int
788783
cifs_read_page_from_socket(struct TCP_Server_Info *server, struct page *page,
789784
unsigned int page_offset, unsigned int to_read)
790785
{
791-
struct msghdr smb_msg;
786+
struct msghdr smb_msg = {};
792787
struct bio_vec bv = {
793788
.bv_page = page, .bv_len = to_read, .bv_offset = page_offset};
794789
iov_iter_bvec(&smb_msg.msg_iter, READ, &bv, 1, to_read);
@@ -2350,7 +2345,9 @@ cifs_put_tcon(struct cifs_tcon *tcon)
23502345
ses = tcon->ses;
23512346
cifs_dbg(FYI, "%s: tc_count=%d\n", __func__, tcon->tc_count);
23522347
spin_lock(&cifs_tcp_ses_lock);
2348+
spin_lock(&tcon->tc_lock);
23532349
if (--tcon->tc_count > 0) {
2350+
spin_unlock(&tcon->tc_lock);
23542351
spin_unlock(&cifs_tcp_ses_lock);
23552352
return;
23562353
}
@@ -2359,6 +2356,7 @@ cifs_put_tcon(struct cifs_tcon *tcon)
23592356
WARN_ON(tcon->tc_count < 0);
23602357

23612358
list_del_init(&tcon->tcon_list);
2359+
spin_unlock(&tcon->tc_lock);
23622360
spin_unlock(&cifs_tcp_ses_lock);
23632361

23642362
/* cancel polling of interfaces */

fs/cifs/file.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3575,6 +3575,9 @@ static ssize_t __cifs_writev(
35753575

35763576
ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from)
35773577
{
3578+
struct file *file = iocb->ki_filp;
3579+
3580+
cifs_revalidate_mapping(file->f_inode);
35783581
return __cifs_writev(iocb, from, true);
35793582
}
35803583

fs/cifs/transport.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,6 @@ smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg,
194194

195195
*sent = 0;
196196

197-
smb_msg->msg_name = (struct sockaddr *) &server->dstaddr;
198-
smb_msg->msg_namelen = sizeof(struct sockaddr);
199-
smb_msg->msg_control = NULL;
200-
smb_msg->msg_controllen = 0;
201197
if (server->noblocksnd)
202198
smb_msg->msg_flags = MSG_DONTWAIT + MSG_NOSIGNAL;
203199
else
@@ -309,7 +305,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
309305
sigset_t mask, oldmask;
310306
size_t total_len = 0, sent, size;
311307
struct socket *ssocket = server->ssocket;
312-
struct msghdr smb_msg;
308+
struct msghdr smb_msg = {};
313309
__be32 rfc1002_marker;
314310

315311
if (cifs_rdma_enabled(server)) {

0 commit comments

Comments
 (0)