CIFS: Move informational tcon calls to ops struct
authorPavel Shilovsky <pshilovsky@samba.org>
Sun, 27 May 2012 16:48:35 +0000 (20:48 +0400)
committerPavel Shilovsky <pshilovsky@samba.org>
Tue, 24 Jul 2012 17:55:02 +0000 (21:55 +0400)
and rename variables in cifs_mount.

Signed-off-by: Pavel Shilovsky <pshilovsky@samba.org>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/cifsglob.h
fs/cifs/connect.c
fs/cifs/smb1ops.c

index 2d80d82f41d043a613cc0842dcf3059098d46379..acfa68569f3d43492f0f9ad84afb20ca8c889d25 100644 (file)
@@ -213,6 +213,8 @@ struct smb_version_operations {
        int (*get_dfs_refer)(const unsigned int, struct cifs_ses *,
                             const char *, struct dfs_info3_param **,
                             unsigned int *, const struct nls_table *, int);
+       /* informational QFS call */
+       void (*qfs_tcon)(const unsigned int, struct cifs_tcon *);
 };
 
 struct smb_version_values {
index 70a34d126001ab779411bbbf6def1609e9975e2d..80807923a5453c791cd891f7a11c55b13d5e39d8 100644 (file)
@@ -3600,9 +3600,9 @@ cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info)
 {
        int rc;
        unsigned int xid;
-       struct cifs_ses *pSesInfo;
+       struct cifs_ses *ses;
        struct cifs_tcon *tcon;
-       struct TCP_Server_Info *srvTcp;
+       struct TCP_Server_Info *server;
        char   *full_path;
        struct tcon_link *tlink;
 #ifdef CONFIG_CIFS_DFS_UPCALL
@@ -3619,39 +3619,39 @@ try_mount_again:
        if (referral_walks_count) {
                if (tcon)
                        cifs_put_tcon(tcon);
-               else if (pSesInfo)
-                       cifs_put_smb_ses(pSesInfo);
+               else if (ses)
+                       cifs_put_smb_ses(ses);
 
                free_xid(xid);
        }
 #endif
        rc = 0;
        tcon = NULL;
-       pSesInfo = NULL;
-       srvTcp = NULL;
+       ses = NULL;
+       server = NULL;
        full_path = NULL;
        tlink = NULL;
 
        xid = get_xid();
 
        /* get a reference to a tcp session */
-       srvTcp = cifs_get_tcp_session(volume_info);
-       if (IS_ERR(srvTcp)) {
-               rc = PTR_ERR(srvTcp);
+       server = cifs_get_tcp_session(volume_info);
+       if (IS_ERR(server)) {
+               rc = PTR_ERR(server);
                bdi_destroy(&cifs_sb->bdi);
                goto out;
        }
 
        /* get a reference to a SMB session */
-       pSesInfo = cifs_get_smb_ses(srvTcp, volume_info);
-       if (IS_ERR(pSesInfo)) {
-               rc = PTR_ERR(pSesInfo);
-               pSesInfo = NULL;
+       ses = cifs_get_smb_ses(server, volume_info);
+       if (IS_ERR(ses)) {
+               rc = PTR_ERR(ses);
+               ses = NULL;
                goto mount_fail_check;
        }
 
        /* search for existing tcon to this server share */
-       tcon = cifs_get_tcon(pSesInfo, volume_info);
+       tcon = cifs_get_tcon(ses, volume_info);
        if (IS_ERR(tcon)) {
                rc = PTR_ERR(tcon);
                tcon = NULL;
@@ -3672,11 +3672,9 @@ try_mount_again:
        } else
                tcon->unix_ext = 0; /* server does not support them */
 
-       /* do not care if following two calls succeed - informational */
-       if (!tcon->ipc) {
-               CIFSSMBQFSDeviceInfo(xid, tcon);
-               CIFSSMBQFSAttributeInfo(xid, tcon);
-       }
+       /* do not care if a following call succeed - informational */
+       if (!tcon->ipc && server->ops->qfs_tcon)
+               server->ops->qfs_tcon(xid, tcon);
 
        cifs_sb->wsize = cifs_negotiate_wsize(tcon, volume_info);
        cifs_sb->rsize = cifs_negotiate_rsize(tcon, volume_info);
@@ -3694,8 +3692,8 @@ remote_path_check:
         * Chase the referral if found, otherwise continue normally.
         */
        if (referral_walks_count == 0) {
-               int refrc = expand_dfs_referral(xid, pSesInfo, volume_info,
-                                               cifs_sb, false);
+               int refrc = expand_dfs_referral(xid, ses, volume_info, cifs_sb,
+                                               false);
                if (!refrc) {
                        referral_walks_count++;
                        goto try_mount_again;
@@ -3733,8 +3731,7 @@ remote_path_check:
                        goto mount_fail_check;
                }
 
-               rc = expand_dfs_referral(xid, pSesInfo, volume_info, cifs_sb,
-                                        true);
+               rc = expand_dfs_referral(xid, ses, volume_info, cifs_sb, true);
 
                if (!rc) {
                        referral_walks_count++;
@@ -3756,7 +3753,7 @@ remote_path_check:
                goto mount_fail_check;
        }
 
-       tlink->tl_uid = pSesInfo->linux_uid;
+       tlink->tl_uid = ses->linux_uid;
        tlink->tl_tcon = tcon;
        tlink->tl_time = jiffies;
        set_bit(TCON_LINK_MASTER, &tlink->tl_flags);
@@ -3777,10 +3774,10 @@ mount_fail_check:
                /* up accidentally freeing someone elses tcon struct */
                if (tcon)
                        cifs_put_tcon(tcon);
-               else if (pSesInfo)
-                       cifs_put_smb_ses(pSesInfo);
+               else if (ses)
+                       cifs_put_smb_ses(ses);
                else
-                       cifs_put_tcp_session(srvTcp);
+                       cifs_put_tcp_session(server);
                bdi_destroy(&cifs_sb->bdi);
        }
 
index 6d9025b29e54a78f485b18ae9b0784b76e277a08..96eb06ff9dd185eb1bcd671701a237ecbcc21bcf 100644 (file)
@@ -410,6 +410,13 @@ cifs_negotiate(const unsigned int xid, struct cifs_ses *ses)
        return rc;
 }
 
+static void
+cifs_qfs_tcon(const unsigned int xid, struct cifs_tcon *tcon)
+{
+       CIFSSMBQFSDeviceInfo(xid, tcon);
+       CIFSSMBQFSAttributeInfo(xid, tcon);
+}
+
 struct smb_version_operations smb1_operations = {
        .send_cancel = send_nt_cancel,
        .compare_fids = cifs_compare_fids,
@@ -435,6 +442,7 @@ struct smb_version_operations smb1_operations = {
        .tree_connect = CIFSTCon,
        .tree_disconnect = CIFSSMBTDis,
        .get_dfs_refer = CIFSGetDFSRefer,
+       .qfs_tcon = cifs_qfs_tcon,
 };
 
 struct smb_version_values smb1_values = {