mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 15:20:58 +07:00
[CIFS] /proc/fs/cifs debug code cleanup and new stats2
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>
This commit is contained in:
parent
dd99cd803d
commit
131afd0b74
@ -81,6 +81,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||||||
buf += length;
|
buf += length;
|
||||||
length = sprintf(buf,"CIFS Version %s\n",CIFS_VERSION);
|
length = sprintf(buf,"CIFS Version %s\n",CIFS_VERSION);
|
||||||
buf += length;
|
buf += length;
|
||||||
|
length = sprintf(buf,"Active VFS Requests: %d\n", GlobalTotalActiveXid);
|
||||||
|
buf += length;
|
||||||
length = sprintf(buf, "Servers:");
|
length = sprintf(buf, "Servers:");
|
||||||
buf += length;
|
buf += length;
|
||||||
|
|
||||||
@ -97,7 +99,7 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||||||
} else {
|
} else {
|
||||||
length =
|
length =
|
||||||
sprintf(buf,
|
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,
|
i, ses->serverName, ses->serverDomain,
|
||||||
atomic_read(&ses->inUse),
|
atomic_read(&ses->inUse),
|
||||||
ses->serverOS, ses->serverNOS,
|
ses->serverOS, ses->serverNOS,
|
||||||
@ -105,12 +107,18 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||||||
buf += length;
|
buf += length;
|
||||||
}
|
}
|
||||||
if(ses->server) {
|
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,
|
ses->server->tcpStatus,
|
||||||
atomic_read(&ses->server->socketUseCount),
|
atomic_read(&ses->server->socketUseCount),
|
||||||
ses->server->secMode,
|
ses->server->secMode,
|
||||||
atomic_read(&ses->server->inFlight));
|
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");
|
length = sprintf(buf, "\nMIDs:\n");
|
||||||
buf += length;
|
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);
|
dev_type = le32_to_cpu(tcon->fsDevInfo.DeviceType);
|
||||||
length =
|
length =
|
||||||
sprintf(buf,
|
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,
|
i, tcon->treeName,
|
||||||
atomic_read(&tcon->useCount),
|
atomic_read(&tcon->useCount),
|
||||||
tcon->nativeFileSystem,
|
tcon->nativeFileSystem,
|
||||||
|
@ -123,13 +123,17 @@ struct TCP_Server_Info {
|
|||||||
struct list_head pending_mid_q;
|
struct list_head pending_mid_q;
|
||||||
void *Server_NlsInfo; /* BB - placeholder for future NLS info */
|
void *Server_NlsInfo; /* BB - placeholder for future NLS info */
|
||||||
unsigned short server_codepage; /* codepage for the server */
|
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;
|
enum protocolEnum protocolType;
|
||||||
char versionMajor;
|
char versionMajor;
|
||||||
char versionMinor;
|
char versionMinor;
|
||||||
unsigned svlocal:1; /* local server or remote */
|
unsigned svlocal:1; /* local server or remote */
|
||||||
atomic_t socketUseCount; /* number of open cifs sessions on socket */
|
atomic_t socketUseCount; /* number of open cifs sessions on socket */
|
||||||
atomic_t inFlight; /* number of requests on the wire to server */
|
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 */
|
enum statusEnum tcpStatus; /* what we think the status is */
|
||||||
struct semaphore tcpSem;
|
struct semaphore tcpSem;
|
||||||
struct task_struct *tsk;
|
struct task_struct *tsk;
|
||||||
|
@ -307,9 +307,15 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
|
|||||||
if(atomic_read(&ses->server->inFlight) >=
|
if(atomic_read(&ses->server->inFlight) >=
|
||||||
cifs_max_pending){
|
cifs_max_pending){
|
||||||
spin_unlock(&GlobalMid_Lock);
|
spin_unlock(&GlobalMid_Lock);
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_inc(&ses->server->num_waiters);
|
||||||
|
#endif
|
||||||
wait_event(ses->server->request_q,
|
wait_event(ses->server->request_q,
|
||||||
atomic_read(&ses->server->inFlight)
|
atomic_read(&ses->server->inFlight)
|
||||||
< cifs_max_pending);
|
< cifs_max_pending);
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_dec(&ses->server->num_waiters);
|
||||||
|
#endif
|
||||||
spin_lock(&GlobalMid_Lock);
|
spin_lock(&GlobalMid_Lock);
|
||||||
} else {
|
} else {
|
||||||
if(ses->server->tcpStatus == CifsExiting) {
|
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); */
|
/* rc = cifs_sign_smb2(iov, n_vec, ses->server, &midQ->sequence_number); */
|
||||||
|
|
||||||
midQ->midState = MID_REQUEST_SUBMITTED;
|
midQ->midState = MID_REQUEST_SUBMITTED;
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_inc(&ses->server->inSend);
|
||||||
|
#endif
|
||||||
rc = smb_send2(ses->server->ssocket, iov, n_vec,
|
rc = smb_send2(ses->server->ssocket, iov, n_vec,
|
||||||
(struct sockaddr *) &(ses->server->addr.sockAddr));
|
(struct sockaddr *) &(ses->server->addr.sockAddr));
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_dec(&ses->server->inSend);
|
||||||
|
#endif
|
||||||
if(rc < 0) {
|
if(rc < 0) {
|
||||||
DeleteMidQEntry(midQ);
|
DeleteMidQEntry(midQ);
|
||||||
up(&ses->server->tcpSem);
|
up(&ses->server->tcpSem);
|
||||||
@ -546,9 +558,15 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
|
|||||||
if(atomic_read(&ses->server->inFlight) >=
|
if(atomic_read(&ses->server->inFlight) >=
|
||||||
cifs_max_pending){
|
cifs_max_pending){
|
||||||
spin_unlock(&GlobalMid_Lock);
|
spin_unlock(&GlobalMid_Lock);
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_inc(&ses->server->num_waiters);
|
||||||
|
#endif
|
||||||
wait_event(ses->server->request_q,
|
wait_event(ses->server->request_q,
|
||||||
atomic_read(&ses->server->inFlight)
|
atomic_read(&ses->server->inFlight)
|
||||||
< cifs_max_pending);
|
< cifs_max_pending);
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_dec(&ses->server->num_waiters);
|
||||||
|
#endif
|
||||||
spin_lock(&GlobalMid_Lock);
|
spin_lock(&GlobalMid_Lock);
|
||||||
} else {
|
} else {
|
||||||
if(ses->server->tcpStatus == CifsExiting) {
|
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);
|
rc = cifs_sign_smb(in_buf, ses->server, &midQ->sequence_number);
|
||||||
|
|
||||||
midQ->midState = MID_REQUEST_SUBMITTED;
|
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,
|
rc = smb_send(ses->server->ssocket, in_buf, in_buf->smb_buf_length,
|
||||||
(struct sockaddr *) &(ses->server->addr.sockAddr));
|
(struct sockaddr *) &(ses->server->addr.sockAddr));
|
||||||
|
#ifdef CONFIG_CIFS_STATS2
|
||||||
|
atomic_dec(&ses->server->inSend);
|
||||||
|
#endif
|
||||||
if(rc < 0) {
|
if(rc < 0) {
|
||||||
DeleteMidQEntry(midQ);
|
DeleteMidQEntry(midQ);
|
||||||
up(&ses->server->tcpSem);
|
up(&ses->server->tcpSem);
|
||||||
|
Loading…
Reference in New Issue
Block a user