]> err.no Git - linux-2.6/commitdiff
[CIFS] Make CIFS statistics more accurate and add some stats that were
authorSteve French <sfrench@us.ibm.com>
Sun, 21 Aug 2005 04:42:53 +0000 (21:42 -0700)
committerSteve French <sfrench@us.ibm.com>
Sun, 21 Aug 2005 04:42:53 +0000 (21:42 -0700)
missing.  Most importantly SMB reads were undercounted.

Signed-off-by: Steve French (sfrench@us.ibm.com)
fs/cifs/cifs_debug.c
fs/cifs/cifsglob.h
fs/cifs/cifssmb.c
fs/cifs/file.c
fs/cifs/transport.c

index 8381713280769679464e2609c035653e7111bc6d..f4c6544468abecfe5648d680e2de62c69ee3b99b 100644 (file)
@@ -254,36 +254,46 @@ cifs_stats_read(char *buf, char **beginBuffer, off_t offset,
                        buf += sprintf(buf, "\tDISCONNECTED ");
                        length += 14;
                }
-               item_length = sprintf(buf,"\nSMBs: %d Oplock Breaks: %d",
+               item_length = sprintf(buf, "\nSMBs: %d Oplock Breaks: %d",
                        atomic_read(&tcon->num_smbs_sent),
                        atomic_read(&tcon->num_oplock_brks));
                buf += item_length;
                length += item_length;
-               item_length = sprintf(buf,"\nReads: %d Bytes %lld",
+               item_length = sprintf(buf, "\nReads: %d Bytes %lld",
                        atomic_read(&tcon->num_reads),
                        (long long)(tcon->bytes_read));
                buf += item_length;
                length += item_length;
-               item_length = sprintf(buf,"\nWrites: %d Bytes: %lld",
+               item_length = sprintf(buf, "\nWrites: %d Bytes: %lld",
                        atomic_read(&tcon->num_writes),
                        (long long)(tcon->bytes_written));
+                buf += item_length;
+                length += item_length;
+                item_length = sprintf(buf, 
+                       "\nLocks: %d HardLinks: %d Symlinks: %d",
+                        atomic_read(&tcon->num_locks),
+                       atomic_read(&tcon->num_hardlinks),
+                       atomic_read(&tcon->num_symlinks));
+                buf += item_length;
+                length += item_length;
+
+               item_length = sprintf(buf, "\nOpens: %d Closes: %d Deletes: %d",
+                       atomic_read(&tcon->num_opens),
+                       atomic_read(&tcon->num_closes),
+                       atomic_read(&tcon->num_deletes));
                buf += item_length;
                length += item_length;
-               item_length = sprintf(buf,
-                       "\nOpens: %d Deletes: %d\nMkdirs: %d Rmdirs: %d",
-                       atomic_read(&tcon->num_opens),
-                       atomic_read(&tcon->num_deletes),
+               item_length = sprintf(buf, "\nMkdirs: %d Rmdirs: %d",
                        atomic_read(&tcon->num_mkdirs),
                        atomic_read(&tcon->num_rmdirs));
                buf += item_length;
                length += item_length;
-               item_length = sprintf(buf,
-                       "\nRenames: %d T2 Renames %d",
+               item_length = sprintf(buf, "\nRenames: %d T2 Renames %d",
                        atomic_read(&tcon->num_renames),
                        atomic_read(&tcon->num_t2renames));
                buf += item_length;
                length += item_length;
-               item_length = sprintf(buf,"\nFindFirst: %d FNext %d FClose %d",
+               item_length = sprintf(buf, "\nFindFirst: %d FNext %d FClose %d",
                        atomic_read(&tcon->num_ffirst),
                        atomic_read(&tcon->num_fnext),
                        atomic_read(&tcon->num_fclose));
index e7ba48c61a7af36e79bfebcc61d0704ddff7b9cb..6a8c7d1bee8cef1ec48a14facd60867fd8c49c94 100644 (file)
@@ -215,6 +215,7 @@ struct cifsTconInfo {
        atomic_t num_reads;
        atomic_t num_oplock_brks;
        atomic_t num_opens;
+       atomic_t num_closes;
        atomic_t num_deletes;
        atomic_t num_mkdirs;
        atomic_t num_rmdirs;
@@ -223,10 +224,27 @@ struct cifsTconInfo {
        atomic_t num_ffirst;
        atomic_t num_fnext;
        atomic_t num_fclose;
+       atomic_t num_hardlinks;
+       atomic_t num_symlinks;
+       atomic_t num_locks;
+#ifdef CONFIG_CIFS_STATS2
+       unsigned long long time_writes;
+       unsigned long long time_reads;
+       unsigned long long time_opens;
+       unsigned long long time_deletes;
+       unsigned long long time_closes;
+       unsigned long long time_mkdirs;
+       unsigned long long time_rmdirs;
+       unsigned long long time_renames;
+       unsigned long long time_t2renames;
+       unsigned long long time_ffirst;
+       unsigned long long time_fnext;
+       unsigned long long time_fclose;
+#endif /* CONFIG_CIFS_STATS2 */
        __u64    bytes_read;
        __u64    bytes_written;
        spinlock_t stat_lock;
-#endif
+#endif /* CONFIG_CIFS_STATS */
        FILE_SYSTEM_DEVICE_INFO fsDevInfo;
        FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;  /* ok if file system name truncated */
        FILE_SYSTEM_UNIX_INFO fsUnixInfo;
index 930be0927de2215e808a9ba0c67f85f9fc3f8e5d..1292db50fe65649e5d706416de654125a4bd46db 100644 (file)
@@ -584,14 +584,12 @@ DelFileRetry:
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_deletes);
+#endif
        if (rc) {
                cFYI(1, ("Error in RMFile = %d", rc));
        } 
-#ifdef CONFIG_CIFS_STATS
-        else {
-               atomic_inc(&tcon->num_deletes);
-        }
-#endif
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -633,14 +631,12 @@ RmDirRetry:
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_rmdirs);
+#endif
        if (rc) {
                cFYI(1, ("Error in RMDir = %d", rc));
        }
-#ifdef CONFIG_CIFS_STATS
-        else {
-               atomic_inc(&tcon->num_rmdirs);
-        }
-#endif
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -681,14 +677,13 @@ MkDirRetry:
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_mkdirs);
+#endif
        if (rc) {
                cFYI(1, ("Error in Mkdir = %d", rc));
        }
-#ifdef CONFIG_CIFS_STATS
-        else {
-               atomic_inc(&tcon->num_mkdirs);
-        }
-#endif
+
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
                goto MkDirRetry;
@@ -772,6 +767,9 @@ openRetry:
        /* long_op set to 1 to allow for oplock break timeouts */
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 1);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_opens);
+#endif
        if (rc) {
                cFYI(1, ("Error in Open = %d", rc));
        } else {
@@ -789,11 +787,8 @@ openRetry:
                    pfile_info->EndOfFile = pSMBr->EndOfFile;
                    pfile_info->NumberOfLinks = cpu_to_le32(1);
                }
-
-#ifdef CONFIG_CIFS_STATS
-               atomic_inc(&tcon->num_opens);
-#endif
        }
+
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
                goto openRetry;
@@ -838,6 +833,9 @@ CIFSSMBRead(const int xid, struct cifsTconInfo *tcon,
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_reads);
+#endif         
        if (rc) {
                cERROR(1, ("Send error in read = %d", rc));
        } else {
@@ -940,6 +938,9 @@ CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, long_op);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_writes);
+#endif
        if (rc) {
                cFYI(1, ("Send error in write = %d", rc));
                *nbytes = 0;
@@ -1012,6 +1013,9 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
 
        rc = SendReceive2(xid, tcon->ses, (struct smb_hdr *) pSMB, smb_hdr_len,
                          buf, bytes_sent, &bytes_returned, long_op);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_writes);
+#endif
        if (rc) {
                cFYI(1, ("Send error in write = %d", rc));
                *nbytes = 0;
@@ -1087,7 +1091,9 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, timeout);
-
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_locks);
+#endif
        if (rc) {
                cFYI(1, ("Send error in Lock = %d", rc));
        }
