cifs: add server param
authorAurelien Aptel <aaptel@suse.com>
Fri, 20 Sep 2019 04:08:34 +0000 (06:08 +0200)
committerSteve French <stfrench@microsoft.com>
Mon, 25 Nov 2019 07:16:30 +0000 (01:16 -0600)
As we get down to the transport layer, plenty of functions are passed
the session pointer and assume the transport to use is ses->server.

Instead we modify those functions to pass (ses, server) so that we
can decouple the session from the server.

Signed-off-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsglob.h
fs/cifs/cifsproto.h
fs/cifs/smb2proto.h
fs/cifs/smb2transport.c
fs/cifs/transport.c

index ac37104..170a464 100644 (file)
@@ -230,7 +230,8 @@ struct smb_version_operations {
        bool (*compare_fids)(struct cifsFileInfo *, struct cifsFileInfo *);
        /* setup request: allocate mid, sign message */
        struct mid_q_entry *(*setup_request)(struct cifs_ses *,
-                                               struct smb_rqst *);
+                                            struct TCP_Server_Info *,
+                                            struct smb_rqst *);
        /* setup async request: allocate mid, sign message */
        struct mid_q_entry *(*setup_async_request)(struct TCP_Server_Info *,
                                                struct smb_rqst *);
index fe597d3..737547d 100644 (file)
@@ -109,6 +109,7 @@ extern int SendReceive(const unsigned int /* xid */ , struct cifs_ses *,
 extern int SendReceiveNoRsp(const unsigned int xid, struct cifs_ses *ses,
                            char *in_buf, int flags);
 extern struct mid_q_entry *cifs_setup_request(struct cifs_ses *,
+                               struct TCP_Server_Info *,
                                struct smb_rqst *);
 extern struct mid_q_entry *cifs_setup_async_request(struct TCP_Server_Info *,
                                                struct smb_rqst *);
index 2a12a2f..d21a5fc 100644 (file)
@@ -46,7 +46,8 @@ extern int smb2_verify_signature(struct smb_rqst *, struct TCP_Server_Info *);
 extern int smb2_check_receive(struct mid_q_entry *mid,
                              struct TCP_Server_Info *server, bool log_error);
 extern struct mid_q_entry *smb2_setup_request(struct cifs_ses *ses,
-                             struct smb_rqst *rqst);
+                                             struct TCP_Server_Info *,
+                                             struct smb_rqst *rqst);
 extern struct mid_q_entry *smb2_setup_async_request(
                        struct TCP_Server_Info *server, struct smb_rqst *rqst);
 extern struct cifs_ses *smb2_find_smb_ses(struct TCP_Server_Info *server,
index 148d794..c6ef52e 100644 (file)
@@ -610,18 +610,18 @@ smb2_mid_entry_alloc(const struct smb2_sync_hdr *shdr,
 }
 
 static int
-smb2_get_mid_entry(struct cifs_ses *ses, struct smb2_sync_hdr *shdr,
-                  struct mid_q_entry **mid)
+smb2_get_mid_entry(struct cifs_ses *ses, struct TCP_Server_Info *server,
+                  struct smb2_sync_hdr *shdr, struct mid_q_entry **mid)
 {
-       if (ses->server->tcpStatus == CifsExiting)
+       if (server->tcpStatus == CifsExiting)
                return -ENOENT;
 
-       if (ses->server->tcpStatus == CifsNeedReconnect) {
+       if (server->tcpStatus == CifsNeedReconnect) {
                cifs_dbg(FYI, "tcp session dead - return to caller to retry\n");
                return -EAGAIN;
        }
 
-       if (ses->server->tcpStatus == CifsNeedNegotiate &&
+       if (server->tcpStatus == CifsNeedNegotiate &&
           shdr->Command != SMB2_NEGOTIATE)
                return -EAGAIN;
 
@@ -638,11 +638,11 @@ smb2_get_mid_entry(struct cifs_ses *ses, struct smb2_sync_hdr *shdr,
                /* else ok - we are shutting down the session */
        }
 
-       *mid = smb2_mid_entry_alloc(shdr, ses->server);
+       *mid = smb2_mid_entry_alloc(shdr, server);
        if (*mid == NULL)
                return -ENOMEM;
        spin_lock(&GlobalMid_Lock);
-       list_add_tail(&(*mid)->qhead, &ses->server->pending_mid_q);
+       list_add_tail(&(*mid)->qhead, &server->pending_mid_q);
        spin_unlock(&GlobalMid_Lock);
 
        return 0;
@@ -675,24 +675,25 @@ smb2_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server,
 }
 
 struct mid_q_entry *
-smb2_setup_request(struct cifs_ses *ses, struct smb_rqst *rqst)
+smb2_setup_request(struct cifs_ses *ses, struct TCP_Server_Info *server,
+                  struct smb_rqst *rqst)
 {
        int rc;
        struct smb2_sync_hdr *shdr =
                        (struct smb2_sync_hdr *)rqst->rq_iov[0].iov_base;
        struct mid_q_entry *mid;
 
-       smb2_seq_num_into_buf(ses->server, shdr);
+       smb2_seq_num_into_buf(server, shdr);
 
-       rc = smb2_get_mid_entry(ses, shdr, &mid);
+       rc = smb2_get_mid_entry(ses, server, shdr, &mid);
        if (rc) {
-               revert_current_mid_from_hdr(ses->server, shdr);
+               revert_current_mid_from_hdr(server, shdr);
                return ERR_PTR(rc);
        }
 
-       rc = smb2_sign_rqst(rqst, ses->server);
+       rc = smb2_sign_rqst(rqst, server);
        if (rc) {
-               revert_current_mid_from_hdr(ses->server, shdr);
+               revert_current_mid_from_hdr(server, shdr);
                cifs_delete_mid(mid);
                return ERR_PTR(rc);
        }
index 4104f59..d3954ac 100644 (file)
@@ -936,7 +936,8 @@ cifs_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server,
 }
 
 struct mid_q_entry *
-cifs_setup_request(struct cifs_ses *ses, struct smb_rqst *rqst)
+cifs_setup_request(struct cifs_ses *ses, struct TCP_Server_Info *ignored,
+                  struct smb_rqst *rqst)
 {
        int rc;
        struct smb_hdr *hdr = (struct smb_hdr *)rqst->rq_iov[0].iov_base;
@@ -1053,7 +1054,7 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
        }
 
        for (i = 0; i < num_rqst; i++) {
-               midQ[i] = server->ops->setup_request(ses, &rqst[i]);
+               midQ[i] = server->ops->setup_request(ses, server, &rqst[i]);
                if (IS_ERR(midQ[i])) {
                        revert_current_mid(server, i);
                        for (j = 0; j < i; j++)