瀏覽代碼

[CIFS] Add extended stats (STATS2) for total buffer allocations for
better performance debugging.

Signed-off-by: Steve French <sfrench@us.ibm.com>

Steve French 19 年之前
父節點
當前提交
4498eed50a
共有 4 個文件被更改,包括 23 次插入2 次删除
  1. 4 0
      fs/cifs/cifs_debug.c
  2. 6 0
      fs/cifs/cifsfs.c
  3. 6 2
      fs/cifs/cifsglob.h
  4. 7 0
      fs/cifs/misc.c

+ 4 - 0
fs/cifs/cifs_debug.c

@@ -219,6 +219,10 @@ cifs_stats_write(struct file *file, const char __user *buffer,
 
 
         if (c == '1' || c == 'y' || c == 'Y' || c == '0') {
         if (c == '1' || c == 'y' || c == 'Y' || c == '0') {
 		read_lock(&GlobalSMBSeslock);
 		read_lock(&GlobalSMBSeslock);
+#ifdef CONFIG_CIFS_STATS2
+		atomic_set(&totBufAllocCount, 0);
+		atomic_set(&totSmBufAllocCount, 0);
+#endif /* CONFIG_CIFS_STATS2 */
 		list_for_each(tmp, &GlobalTreeConnectionList) {
 		list_for_each(tmp, &GlobalTreeConnectionList) {
 			tcon = list_entry(tmp, struct cifsTconInfo,
 			tcon = list_entry(tmp, struct cifsTconInfo,
 					cifsConnectionList);
 					cifsConnectionList);

+ 6 - 0
fs/cifs/cifsfs.c

@@ -954,6 +954,12 @@ init_cifs(void)
 	atomic_set(&tconInfoReconnectCount, 0);
 	atomic_set(&tconInfoReconnectCount, 0);
 
 
 	atomic_set(&bufAllocCount, 0);
 	atomic_set(&bufAllocCount, 0);
+	atomic_set(&smBufAllocCount, 0);
+#ifdef CONFIG_CIFS_STATS2
+	atomic_set(&totBufAllocCount, 0);
+	atomic_set(&totSmBufAllocCount, 0);
+#endif /* CONFIG_CIFS_STATS2 */
+
 	atomic_set(&midCount, 0);
 	atomic_set(&midCount, 0);
 	GlobalCurrentXid = 0;
 	GlobalCurrentXid = 0;
 	GlobalTotalActiveXid = 0;
 	GlobalTotalActiveXid = 0;

+ 6 - 2
fs/cifs/cifsglob.h

@@ -505,8 +505,12 @@ GLOBAL_EXTERN atomic_t tcpSesReconnectCount;
 GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
 GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
 
 
 /* Various Debug counters to remove someday (BB) */
 /* Various Debug counters to remove someday (BB) */
-GLOBAL_EXTERN atomic_t bufAllocCount;
-GLOBAL_EXTERN atomic_t smBufAllocCount;      
+GLOBAL_EXTERN atomic_t bufAllocCount;    /* current number allocated  */
+#ifdef CONFIG_CIFS_STATS2
+GLOBAL_EXTERN atomic_t totBufAllocCount; /* total allocated over all time */
+GLOBAL_EXTERN atomic_t totSmBufAllocCount;
+#endif
+GLOBAL_EXTERN atomic_t smBufAllocCount;
 GLOBAL_EXTERN atomic_t midCount;
 GLOBAL_EXTERN atomic_t midCount;
 
 
 /* Misc globals */
 /* Misc globals */

+ 7 - 0
fs/cifs/misc.c

@@ -161,6 +161,9 @@ cifs_buf_get(void)
 	if (ret_buf) {
 	if (ret_buf) {
 		memset(ret_buf, 0, sizeof(struct smb_hdr) + 3);
 		memset(ret_buf, 0, sizeof(struct smb_hdr) + 3);
 		atomic_inc(&bufAllocCount);
 		atomic_inc(&bufAllocCount);
+#ifdef CONFIG_CIFS_STATS2
+		atomic_inc(&totBufAllocCount);
+#endif /* CONFIG_CIFS_STATS2 */
 	}
 	}
 
 
 	return ret_buf;
 	return ret_buf;
@@ -195,6 +198,10 @@ cifs_small_buf_get(void)
 	/* No need to clear memory here, cleared in header assemble */
 	/* No need to clear memory here, cleared in header assemble */
 	/*	memset(ret_buf, 0, sizeof(struct smb_hdr) + 27);*/
 	/*	memset(ret_buf, 0, sizeof(struct smb_hdr) + 27);*/
 		atomic_inc(&smBufAllocCount);
 		atomic_inc(&smBufAllocCount);
+#ifdef CONFIG_CIFS_STATS2
+		atomic_inc(&totSmBufAllocCount);
+#endif /* CONFIG_CIFS_STATS2 */
+
 	}
 	}
 	return ret_buf;
 	return ret_buf;
 }
 }