diff options
| -rw-r--r-- | fs/cifs/cifsglob.h | 9 | ||||
| -rw-r--r-- | fs/cifs/smb2ops.c | 81 | ||||
| -rw-r--r-- | fs/cifs/smb2pdu.c | 4 |
3 files changed, 91 insertions, 3 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 0896328418aa..12b1176b87b0 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h | |||
| @@ -28,6 +28,9 @@ | |||
| 28 | #include "cifsacl.h" | 28 | #include "cifsacl.h" |
| 29 | #include <crypto/internal/hash.h> | 29 | #include <crypto/internal/hash.h> |
| 30 | #include <linux/scatterlist.h> | 30 | #include <linux/scatterlist.h> |
| 31 | #ifdef CONFIG_CIFS_SMB2 | ||
| 32 | #include "smb2pdu.h" | ||
| 33 | #endif | ||
| 31 | 34 | ||
| 32 | /* | 35 | /* |
| 33 | * The sizes of various internal tables and strings | 36 | * The sizes of various internal tables and strings |
| @@ -592,6 +595,12 @@ struct cifs_tcon { | |||
| 592 | atomic_t num_acl_get; | 595 | atomic_t num_acl_get; |
| 593 | atomic_t num_acl_set; | 596 | atomic_t num_acl_set; |
| 594 | } cifs_stats; | 597 | } cifs_stats; |
| 598 | #ifdef CONFIG_CIFS_SMB2 | ||
| 599 | struct { | ||
| 600 | atomic_t smb2_com_sent[NUMBER_OF_SMB2_COMMANDS]; | ||
| 601 | atomic_t smb2_com_failed[NUMBER_OF_SMB2_COMMANDS]; | ||
| 602 | } smb2_stats; | ||
| 603 | #endif /* CONFIG_CIFS_SMB2 */ | ||
| 595 | } stats; | 604 | } stats; |
| 596 | #ifdef CONFIG_CIFS_STATS2 | 605 | #ifdef CONFIG_CIFS_STATS2 |
| 597 | unsigned long long time_writes; | 606 | unsigned long long time_writes; |
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c index 483bd0ba2ecb..1018c5c6b5be 100644 --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c | |||
| @@ -213,6 +213,85 @@ smb2_can_echo(struct TCP_Server_Info *server) | |||
| 213 | return server->echoes; | 213 | return server->echoes; |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | static void | ||
| 217 | smb2_clear_stats(struct cifs_tcon *tcon) | ||
| 218 | { | ||
| 219 | #ifdef CONFIG_CIFS_STATS | ||
| 220 | int i; | ||
| 221 | for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) { | ||
| 222 | atomic_set(&tcon->stats.smb2_stats.smb2_com_sent[i], 0); | ||
| 223 | atomic_set(&tcon->stats.smb2_stats.smb2_com_failed[i], 0); | ||
| 224 | } | ||
| 225 | #endif | ||
| 226 | } | ||
| 227 | |||
| 228 | static void | ||
| 229 | smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon) | ||
| 230 | { | ||
| 231 | #ifdef CONFIG_CIFS_STATS | ||
| 232 | atomic_t *sent = tcon->stats.smb2_stats.smb2_com_sent; | ||
| 233 | atomic_t *failed = tcon->stats.smb2_stats.smb2_com_failed; | ||
| 234 | seq_printf(m, "\nNegotiates: %d sent %d failed", | ||
| 235 | atomic_read(&sent[SMB2_NEGOTIATE_HE]), | ||
| 236 | atomic_read(&failed[SMB2_NEGOTIATE_HE])); | ||
| 237 | seq_printf(m, "\nSessionSetups: %d sent %d failed", | ||
| 238 | atomic_read(&sent[SMB2_SESSION_SETUP_HE]), | ||
| 239 | atomic_read(&failed[SMB2_SESSION_SETUP_HE])); | ||
| 240 | #define SMB2LOGOFF 0x0002 /* trivial request/resp */ | ||
| 241 | seq_printf(m, "\nLogoffs: %d sent %d failed", | ||
| 242 | atomic_read(&sent[SMB2_LOGOFF_HE]), | ||
| 243 | atomic_read(&failed[SMB2_LOGOFF_HE])); | ||
| 244 | seq_printf(m, "\nTreeConnects: %d sent %d failed", | ||
| 245 | atomic_read(&sent[SMB2_TREE_CONNECT_HE]), | ||
| 246 | atomic_read(&failed[SMB2_TREE_CONNECT_HE])); | ||
| 247 | seq_printf(m, "\nTreeDisconnects: %d sent %d failed", | ||
| 248 | atomic_read(&sent[SMB2_TREE_DISCONNECT_HE]), | ||
| 249 | atomic_read(&failed[SMB2_TREE_DISCONNECT_HE])); | ||
| 250 | seq_printf(m, "\nCreates: %d sent %d failed", | ||
| 251 | atomic_read(&sent[SMB2_CREATE_HE]), | ||
| 252 | atomic_read(&failed[SMB2_CREATE_HE])); | ||
| 253 | seq_printf(m, "\nCloses: %d sent %d failed", | ||
| 254 | atomic_read(&sent[SMB2_CLOSE_HE]), | ||
| 255 | atomic_read(&failed[SMB2_CLOSE_HE])); | ||
| 256 | seq_printf(m, "\nFlushes: %d sent %d failed", | ||
| 257 | atomic_read(&sent[SMB2_FLUSH_HE]), | ||
| 258 | atomic_read(&failed[SMB2_FLUSH_HE])); | ||
| 259 | seq_printf(m, "\nReads: %d sent %d failed", | ||
| 260 | atomic_read(&sent[SMB2_READ_HE]), | ||
| 261 | atomic_read(&failed[SMB2_READ_HE])); | ||
| 262 | seq_printf(m, "\nWrites: %d sent %d failed", | ||
| 263 | atomic_read(&sent[SMB2_WRITE_HE]), | ||
| 264 | atomic_read(&failed[SMB2_WRITE_HE])); | ||
| 265 | seq_printf(m, "\nLocks: %d sent %d failed", | ||
| 266 | atomic_read(&sent[SMB2_LOCK_HE]), | ||
| 267 | atomic_read(&failed[SMB2_LOCK_HE])); | ||
| 268 | seq_printf(m, "\nIOCTLs: %d sent %d failed", | ||
| 269 | atomic_read(&sent[SMB2_IOCTL_HE]), | ||
| 270 | atomic_read(&failed[SMB2_IOCTL_HE])); | ||
| 271 | seq_printf(m, "\nCancels: %d sent %d failed", | ||
| 272 | atomic_read(&sent[SMB2_CANCEL_HE]), | ||
| 273 | atomic_read(&failed[SMB2_CANCEL_HE])); | ||
| 274 | seq_printf(m, "\nEchos: %d sent %d failed", | ||
| 275 | atomic_read(&sent[SMB2_ECHO_HE]), | ||
| 276 | atomic_read(&failed[SMB2_ECHO_HE])); | ||
| 277 | seq_printf(m, "\nQueryDirectories: %d sent %d failed", | ||
| 278 | atomic_read(&sent[SMB2_QUERY_DIRECTORY_HE]), | ||
| 279 | atomic_read(&failed[SMB2_QUERY_DIRECTORY_HE])); | ||
| 280 | seq_printf(m, "\nChangeNotifies: %d sent %d failed", | ||
| 281 | atomic_read(&sent[SMB2_CHANGE_NOTIFY_HE]), | ||
| 282 | atomic_read(&failed[SMB2_CHANGE_NOTIFY_HE])); | ||
| 283 | seq_printf(m, "\nQueryInfos: %d sent %d failed", | ||
| 284 | atomic_read(&sent[SMB2_QUERY_INFO_HE]), | ||
| 285 | atomic_read(&failed[SMB2_QUERY_INFO_HE])); | ||
| 286 | seq_printf(m, "\nSetInfos: %d sent %d failed", | ||
| 287 | atomic_read(&sent[SMB2_SET_INFO_HE]), | ||
| 288 | atomic_read(&failed[SMB2_SET_INFO_HE])); | ||
| 289 | seq_printf(m, "\nOplockBreaks: %d sent %d failed", | ||
| 290 | atomic_read(&sent[SMB2_OPLOCK_BREAK_HE]), | ||
| 291 | atomic_read(&failed[SMB2_OPLOCK_BREAK_HE])); | ||
| 292 | #endif | ||
| 293 | } | ||
| 294 | |||
| 216 | struct smb_version_operations smb21_operations = { | 295 | struct smb_version_operations smb21_operations = { |
| 217 | .setup_request = smb2_setup_request, | 296 | .setup_request = smb2_setup_request, |
| 218 | .setup_async_request = smb2_setup_async_request, | 297 | .setup_async_request = smb2_setup_async_request, |
| @@ -225,6 +304,8 @@ struct smb_version_operations smb21_operations = { | |||
| 225 | .find_mid = smb2_find_mid, | 304 | .find_mid = smb2_find_mid, |
| 226 | .check_message = smb2_check_message, | 305 | .check_message = smb2_check_message, |
| 227 | .dump_detail = smb2_dump_detail, | 306 | .dump_detail = smb2_dump_detail, |
| 307 | .clear_stats = smb2_clear_stats, | ||
| 308 | .print_stats = smb2_print_stats, | ||
| 228 | .need_neg = smb2_need_neg, | 309 | .need_neg = smb2_need_neg, |
| 229 | .negotiate = smb2_negotiate, | 310 | .negotiate = smb2_negotiate, |
| 230 | .sess_setup = SMB2_sess_setup, | 311 | .sess_setup = SMB2_sess_setup, |
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index 373b6945161f..e4eb1d3fb7d9 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c | |||
| @@ -282,10 +282,8 @@ small_smb2_init(__le16 smb2_command, struct cifs_tcon *tcon, | |||
| 282 | 282 | ||
| 283 | if (tcon != NULL) { | 283 | if (tcon != NULL) { |
| 284 | #ifdef CONFIG_CIFS_STATS2 | 284 | #ifdef CONFIG_CIFS_STATS2 |
| 285 | /* | ||
| 286 | uint16_t com_code = le16_to_cpu(smb2_command); | 285 | uint16_t com_code = le16_to_cpu(smb2_command); |
| 287 | cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_sent[com_code]); | 286 | cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_sent[com_code]); |
| 288 | */ | ||
| 289 | #endif | 287 | #endif |
| 290 | cifs_stats_inc(&tcon->num_smbs_sent); | 288 | cifs_stats_inc(&tcon->num_smbs_sent); |
| 291 | } | 289 | } |
| @@ -677,7 +675,7 @@ SMB2_logoff(const unsigned int xid, struct cifs_ses *ses) | |||
| 677 | 675 | ||
| 678 | static inline void cifs_stats_fail_inc(struct cifs_tcon *tcon, uint16_t code) | 676 | static inline void cifs_stats_fail_inc(struct cifs_tcon *tcon, uint16_t code) |
| 679 | { | 677 | { |
| 680 | /* cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_fail[code]); */ | 678 | cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_failed[code]); |
| 681 | } | 679 | } |
| 682 | 680 | ||
| 683 | #define MAX_SHARENAME_LENGTH (255 /* server */ + 80 /* share */ + 1 /* NULL */) | 681 | #define MAX_SHARENAME_LENGTH (255 /* server */ + 80 /* share */ + 1 /* NULL */) |
