]> err.no Git - linux-2.6/commitdiff
[CIFS] /proc/fs/cifs debug code cleanup and new stats2
authorSteve French <sfrench@us.ibm.com>
Fri, 7 Oct 2005 16:51:05 +0000 (09:51 -0700)
committerSteve French <sfrench@us.ibm.com>
Fri, 7 Oct 2005 16:51:05 +0000 (09:51 -0700)
These changes to debug code and new stats are helpful in
debugging potential tcp performance/configuration problems under cifs.

Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/cifs_debug.c
fs/cifs/cifsglob.h
fs/cifs/transport.c

index f4c6544468abecfe5648d680e2de62c69ee3b99b..785239618d89c04958f084c54d4e92a16cf0eca7 100644 (file)
@@ -81,6 +81,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
        buf += length;
        length = sprintf(buf,"CIFS Version %s\n",CIFS_VERSION);
        buf += length;
+       length = sprintf(buf,"Active VFS Requests: %d\n", GlobalTotalActiveXid);
+       buf += length;
        length = sprintf(buf, "Servers:");
        buf += length;
 
@@ -97,7 +99,7 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
                } else {
                        length =
                            sprintf(buf,
-                                   "\n%d) Name: %s  Domain: %s Mounts: %d ServerOS: %s  \n\tServerNOS: %s\tCapabilities: 0x%x\n\tSMB session status: %d\t",
+                                   "\n%d) Name: %s  Domain: %s Mounts: %d OS: %s  \n\tNOS: %s\tCapability: 0x%x\n\tSMB session status: %d\t",
                                i, ses->serverName, ses->serverDomain,
                                atomic_read(&ses->inUse),
                                ses->serverOS, ses->serverNOS,
@@ -105,12 +107,18 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
                        buf += length;
                }
                if(ses->server) {
-                       buf += sprintf(buf, "TCP status: %d\n\tLocal Users To Server: %d SecMode: 0x%x Req Active: %d",
+                       buf += sprintf(buf, "TCP status: %d\n\tLocal Users To Server: %d SecMode: 0x%x Req On Wire: %d",
                                ses->server->tcpStatus,
                                atomic_read(&ses->server->socketUseCount),
                                ses->server->secMode,
                                atomic_read(&ses->server->inFlight));
-                       
+
+#ifdef CONFIG_CIFS_STATS2
+                       buf += sprintf(buf, "\tIn Send: %d In MaxReq Wait: %d",
+                               atomic_read(&ses->server->inSend), 
+                               atomic_read(&ses->server->num_waiters));
+#endif
+
                        length = sprintf(buf, "\nMIDs:\n");
                        buf += length;
 
@@ -149,7 +157,7 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
                dev_type = le32_to_cpu(tcon->fsDevInfo.DeviceType);
                length =
                    sprintf(buf,
-                           "\n%d) %s Uses: %d Type: %s Characteristics: 0x%x Attributes: 0x%x\nPathComponentMax: %d Status: %d",
+                           "\n%d) %s Uses: %d Type: %s DevInfo: 0x%x Attributes: 0x%x\nPathComponentMax: %d Status: %d",
                            i, tcon->treeName,
                            atomic_read(&tcon->useCount),
                            tcon->nativeFileSystem,
index cd421c76805e78b961b335f7f3d86da8ded1b24e..729717281b4086ccfbc155be88ad6192baa8045b 100644 (file)
@@ -123,13 +123,17 @@ struct TCP_Server_Info {
        struct list_head pending_mid_q;
        void *Server_NlsInfo;   /* BB - placeholder for future NLS info  */
        unsigned short server_codepage; /* codepage for the server    */
-       unsigned long ip_address;       /* IP addr for the server if known     */
+       unsigned long ip_address;       /* IP addr for the server if known */
        enum protocolEnum protocolType; 
        char versionMajor;
        char versionMinor;
        unsigned svlocal:1;     /* local server or remote */
        atomic_t socketUseCount; /* number of open cifs sessions on socket */
        atomic_t inFlight;  /* number of requests on the wire to server */
+#ifdef CONFIG_CIFS_STATS2
+       atomic_t inSend; /* requests trying to send */
+       atomic_t num_waiters;   /* blocked waiting to get in sendrecv */
+#endif
        enum statusEnum tcpStatus; /* what we think the status is */
        struct semaphore tcpSem;
        struct task_struct *tsk;
index c86b7077b92fff56497dfbfdb8483e6610f0488d..893a6fef98530ec206b1516bc89589f351dd66c4 100644 (file)
@@ -307,9 +307,15 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
                        if(atomic_read(&ses->server->inFlight) >= 
                                        cifs_max_pending){
                                spin_unlock(&GlobalMid_Lock);
+#ifdef CONFIG_CIFS_STATS2
+                               atomic_inc(&ses->server->num_waiters);
+#endif
                                wait_event(ses->server->request_q,
                                        atomic_read(&ses->server->inFlight)
                                         < cifs_max_pending);
+#ifdef CONFIG_CIFS_STATS2
+                               atomic_dec(&ses->server->num_waiters);
+#endif
                                spin_lock(&GlobalMid_Lock);
                        } else {
                                if(ses->server->tcpStatus == CifsExiting) {
@@ -365,8 +371,14 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
 /*     rc = cifs_sign_smb2(iov, n_vec, ses->server, &midQ->sequence_number); */
 
        midQ->midState = MID_REQUEST_SUBMITTED;
+#ifdef CONFIG_CIFS_STATS2
+       atomic_inc(&ses->server->inSend);
+#endif
        rc = smb_send2(ses->server->ssocket, iov, n_vec,
                      (struct sockaddr *) &(ses->server->addr.sockAddr));
+#ifdef CONFIG_CIFS_STATS2
+       atomic_dec(&ses->server->inSend);
+#endif
        if(rc < 0) {
                DeleteMidQEntry(midQ);
                up(&ses->server->tcpSem);
@@ -546,9 +558,15 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
                        if(atomic_read(&ses->server->inFlight) >= 
                                        cifs_max_pending){
                                spin_unlock(&GlobalMid_Lock);
+#ifdef CONFIG_CIFS_STATS2
+                               atomic_inc(&ses->server->num_waiters);
+#endif
                                wait_event(ses->server->request_q,
                                        atomic_read(&ses->server->inFlight)
                                         < cifs_max_pending);
+#ifdef CONFIG_CIFS_STATS2
+                               atomic_dec(&ses->server->num_waiters);
+#endif
                                spin_lock(&GlobalMid_Lock);
                        } else {
                                if(ses->server->tcpStatus == CifsExiting) {
@@ -617,8 +635,14 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
        rc = cifs_sign_smb(in_buf, ses->server, &midQ->sequence_number);
 
        midQ->midState = MID_REQUEST_SUBMITTED;
+#ifdef CONFIG_CIFS_STATS2
+       atomic_inc(&ses->server->inSend);
+#endif
        rc = smb_send(ses->server->ssocket, in_buf, in_buf->smb_buf_length,
                      (struct sockaddr *) &(ses->server->addr.sockAddr));
+#ifdef CONFIG_CIFS_STATS2
+       atomic_dec(&ses->server->inSend);
+#endif
        if(rc < 0) {
                DeleteMidQEntry(midQ);
                up(&ses->server->tcpSem);