From: Jeffrey Altman Date: Sun, 19 Oct 2008 23:50:21 +0000 (+0000) Subject: windows-smb-rdr-duration-logging-20081019 X-Git-Tag: openafs-devel-1_5_61~740 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=0c7d7ce3b8386a1aca6d1fc3d738c8621708eb95;p=packages%2Fo%2Fopenafs.git windows-smb-rdr-duration-logging-20081019 LICENSE MIT if an smb request takes longer than 45 seconds, log info to afsd_init.log that might be helpful in determining patterns in the smb client disconnects --- diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 5f215731b..f66cc05c5 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -8054,6 +8054,39 @@ void smb_DispatchPacket(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp, newTime = GetTickCount(); osi_Log2(smb_logp, "Dispatch %s duration %d ms", opName, newTime - oldTime); + /* ReceiveV3Tran2A handles its own logging */ + if (inp->inCom != 0x32 && newTime - oldTime > 45000) { + smb_user_t *uidp; + smb_fid_t *fidp; + clientchar_t *treepath = NULL; /* do not free */ + clientchar_t *pathname = NULL; + cm_fid_t afid = {0,0,0,0,0}; + + uidp = smb_FindUID(vcp, smbp->uid, 0); + smb_LookupTIDPath(vcp,((smb_t *)inp)->tid, &treepath); + fidp = smb_FindFID(vcp, inp->fid, 0); + + if (fidp && fidp->NTopen_pathp) + pathname = fidp->NTopen_pathp; + else if (inp->stringsp->wdata) + pathname = inp->stringsp->wdata; + + if (fidp && fidp->scp) + afid = fidp->scp->fid; + + afsi_log("Request %s duration %d ms user %S tid \"%S\" path? \"%S\" afid (%d.%d.%d.%d)", + opName, newTime - oldTime, + uidp ? uidp->unp->name : NULL, + treepath, + pathname, + afid.cell, afid.volume, afid.vnode, afid.unique); + + if (uidp) + smb_ReleaseUID(uidp); + if (fidp) + smb_ReleaseFID(fidp); + } + if (oldGen != sessionGen) { LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_WRONG_SESSION, newTime - oldTime, ncbp->ncb_length); diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index ca9588e11..2ec4362b6 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -2116,6 +2116,7 @@ long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) int dataCount; int firstPacket; long code = 0; + DWORD oldTime, newTime; /* We sometimes see 0 word count. What to do? */ if (*inp->wctp == 0) { @@ -2188,6 +2189,8 @@ long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) osi_QRemove((osi_queue_t **) &smb_tran2AssemblyQueuep, &asp->q); lock_ReleaseWrite(&smb_globalLock); + oldTime = GetTickCount(); + /* now dispatch it */ if ( asp->opcode >= 0 && asp->opcode < 20 && smb_tran2DispatchTable[asp->opcode].procp) { osi_Log4(smb_logp,"AFS Server - Dispatch-2 %s vcp[%p] lana[%d] lsn[%d]",myCrt_2Dispatch(asp->opcode),vcp,vcp->lana,vcp->lsn); @@ -2207,6 +2210,39 @@ long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) smb_SendTran2Error(vcp, asp, outp, code); } + newTime = GetTickCount(); + if (newTime - oldTime > 45000) { + smb_user_t *uidp; + smb_fid_t *fidp; + clientchar_t *treepath = NULL; /* do not free */ + clientchar_t *pathname = NULL; + cm_fid_t afid = {0,0,0,0,0}; + + uidp = smb_FindUID(vcp, asp->uid, 0); + smb_LookupTIDPath(vcp, asp->tid, &treepath); + fidp = smb_FindFID(vcp, inp->fid, 0); + + if (fidp && fidp->NTopen_pathp) + pathname = fidp->NTopen_pathp; + else if (inp->stringsp->wdata) + pathname = inp->stringsp->wdata; + + if (fidp && fidp->scp) + afid = fidp->scp->fid; + + afsi_log("Request %s duration %d ms user %S tid \"%S\" path? \"%S\" afid (%d.%d.%d.%d)", + myCrt_2Dispatch(asp->opcode), newTime - oldTime, + uidp ? uidp->unp->name : NULL, + treepath, + pathname, + afid.cell, afid.volume, afid.vnode, afid.unique); + + if (uidp) + smb_ReleaseUID(uidp); + if (fidp) + smb_ReleaseFID(fidp); + } + /* free the input tran 2 packet */ smb_FreeTran2Packet(asp); }