@@ -1121,6 +1127,9 @@ CIFSSMBClose(const int xid, struct cifsTconInfo *tcon, int smb_file_id)
        pSMB->ByteCount = 0;
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_closes);
+#endif 
        if (rc) {
                if(rc!=-EINTR) {
                        /* EINTR is expected when user ctl-c to kill app */
@@ -1193,16 +1202,13 @@ renameRetry:
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_renames);
+#endif
        if (rc) {
                cFYI(1, ("Send error in rename = %d", rc));
        } 
 
-#ifdef CONFIG_CIFS_STATS
-         else {
-               atomic_inc(&tcon->num_renames);
-       }
-#endif
-
        cifs_buf_release(pSMB);
 
        if (rc == -EAGAIN)
@@ -1277,14 +1283,13 @@ int CIFSSMBRenameOpenFile(const int xid,struct cifsTconInfo *pTcon,
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, pTcon->ses, (struct smb_hdr *) pSMB,
                          (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&pTcon->num_t2renames);
+#endif 
        if (rc) {
                cFYI(1,("Send error in Rename (by file handle) = %d", rc));
        }
-#ifdef CONFIG_CIFS_STATS
-         else {
-               atomic_inc(&pTcon->num_t2renames);
-       }
-#endif
+
        cifs_buf_release(pSMB);
 
        /* Note: On -EAGAIN error only caller can retry on handle based calls
@@ -1438,6 +1443,9 @@ createSymLinkRetry:
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_symlinks);
+#endif
        if (rc) {
                cFYI(1,
                     ("Send error in SetPathInfo (create symlink) = %d",
@@ -1527,6 +1535,9 @@ createHardLinkRetry:
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_hardlinks);
+#endif
        if (rc) {
                cFYI(1, ("Send error in SetPathInfo (hard link) = %d", rc));
        }
@@ -1597,6 +1608,9 @@ winCreateHardLinkRetry:
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_hardlinks);
+#endif
        if (rc) {
                cFYI(1, ("Send error in hard link (NT rename) = %d", rc));
        }
@@ -2519,6 +2533,9 @@ findFirstRetry:
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_ffirst);
+#endif
 
        if (rc) {/* BB add logic to retry regular search if Unix search rejected unexpectedly by server */
                /* BB Add code to handle unsupported level rc */
@@ -2532,9 +2549,6 @@ findFirstRetry:
                if (rc == -EAGAIN)
                        goto findFirstRetry;
        } else { /* decode response */
-#ifdef CONFIG_CIFS_STATS
-               atomic_inc(&tcon->num_ffirst);
-#endif
                /* BB remember to free buffer if error BB */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
                if(rc == 0) {
@@ -2643,7 +2657,9 @@ int CIFSFindNext(const int xid, struct cifsTconInfo *tcon,
                                                                                               
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                        (struct smb_hdr *) pSMBr, &bytes_returned, 0);
-                                                                                              
+#ifdef CONFIG_CIFS_STATS
+       atomic_inc(&tcon->num_fnext);
+#endif                                                                                          
        if (rc) {
                if (rc == -EBADF) {
                        psrch_inf->endOfSearch = TRUE;
@@ -2651,9 +2667,6 @@ int CIFSFindNext(const int xid, struct cifsTconInfo *tcon,
                } else
                        cFYI(1, ("FindNext returned = %d", rc));
        } else {                /* decode response */
-#ifdef CONFIG_CIFS_STATS
-               atomic_inc(&tcon->num_fnext);
-#endif
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
                
                if(rc == 0) {
index ddb25a0a63d5bc0fcb00883e65540e7fe950b050..b054df2dee1eac8461ad4675dedb21307d847c70 100644 (file)
@@ -746,7 +746,6 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data,
 
 #ifdef CONFIG_CIFS_STATS
        if (total_written > 0) {
-               atomic_inc(&pTcon->num_writes);
                spin_lock(&pTcon->stat_lock);
                pTcon->bytes_written += total_written;
                spin_unlock(&pTcon->stat_lock);
@@ -881,7 +880,6 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
 
 #ifdef CONFIG_CIFS_STATS
        if (total_written > 0) {
-               atomic_inc(&pTcon->num_writes);
                spin_lock(&pTcon->stat_lock);
                pTcon->bytes_written += total_written;
                spin_unlock(&pTcon->stat_lock);
@@ -1248,7 +1246,6 @@ ssize_t cifs_user_read(struct file *file, char __user *read_data,
                        }
                } else {
 #ifdef CONFIG_CIFS_STATS
-                       atomic_inc(&pTcon->num_reads);
                        spin_lock(&pTcon->stat_lock);
                        pTcon->bytes_read += total_read;
                        spin_unlock(&pTcon->stat_lock);
@@ -1316,7 +1313,6 @@ static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
                        }
                } else {
 #ifdef CONFIG_CIFS_STATS
-                       atomic_inc(&pTcon->num_reads);
                        spin_lock(&pTcon->stat_lock);
                        pTcon->bytes_read += total_read;
                        spin_unlock(&pTcon->stat_lock);
@@ -1493,7 +1489,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
 
                        i +=  bytes_read >> PAGE_CACHE_SHIFT;
 #ifdef CONFIG_CIFS_STATS
-                       atomic_inc(&pTcon->num_reads);
                        spin_lock(&pTcon->stat_lock);
                        pTcon->bytes_read += bytes_read;
                        spin_unlock(&pTcon->stat_lock);
index 496a2738bbe3d5915276072194770b22545c243b..96f89eb6604025fc7c417649a4d629fc1fde6390 100644 (file)
@@ -735,7 +735,7 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
                                BCC(out_buf) = le16_to_cpu(BCC(out_buf));
                } else {
                        rc = -EIO;
-                       cFYI(1,("Bad MID state? "));
+                       cERROR(1,("Bad MID state? "));
                }
        }
 cifs_no_response_exit: