Commit 44c58186 authored by Pavel Shilovsky's avatar Pavel Shilovsky

CIFS: Move clear/print_stats code to ops struct

Signed-off-by: default avatarPavel Shilovsky <pshilovsky@samba.org>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
parent 9094fad1
...@@ -282,24 +282,8 @@ static ssize_t cifs_stats_proc_write(struct file *file, ...@@ -282,24 +282,8 @@ static ssize_t cifs_stats_proc_write(struct file *file,
struct cifs_tcon, struct cifs_tcon,
tcon_list); tcon_list);
atomic_set(&tcon->num_smbs_sent, 0); atomic_set(&tcon->num_smbs_sent, 0);
atomic_set(&tcon->num_writes, 0); if (server->ops->clear_stats)
atomic_set(&tcon->num_reads, 0); server->ops->clear_stats(tcon);
atomic_set(&tcon->num_oplock_brks, 0);
atomic_set(&tcon->num_opens, 0);
atomic_set(&tcon->num_posixopens, 0);
atomic_set(&tcon->num_posixmkdirs, 0);
atomic_set(&tcon->num_closes, 0);
atomic_set(&tcon->num_deletes, 0);
atomic_set(&tcon->num_mkdirs, 0);
atomic_set(&tcon->num_rmdirs, 0);
atomic_set(&tcon->num_renames, 0);
atomic_set(&tcon->num_t2renames, 0);
atomic_set(&tcon->num_ffirst, 0);
atomic_set(&tcon->num_fnext, 0);
atomic_set(&tcon->num_fclose, 0);
atomic_set(&tcon->num_hardlinks, 0);
atomic_set(&tcon->num_symlinks, 0);
atomic_set(&tcon->num_locks, 0);
} }
} }
} }
...@@ -358,42 +342,10 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v) ...@@ -358,42 +342,10 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v)
seq_printf(m, "\n%d) %s", i, tcon->treeName); seq_printf(m, "\n%d) %s", i, tcon->treeName);
if (tcon->need_reconnect) if (tcon->need_reconnect)
seq_puts(m, "\tDISCONNECTED "); seq_puts(m, "\tDISCONNECTED ");
seq_printf(m, "\nSMBs: %d Oplock Breaks: %d", seq_printf(m, "\nSMBs: %d",
atomic_read(&tcon->num_smbs_sent), atomic_read(&tcon->num_smbs_sent));
atomic_read(&tcon->num_oplock_brks)); if (server->ops->print_stats)
seq_printf(m, "\nReads: %d Bytes: %lld", server->ops->print_stats(m, tcon);
atomic_read(&tcon->num_reads),
(long long)(tcon->bytes_read));
seq_printf(m, "\nWrites: %d Bytes: %lld",
atomic_read(&tcon->num_writes),
(long long)(tcon->bytes_written));
seq_printf(m, "\nFlushes: %d",
atomic_read(&tcon->num_flushes));
seq_printf(m, "\nLocks: %d HardLinks: %d "
"Symlinks: %d",
atomic_read(&tcon->num_locks),
atomic_read(&tcon->num_hardlinks),
atomic_read(&tcon->num_symlinks));
seq_printf(m, "\nOpens: %d Closes: %d "
"Deletes: %d",
atomic_read(&tcon->num_opens),
atomic_read(&tcon->num_closes),
atomic_read(&tcon->num_deletes));
seq_printf(m, "\nPosix Opens: %d "
"Posix Mkdirs: %d",
atomic_read(&tcon->num_posixopens),
atomic_read(&tcon->num_posixmkdirs));
seq_printf(m, "\nMkdirs: %d Rmdirs: %d",
atomic_read(&tcon->num_mkdirs),
atomic_read(&tcon->num_rmdirs));
seq_printf(m, "\nRenames: %d T2 Renames %d",
atomic_read(&tcon->num_renames),
atomic_read(&tcon->num_t2renames));
seq_printf(m, "\nFindFirst: %d FNext %d "
"FClose %d",
atomic_read(&tcon->num_ffirst),
atomic_read(&tcon->num_fnext),
atomic_read(&tcon->num_fclose));
} }
} }
} }
......
...@@ -197,6 +197,8 @@ struct smb_version_operations { ...@@ -197,6 +197,8 @@ struct smb_version_operations {
/* find mid corresponding to the response message */ /* find mid corresponding to the response message */
struct mid_q_entry * (*find_mid)(struct TCP_Server_Info *, char *); struct mid_q_entry * (*find_mid)(struct TCP_Server_Info *, char *);
void (*dump_detail)(void *); void (*dump_detail)(void *);
void (*clear_stats)(struct cifs_tcon *);
void (*print_stats)(struct seq_file *m, struct cifs_tcon *);
/* verify the message */ /* verify the message */
int (*check_message)(char *, unsigned int); int (*check_message)(char *, unsigned int);
bool (*is_oplock_break)(char *, struct TCP_Server_Info *); bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
...@@ -566,6 +568,8 @@ struct cifs_tcon { ...@@ -566,6 +568,8 @@ struct cifs_tcon {
enum statusEnum tidStatus; enum statusEnum tidStatus;
#ifdef CONFIG_CIFS_STATS #ifdef CONFIG_CIFS_STATS
atomic_t num_smbs_sent; atomic_t num_smbs_sent;
union {
struct {
atomic_t num_writes; atomic_t num_writes;
atomic_t num_reads; atomic_t num_reads;
atomic_t num_flushes; atomic_t num_flushes;
...@@ -587,6 +591,8 @@ struct cifs_tcon { ...@@ -587,6 +591,8 @@ struct cifs_tcon {
atomic_t num_locks; atomic_t num_locks;
atomic_t num_acl_get; atomic_t num_acl_get;
atomic_t num_acl_set; atomic_t num_acl_set;
} cifs_stats;
} stats;
#ifdef CONFIG_CIFS_STATS2 #ifdef CONFIG_CIFS_STATS2
unsigned long long time_writes; unsigned long long time_writes;
unsigned long long time_reads; unsigned long long time_reads;
......
...@@ -893,7 +893,7 @@ CIFSPOSIXDelFile(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -893,7 +893,7 @@ CIFSPOSIXDelFile(const unsigned int xid, struct cifs_tcon *tcon,
cFYI(1, "Posix delete returned %d", rc); cFYI(1, "Posix delete returned %d", rc);
cifs_buf_release(pSMB); cifs_buf_release(pSMB);
cifs_stats_inc(&tcon->num_deletes); cifs_stats_inc(&tcon->stats.cifs_stats.num_deletes);
if (rc == -EAGAIN) if (rc == -EAGAIN)
goto PsxDelete; goto PsxDelete;
...@@ -936,7 +936,7 @@ CIFSSMBDelFile(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -936,7 +936,7 @@ CIFSSMBDelFile(const unsigned int xid, struct cifs_tcon *tcon,
pSMB->ByteCount = cpu_to_le16(name_len + 1); pSMB->ByteCount = cpu_to_le16(name_len + 1);
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_deletes); cifs_stats_inc(&tcon->stats.cifs_stats.num_deletes);
if (rc) if (rc)
cFYI(1, "Error in RMFile = %d", rc); cFYI(1, "Error in RMFile = %d", rc);
...@@ -981,7 +981,7 @@ CIFSSMBRmDir(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -981,7 +981,7 @@ CIFSSMBRmDir(const unsigned int xid, struct cifs_tcon *tcon,
pSMB->ByteCount = cpu_to_le16(name_len + 1); pSMB->ByteCount = cpu_to_le16(name_len + 1);
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_rmdirs); cifs_stats_inc(&tcon->stats.cifs_stats.num_rmdirs);
if (rc) if (rc)
cFYI(1, "Error in RMDir = %d", rc); cFYI(1, "Error in RMDir = %d", rc);
...@@ -1024,7 +1024,7 @@ CIFSSMBMkDir(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -1024,7 +1024,7 @@ CIFSSMBMkDir(const unsigned int xid, struct cifs_tcon *tcon,
pSMB->ByteCount = cpu_to_le16(name_len + 1); pSMB->ByteCount = cpu_to_le16(name_len + 1);
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_mkdirs); cifs_stats_inc(&tcon->stats.cifs_stats.num_mkdirs);
if (rc) if (rc)
cFYI(1, "Error in Mkdir = %d", rc); cFYI(1, "Error in Mkdir = %d", rc);
...@@ -1147,9 +1147,9 @@ CIFSPOSIXCreate(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -1147,9 +1147,9 @@ CIFSPOSIXCreate(const unsigned int xid, struct cifs_tcon *tcon,
cifs_buf_release(pSMB); cifs_buf_release(pSMB);
if (posix_flags & SMB_O_DIRECTORY) if (posix_flags & SMB_O_DIRECTORY)
cifs_stats_inc(&tcon->num_posixmkdirs); cifs_stats_inc(&tcon->stats.cifs_stats.num_posixmkdirs);
else else
cifs_stats_inc(&tcon->num_posixopens); cifs_stats_inc(&tcon->stats.cifs_stats.num_posixopens);
if (rc == -EAGAIN) if (rc == -EAGAIN)
goto PsxCreat; goto PsxCreat;
...@@ -1270,7 +1270,7 @@ SMBLegacyOpen(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -1270,7 +1270,7 @@ SMBLegacyOpen(const unsigned int xid, struct cifs_tcon *tcon,
/* long_op set to 1 to allow for oplock break timeouts */ /* long_op set to 1 to allow for oplock break timeouts */
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *)pSMBr, &bytes_returned, 0); (struct smb_hdr *)pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_opens); cifs_stats_inc(&tcon->stats.cifs_stats.num_opens);
if (rc) { if (rc) {
cFYI(1, "Error in Open = %d", rc); cFYI(1, "Error in Open = %d", rc);
} else { } else {
...@@ -1383,7 +1383,7 @@ CIFSSMBOpen(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -1383,7 +1383,7 @@ CIFSSMBOpen(const unsigned int xid, struct cifs_tcon *tcon,
/* long_op set to 1 to allow for oplock break timeouts */ /* long_op set to 1 to allow for oplock break timeouts */
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *)pSMBr, &bytes_returned, 0); (struct smb_hdr *)pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_opens); cifs_stats_inc(&tcon->stats.cifs_stats.num_opens);
if (rc) { if (rc) {
cFYI(1, "Error in Open = %d", rc); cFYI(1, "Error in Open = %d", rc);
} else { } else {
...@@ -1650,7 +1650,7 @@ cifs_async_readv(struct cifs_readdata *rdata) ...@@ -1650,7 +1650,7 @@ cifs_async_readv(struct cifs_readdata *rdata)
rdata, 0); rdata, 0);
if (rc == 0) if (rc == 0)
cifs_stats_inc(&tcon->num_reads); cifs_stats_inc(&tcon->stats.cifs_stats.num_reads);
else else
kref_put(&rdata->refcount, cifs_readdata_release); kref_put(&rdata->refcount, cifs_readdata_release);
...@@ -1720,7 +1720,7 @@ CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms, ...@@ -1720,7 +1720,7 @@ CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
iov[0].iov_len = be32_to_cpu(pSMB->hdr.smb_buf_length) + 4; iov[0].iov_len = be32_to_cpu(pSMB->hdr.smb_buf_length) + 4;
rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovecs */, rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovecs */,
&resp_buf_type, CIFS_LOG_ERROR); &resp_buf_type, CIFS_LOG_ERROR);
cifs_stats_inc(&tcon->num_reads); cifs_stats_inc(&tcon->stats.cifs_stats.num_reads);
pSMBr = (READ_RSP *)iov[0].iov_base; pSMBr = (READ_RSP *)iov[0].iov_base;
if (rc) { if (rc) {
cERROR(1, "Send error in read = %d", rc); cERROR(1, "Send error in read = %d", rc);
...@@ -1872,7 +1872,7 @@ CIFSSMBWrite(const unsigned int xid, struct cifs_io_parms *io_parms, ...@@ -1872,7 +1872,7 @@ CIFSSMBWrite(const unsigned int xid, struct cifs_io_parms *io_parms,
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, long_op); (struct smb_hdr *) pSMBr, &bytes_returned, long_op);
cifs_stats_inc(&tcon->num_writes); cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
if (rc) { if (rc) {
cFYI(1, "Send error in write = %d", rc); cFYI(1, "Send error in write = %d", rc);
} else { } else {
...@@ -2123,7 +2123,7 @@ cifs_async_writev(struct cifs_writedata *wdata) ...@@ -2123,7 +2123,7 @@ cifs_async_writev(struct cifs_writedata *wdata)
NULL, cifs_writev_callback, wdata, 0); NULL, cifs_writev_callback, wdata, 0);
if (rc == 0) if (rc == 0)
cifs_stats_inc(&tcon->num_writes); cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
else else
kref_put(&wdata->refcount, cifs_writedata_release); kref_put(&wdata->refcount, cifs_writedata_release);
...@@ -2213,7 +2213,7 @@ CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms, ...@@ -2213,7 +2213,7 @@ CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms,
rc = SendReceive2(xid, tcon->ses, iov, n_vec + 1, &resp_buf_type, rc = SendReceive2(xid, tcon->ses, iov, n_vec + 1, &resp_buf_type,
long_op); long_op);
cifs_stats_inc(&tcon->num_writes); cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
if (rc) { if (rc) {
cFYI(1, "Send error Write2 = %d", rc); cFYI(1, "Send error Write2 = %d", rc);
} else if (resp_buf_type == 0) { } else if (resp_buf_type == 0) {
...@@ -2279,7 +2279,7 @@ int cifs_lockv(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -2279,7 +2279,7 @@ int cifs_lockv(const unsigned int xid, struct cifs_tcon *tcon,
iov[1].iov_base = (char *)buf; iov[1].iov_base = (char *)buf;
iov[1].iov_len = (num_unlock + num_lock) * sizeof(LOCKING_ANDX_RANGE); iov[1].iov_len = (num_unlock + num_lock) * sizeof(LOCKING_ANDX_RANGE);
cifs_stats_inc(&tcon->num_locks); cifs_stats_inc(&tcon->stats.cifs_stats.num_locks);
rc = SendReceive2(xid, tcon->ses, iov, 2, &resp_buf_type, CIFS_NO_RESP); rc = SendReceive2(xid, tcon->ses, iov, 2, &resp_buf_type, CIFS_NO_RESP);
if (rc) if (rc)
cFYI(1, "Send error in cifs_lockv = %d", rc); cFYI(1, "Send error in cifs_lockv = %d", rc);
...@@ -2348,7 +2348,7 @@ CIFSSMBLock(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -2348,7 +2348,7 @@ CIFSSMBLock(const unsigned int xid, struct cifs_tcon *tcon,
rc = SendReceiveNoRsp(xid, tcon->ses, (char *)pSMB, flags); rc = SendReceiveNoRsp(xid, tcon->ses, (char *)pSMB, flags);
/* SMB buffer freed by function above */ /* SMB buffer freed by function above */
} }
cifs_stats_inc(&tcon->num_locks); cifs_stats_inc(&tcon->stats.cifs_stats.num_locks);
if (rc) if (rc)
cFYI(1, "Send error in Lock = %d", rc); cFYI(1, "Send error in Lock = %d", rc);
...@@ -2511,7 +2511,7 @@ CIFSSMBClose(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id) ...@@ -2511,7 +2511,7 @@ CIFSSMBClose(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id)
pSMB->LastWriteTime = 0xFFFFFFFF; pSMB->LastWriteTime = 0xFFFFFFFF;
pSMB->ByteCount = 0; pSMB->ByteCount = 0;
rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0); rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
cifs_stats_inc(&tcon->num_closes); cifs_stats_inc(&tcon->stats.cifs_stats.num_closes);
if (rc) { if (rc) {
if (rc != -EINTR) { if (rc != -EINTR) {
/* EINTR is expected when user ctl-c to kill app */ /* EINTR is expected when user ctl-c to kill app */
...@@ -2540,7 +2540,7 @@ CIFSSMBFlush(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id) ...@@ -2540,7 +2540,7 @@ CIFSSMBFlush(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id)
pSMB->FileID = (__u16) smb_file_id; pSMB->FileID = (__u16) smb_file_id;
pSMB->ByteCount = 0; pSMB->ByteCount = 0;
rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0); rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
cifs_stats_inc(&tcon->num_flushes); cifs_stats_inc(&tcon->stats.cifs_stats.num_flushes);
if (rc) if (rc)
cERROR(1, "Send error in Flush = %d", rc); cERROR(1, "Send error in Flush = %d", rc);
...@@ -2603,7 +2603,7 @@ CIFSSMBRename(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -2603,7 +2603,7 @@ CIFSSMBRename(const unsigned int xid, struct cifs_tcon *tcon,
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_renames); cifs_stats_inc(&tcon->stats.cifs_stats.num_renames);
if (rc) if (rc)
cFYI(1, "Send error in rename = %d", rc); cFYI(1, "Send error in rename = %d", rc);
...@@ -2684,7 +2684,7 @@ int CIFSSMBRenameOpenFile(const unsigned int xid, struct cifs_tcon *pTcon, ...@@ -2684,7 +2684,7 @@ int CIFSSMBRenameOpenFile(const unsigned int xid, struct cifs_tcon *pTcon,
pSMB->ByteCount = cpu_to_le16(byte_count); pSMB->ByteCount = cpu_to_le16(byte_count);
rc = SendReceive(xid, pTcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, pTcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&pTcon->num_t2renames); cifs_stats_inc(&pTcon->stats.cifs_stats.num_t2renames);
if (rc) if (rc)
cFYI(1, "Send error in Rename (by file handle) = %d", rc); cFYI(1, "Send error in Rename (by file handle) = %d", rc);
...@@ -2841,7 +2841,7 @@ CIFSUnixCreateSymLink(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -2841,7 +2841,7 @@ CIFSUnixCreateSymLink(const unsigned int xid, struct cifs_tcon *tcon,
pSMB->ByteCount = cpu_to_le16(byte_count); pSMB->ByteCount = cpu_to_le16(byte_count);
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_symlinks); cifs_stats_inc(&tcon->stats.cifs_stats.num_symlinks);
if (rc) if (rc)
cFYI(1, "Send error in SetPathInfo create symlink = %d", rc); cFYI(1, "Send error in SetPathInfo create symlink = %d", rc);
...@@ -2927,7 +2927,7 @@ CIFSUnixCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -2927,7 +2927,7 @@ CIFSUnixCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
pSMB->ByteCount = cpu_to_le16(byte_count); pSMB->ByteCount = cpu_to_le16(byte_count);
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_hardlinks); cifs_stats_inc(&tcon->stats.cifs_stats.num_hardlinks);
if (rc) if (rc)
cFYI(1, "Send error in SetPathInfo (hard link) = %d", rc); cFYI(1, "Send error in SetPathInfo (hard link) = %d", rc);
...@@ -2999,7 +2999,7 @@ CIFSCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -2999,7 +2999,7 @@ CIFSCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_hardlinks); cifs_stats_inc(&tcon->stats.cifs_stats.num_hardlinks);
if (rc) if (rc)
cFYI(1, "Send error in hard link (NT rename) = %d", rc); cFYI(1, "Send error in hard link (NT rename) = %d", rc);
...@@ -3417,7 +3417,7 @@ CIFSSMBGetPosixACL(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -3417,7 +3417,7 @@ CIFSSMBGetPosixACL(const unsigned int xid, struct cifs_tcon *tcon,
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_acl_get); cifs_stats_inc(&tcon->stats.cifs_stats.num_acl_get);
if (rc) { if (rc) {
cFYI(1, "Send error in Query POSIX ACL = %d", rc); cFYI(1, "Send error in Query POSIX ACL = %d", rc);
} else { } else {
...@@ -3728,7 +3728,7 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid, ...@@ -3728,7 +3728,7 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid,
rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovec */, &buf_type, rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovec */, &buf_type,
0); 0);
cifs_stats_inc(&tcon->num_acl_get); cifs_stats_inc(&tcon->stats.cifs_stats.num_acl_get);
if (rc) { if (rc) {
cFYI(1, "Send error in QuerySecDesc = %d", rc); cFYI(1, "Send error in QuerySecDesc = %d", rc);
} else { /* decode response */ } else { /* decode response */
...@@ -4330,7 +4330,7 @@ CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -4330,7 +4330,7 @@ CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon,
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_ffirst); cifs_stats_inc(&tcon->stats.cifs_stats.num_ffirst);
if (rc) {/* BB add logic to retry regular search if Unix search if (rc) {/* BB add logic to retry regular search if Unix search
rejected unexpectedly by server */ rejected unexpectedly by server */
...@@ -4457,7 +4457,7 @@ int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -4457,7 +4457,7 @@ int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon,
rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
(struct smb_hdr *) pSMBr, &bytes_returned, 0); (struct smb_hdr *) pSMBr, &bytes_returned, 0);
cifs_stats_inc(&tcon->num_fnext); cifs_stats_inc(&tcon->stats.cifs_stats.num_fnext);
if (rc) { if (rc) {
if (rc == -EBADF) { if (rc == -EBADF) {
psrch_inf->endOfSearch = true; psrch_inf->endOfSearch = true;
...@@ -4548,7 +4548,7 @@ CIFSFindClose(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -4548,7 +4548,7 @@ CIFSFindClose(const unsigned int xid, struct cifs_tcon *tcon,
if (rc) if (rc)
cERROR(1, "Send error in FindClose = %d", rc); cERROR(1, "Send error in FindClose = %d", rc);
cifs_stats_inc(&tcon->num_fclose); cifs_stats_inc(&tcon->stats.cifs_stats.num_fclose);
/* Since session is dead, search handle closed on server already */ /* Since session is dead, search handle closed on server already */
if (rc == -EAGAIN) if (rc == -EAGAIN)
......
...@@ -461,7 +461,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv) ...@@ -461,7 +461,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv)
if (tcon->tid != buf->Tid) if (tcon->tid != buf->Tid)
continue; continue;
cifs_stats_inc(&tcon->num_oplock_brks); cifs_stats_inc(&tcon->stats.cifs_stats.num_oplock_brks);
spin_lock(&cifs_file_list_lock); spin_lock(&cifs_file_list_lock);
list_for_each(tmp2, &tcon->openFileList) { list_for_each(tmp2, &tcon->openFileList) {
netfile = list_entry(tmp2, struct cifsFileInfo, netfile = list_entry(tmp2, struct cifsFileInfo,
......
...@@ -520,6 +520,72 @@ cifs_build_path_to_root(struct smb_vol *vol, struct cifs_sb_info *cifs_sb, ...@@ -520,6 +520,72 @@ cifs_build_path_to_root(struct smb_vol *vol, struct cifs_sb_info *cifs_sb,
return full_path; return full_path;
} }
static void
cifs_clear_stats(struct cifs_tcon *tcon)
{
#ifdef CONFIG_CIFS_STATS
atomic_set(&tcon->stats.cifs_stats.num_writes, 0);
atomic_set(&tcon->stats.cifs_stats.num_reads, 0);
atomic_set(&tcon->stats.cifs_stats.num_flushes, 0);
atomic_set(&tcon->stats.cifs_stats.num_oplock_brks, 0);
atomic_set(&tcon->stats.cifs_stats.num_opens, 0);
atomic_set(&tcon->stats.cifs_stats.num_posixopens, 0);
atomic_set(&tcon->stats.cifs_stats.num_posixmkdirs, 0);
atomic_set(&tcon->stats.cifs_stats.num_closes, 0);
atomic_set(&tcon->stats.cifs_stats.num_deletes, 0);
atomic_set(&tcon->stats.cifs_stats.num_mkdirs, 0);
atomic_set(&tcon->stats.cifs_stats.num_rmdirs, 0);
atomic_set(&tcon->stats.cifs_stats.num_renames, 0);
atomic_set(&tcon->stats.cifs_stats.num_t2renames, 0);
atomic_set(&tcon->stats.cifs_stats.num_ffirst, 0);
atomic_set(&tcon->stats.cifs_stats.num_fnext, 0);
atomic_set(&tcon->stats.cifs_stats.num_fclose, 0);
atomic_set(&tcon->stats.cifs_stats.num_hardlinks, 0);
atomic_set(&tcon->stats.cifs_stats.num_symlinks, 0);
atomic_set(&tcon->stats.cifs_stats.num_locks, 0);
atomic_set(&tcon->stats.cifs_stats.num_acl_get, 0);
atomic_set(&tcon->stats.cifs_stats.num_acl_set, 0);
#endif
}
static void
cifs_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
{
#ifdef CONFIG_CIFS_STATS
seq_printf(m, " Oplocks breaks: %d",
atomic_read(&tcon->stats.cifs_stats.num_oplock_brks));
seq_printf(m, "\nReads: %d Bytes: %llu",
atomic_read(&tcon->stats.cifs_stats.num_reads),
(long long)(tcon->bytes_read));
seq_printf(m, "\nWrites: %d Bytes: %llu",
atomic_read(&tcon->stats.cifs_stats.num_writes),
(long long)(tcon->bytes_written));
seq_printf(m, "\nFlushes: %d",
atomic_read(&tcon->stats.cifs_stats.num_flushes));
seq_printf(m, "\nLocks: %d HardLinks: %d Symlinks: %d",
atomic_read(&tcon->stats.cifs_stats.num_locks),
atomic_read(&tcon->stats.cifs_stats.num_hardlinks),
atomic_read(&tcon->stats.cifs_stats.num_symlinks));
seq_printf(m, "\nOpens: %d Closes: %d Deletes: %d",
atomic_read(&tcon->stats.cifs_stats.num_opens),
atomic_read(&tcon->stats.cifs_stats.num_closes),
atomic_read(&tcon->stats.cifs_stats.num_deletes));
seq_printf(m, "\nPosix Opens: %d Posix Mkdirs: %d",
atomic_read(&tcon->stats.cifs_stats.num_posixopens),
atomic_read(&tcon->stats.cifs_stats.num_posixmkdirs));
seq_printf(m, "\nMkdirs: %d Rmdirs: %d",
atomic_read(&tcon->stats.cifs_stats.num_mkdirs),
atomic_read(&tcon->stats.cifs_stats.num_rmdirs));
seq_printf(m, "\nRenames: %d T2 Renames %d",
atomic_read(&tcon->stats.cifs_stats.num_renames),
atomic_read(&tcon->stats.cifs_stats.num_t2renames));
seq_printf(m, "\nFindFirst: %d FNext %d FClose %d",
atomic_read(&tcon->stats.cifs_stats.num_ffirst),
atomic_read(&tcon->stats.cifs_stats.num_fnext),
atomic_read(&tcon->stats.cifs_stats.num_fclose));
#endif
}
struct smb_version_operations smb1_operations = { struct smb_version_operations smb1_operations = {
.send_cancel = send_nt_cancel, .send_cancel = send_nt_cancel,
.compare_fids = cifs_compare_fids, .compare_fids = cifs_compare_fids,
...@@ -537,6 +603,8 @@ struct smb_version_operations smb1_operations = { ...@@ -537,6 +603,8 @@ struct smb_version_operations smb1_operations = {
.find_mid = cifs_find_mid, .find_mid = cifs_find_mid,
.check_message = checkSMB, .check_message = checkSMB,
.dump_detail = cifs_dump_detail, .dump_detail = cifs_dump_detail,
.clear_stats = cifs_clear_stats,
.print_stats = cifs_print_stats,
.is_oplock_break = is_valid_oplock_break, .is_oplock_break = is_valid_oplock_break,
.check_trans2 = cifs_check_trans2, .check_trans2 = cifs_check_trans2,
.need_neg = cifs_need_neg, .need_neg = cifs_need_neg,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment