[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:
Родитель
dd99cd803d
Коммит
131afd0b74
|
@ -81,6 +81,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||
buf += length;
|
||||
length = sprintf(buf,"CIFS Version %s\n",CIFS_VERSION);
|
||||
buf += length;
|
||||
length = sprintf(buf,"Active VFS Requests: %d\n", GlobalTotalActiveXid);
|
||||
buf += length;
|
||||
length = sprintf(buf, "Servers:");
|
||||
buf += length;
|
||||
|
||||
|
@ -97,7 +99,7 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||
} else {
|
||||
length =
|
||||
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,
|
||||
atomic_read(&ses->inUse),
|
||||
ses->serverOS, ses->serverNOS,
|
||||
|
@ -105,12 +107,18 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||
buf += length;
|
||||
}
|
||||
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,
|
||||
atomic_read(&ses->server->socketUseCount),
|
||||
ses->server->secMode,
|
||||
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");
|
||||
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);
|
||||
length =
|
||||
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,
|
||||
atomic_read(&tcon->useCount),
|
||||
tcon->nativeFileSystem,
|
||||
|
|
|
@ -123,13 +123,17 @@ struct TCP_Server_Info {
|
|||
struct list_head pending_mid_q;
|
||||
void *Server_NlsInfo; /* BB - placeholder for future NLS info */
|
||||
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;
|
||||
char versionMajor;
|
||||
char versionMinor;
|
||||
unsigned svlocal:1; /* local server or remote */
|
||||
atomic_t socketUseCount; /* number of open cifs sessions on socket */
|
||||
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 */
|
||||
struct semaphore tcpSem;
|
||||
struct task_struct *tsk;
|
||||
|
|
|
@ -307,9 +307,15 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
|
|||
if(atomic_read(&ses->server->inFlight) >=
|
||||
cifs_max_pending){
|
||||
spin_unlock(&GlobalMid_Lock);
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_inc(&ses->server->num_waiters);
|
||||
#endif
|
||||
wait_event(ses->server->request_q,
|
||||
atomic_read(&ses->server->inFlight)
|
||||
< cifs_max_pending);
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_dec(&ses->server->num_waiters);
|
||||
#endif
|
||||
spin_lock(&GlobalMid_Lock);
|
||||
} else {
|
||||
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); */
|
||||
|
||||
midQ->midState = MID_REQUEST_SUBMITTED;
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_inc(&ses->server->inSend);
|
||||
#endif
|
||||
rc = smb_send2(ses->server->ssocket, iov, n_vec,
|
||||
(struct sockaddr *) &(ses->server->addr.sockAddr));
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_dec(&ses->server->inSend);
|
||||
#endif
|
||||
if(rc < 0) {
|
||||
DeleteMidQEntry(midQ);
|
||||
up(&ses->server->tcpSem);
|
||||
|
@ -546,9 +558,15 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
|
|||
if(atomic_read(&ses->server->inFlight) >=
|
||||
cifs_max_pending){
|
||||
spin_unlock(&GlobalMid_Lock);
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_inc(&ses->server->num_waiters);
|
||||
#endif
|
||||
wait_event(ses->server->request_q,
|
||||
atomic_read(&ses->server->inFlight)
|
||||
< cifs_max_pending);
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_dec(&ses->server->num_waiters);
|
||||
#endif
|
||||
spin_lock(&GlobalMid_Lock);
|
||||
} else {
|
||||
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);
|
||||
|
||||
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,
|
||||
(struct sockaddr *) &(ses->server->addr.sockAddr));
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
atomic_dec(&ses->server->inSend);
|
||||
#endif
|
||||
if(rc < 0) {
|
||||
DeleteMidQEntry(midQ);
|
||||
up(&ses->server->tcpSem);
|
||||
|
|
Загрузка…
Ссылка в новой задаче