lock-tracing-20020108

patches to allow tracing with fstrace of afs locks
This commit is contained in:
Nickolai Zeldovich 2002-01-08 20:54:12 +00:00 committed by Derrick Brashear
parent 899a6eb679
commit 54624ac81b
3 changed files with 64 additions and 24 deletions

View File

@ -362,3 +362,34 @@ struct afs_bozoLock *alock; {
return 0; return 0;
} }
#endif #endif
Afs_Lock_Trace(op, alock, type, file, line)
int op;
struct afs_lock *alock;
int type;
char *file;
int line;
{
int traceok;
struct afs_icl_log *tlp;
struct afs_icl_set *tsp;
if (!afs_trclock) return 1;
if ((alock) == &afs_icl_lock) return 1;
ObtainReadLock(&afs_icl_lock);
traceok = 1;
for (tlp = afs_icl_allLogs; tlp; tlp = tlp->nextp)
if ((alock) == &tlp->lock) traceok = 0;
for (tsp = afs_icl_allSets; tsp; tsp = tsp->nextp)
if ((alock) == &tsp->lock) traceok = 0;
ReleaseReadLock(&afs_icl_lock);
if (!traceok) return 1;
afs_Trace4(afs_iclSetp, op,
ICL_TYPE_STRING, (long)file,
ICL_TYPE_INT32, (long)line,
ICL_TYPE_POINTER, (long)alock,
ICL_TYPE_LONG, (long)type);
return 0;
}

View File

@ -99,10 +99,10 @@ error_table 2 ZCM
ec CM_TRACE_READLINK, "readlink 0x%lx" ec CM_TRACE_READLINK, "readlink 0x%lx"
ec CM_TRACE_FSYNC, "fsync 0x%lx" ec CM_TRACE_FSYNC, "fsync 0x%lx"
ec CM_TRACE_LOCKDONE, "Released lock 0x%lx level %d" ec CM_TRACE_LOCKDONE, "%s line %d: Released lock 0x%lx level %d"
ec CM_TRACE_LOCKDOWN, "Downgraded lock 0x%lx to %d" ec CM_TRACE_LOCKDOWN, "%s line %d: Downgraded lock 0x%lx to %d"
ec CM_TRACE_LOCKOBTAIN,"Obtained lock 0x%lx level %d" ec CM_TRACE_LOCKOBTAIN,"%s line %d: Obtained lock 0x%lx level %d"
ec CM_TRACE_LOCKSLEPT, "Slept for lock 0x%lx level %d" ec CM_TRACE_LOCKSLEPT, "%s line %d: Slept for lock 0x%lx level %d"
ec CM_TRACE_PAGE_READ, "0x%lx called page_read (returned %d) states 0x%x" ec CM_TRACE_PAGE_READ, "0x%lx called page_read (returned %d) states 0x%x"
ec CM_TRACE_PAGE_WRITE, "0x%lx called page_write (returned %d) states 0x%x" ec CM_TRACE_PAGE_WRITE, "0x%lx called page_write (returned %d) states 0x%x"

View File

@ -152,11 +152,20 @@ typedef struct afs_lock afs_rwlock_t;
#include "icl.h" #include "icl.h"
extern int afs_trclock; extern int afs_trclock;
#define AFS_LOCK_TRACE_ENABLE 0
#if AFS_LOCK_TRACE_ENABLE
#define AFS_LOCK_TRACE(op, lock, type) \
if (afs_trclock) Afs_Lock_Trace(op, lock, type, __FILE__, __LINE__);
#else
#define AFS_LOCK_TRACE(op, lock, type)
#endif
#if defined(INSTRUMENT_LOCKS) #if defined(INSTRUMENT_LOCKS)
#define ObtainReadLock(lock)\ #define ObtainReadLock(lock)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, READ_LOCK);\
if (!((lock)->excl_locked & WRITE_LOCK)) \ if (!((lock)->excl_locked & WRITE_LOCK)) \
((lock)->readers_reading)++; \ ((lock)->readers_reading)++; \
else \ else \
@ -166,7 +175,7 @@ extern int afs_trclock;
#define ObtainWriteLock(lock, src)\ #define ObtainWriteLock(lock, src)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, WRITE_LOCK);\
if (!(lock)->excl_locked && !(lock)->readers_reading)\ if (!(lock)->excl_locked && !(lock)->readers_reading)\
(lock) -> excl_locked = WRITE_LOCK;\ (lock) -> excl_locked = WRITE_LOCK;\
else\ else\
@ -179,7 +188,7 @@ extern int afs_trclock;
#define ObtainSharedLock(lock, src)\ #define ObtainSharedLock(lock, src)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, SHARED_LOCK);\
if (!(lock)->excl_locked)\ if (!(lock)->excl_locked)\
(lock) -> excl_locked = SHARED_LOCK;\ (lock) -> excl_locked = SHARED_LOCK;\
else\ else\
@ -192,7 +201,7 @@ extern int afs_trclock;
#define UpgradeSToWLock(lock, src)\ #define UpgradeSToWLock(lock, src)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)BOOSTED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, BOOSTED_LOCK);\
if (!(lock)->readers_reading)\ if (!(lock)->readers_reading)\
(lock)->excl_locked = WRITE_LOCK;\ (lock)->excl_locked = WRITE_LOCK;\
else\ else\
@ -204,7 +213,7 @@ extern int afs_trclock;
/* this must only be called with a WRITE or boosted SHARED lock! */ /* this must only be called with a WRITE or boosted SHARED lock! */
#define ConvertWToSLock(lock)\ #define ConvertWToSLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, SHARED_LOCK);\
(lock)->excl_locked = SHARED_LOCK; \ (lock)->excl_locked = SHARED_LOCK; \
if((lock)->wait_states) \ if((lock)->wait_states) \
Afs_Lock_ReleaseR(lock); \ Afs_Lock_ReleaseR(lock); \
@ -212,7 +221,7 @@ extern int afs_trclock;
#define ConvertWToRLock(lock) \ #define ConvertWToRLock(lock) \
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\ (lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\ ((lock)->readers_reading)++;\
(lock)->pid_last_reader = MyPidxx ; \ (lock)->pid_last_reader = MyPidxx ; \
@ -222,7 +231,7 @@ extern int afs_trclock;
#define ConvertSToRLock(lock) \ #define ConvertSToRLock(lock) \
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\ (lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\ ((lock)->readers_reading)++;\
(lock)->pid_last_reader = MyPidxx ; \ (lock)->pid_last_reader = MyPidxx ; \
@ -232,7 +241,7 @@ extern int afs_trclock;
#define ReleaseReadLock(lock)\ #define ReleaseReadLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, READ_LOCK);\
if (!(--((lock)->readers_reading)) && (lock)->wait_states)\ if (!(--((lock)->readers_reading)) && (lock)->wait_states)\
Afs_Lock_ReleaseW(lock) ; \ Afs_Lock_ReleaseW(lock) ; \
if ( (lock)->pid_last_reader == MyPidxx ) \ if ( (lock)->pid_last_reader == MyPidxx ) \
@ -241,7 +250,7 @@ extern int afs_trclock;
#define ReleaseWriteLock(lock)\ #define ReleaseWriteLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, WRITE_LOCK);\
(lock)->excl_locked &= ~WRITE_LOCK;\ (lock)->excl_locked &= ~WRITE_LOCK;\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\ if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
(lock)->pid_writer=0; \ (lock)->pid_writer=0; \
@ -250,7 +259,7 @@ extern int afs_trclock;
/* can be used on shared or boosted (write) locks */ /* can be used on shared or boosted (write) locks */
#define ReleaseSharedLock(lock)\ #define ReleaseSharedLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, SHARED_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\ (lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\ if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
(lock)->pid_writer=0; \ (lock)->pid_writer=0; \
@ -260,7 +269,7 @@ extern int afs_trclock;
#define ObtainReadLock(lock)\ #define ObtainReadLock(lock)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, READ_LOCK);\
if (!((lock)->excl_locked & WRITE_LOCK)) \ if (!((lock)->excl_locked & WRITE_LOCK)) \
((lock)->readers_reading)++; \ ((lock)->readers_reading)++; \
else \ else \
@ -269,7 +278,7 @@ extern int afs_trclock;
#define ObtainWriteLock(lock, src)\ #define ObtainWriteLock(lock, src)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, WRITE_LOCK);\
if (!(lock)->excl_locked && !(lock)->readers_reading)\ if (!(lock)->excl_locked && !(lock)->readers_reading)\
(lock) -> excl_locked = WRITE_LOCK;\ (lock) -> excl_locked = WRITE_LOCK;\
else\ else\
@ -280,7 +289,7 @@ extern int afs_trclock;
#define ObtainSharedLock(lock, src)\ #define ObtainSharedLock(lock, src)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, SHARED_LOCK);\
if (!(lock)->excl_locked)\ if (!(lock)->excl_locked)\
(lock) -> excl_locked = SHARED_LOCK;\ (lock) -> excl_locked = SHARED_LOCK;\
else\ else\
@ -291,7 +300,7 @@ extern int afs_trclock;
#define UpgradeSToWLock(lock, src)\ #define UpgradeSToWLock(lock, src)\
BEGINMAC \ BEGINMAC \
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)BOOSTED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, BOOSTED_LOCK);\
if (!(lock)->readers_reading)\ if (!(lock)->readers_reading)\
(lock)->excl_locked = WRITE_LOCK;\ (lock)->excl_locked = WRITE_LOCK;\
else\ else\
@ -301,7 +310,7 @@ extern int afs_trclock;
/* this must only be called with a WRITE or boosted SHARED lock! */ /* this must only be called with a WRITE or boosted SHARED lock! */
#define ConvertWToSLock(lock)\ #define ConvertWToSLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, SHARED_LOCK);\
(lock)->excl_locked = SHARED_LOCK; \ (lock)->excl_locked = SHARED_LOCK; \
if((lock)->wait_states) \ if((lock)->wait_states) \
Afs_Lock_ReleaseR(lock); \ Afs_Lock_ReleaseR(lock); \
@ -309,7 +318,7 @@ extern int afs_trclock;
#define ConvertWToRLock(lock) \ #define ConvertWToRLock(lock) \
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\ (lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\ ((lock)->readers_reading)++;\
Afs_Lock_ReleaseR(lock);\ Afs_Lock_ReleaseR(lock);\
@ -317,7 +326,7 @@ extern int afs_trclock;
#define ConvertSToRLock(lock) \ #define ConvertSToRLock(lock) \
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\ (lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\ ((lock)->readers_reading)++;\
Afs_Lock_ReleaseR(lock);\ Afs_Lock_ReleaseR(lock);\
@ -325,14 +334,14 @@ extern int afs_trclock;
#define ReleaseReadLock(lock)\ #define ReleaseReadLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, READ_LOCK);\
if (!(--((lock)->readers_reading)) && (lock)->wait_states)\ if (!(--((lock)->readers_reading)) && (lock)->wait_states)\
Afs_Lock_ReleaseW(lock) ; \ Afs_Lock_ReleaseW(lock) ; \
ENDMAC ENDMAC
#define ReleaseWriteLock(lock)\ #define ReleaseWriteLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, WRITE_LOCK);\
(lock)->excl_locked &= ~WRITE_LOCK;\ (lock)->excl_locked &= ~WRITE_LOCK;\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\ if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
ENDMAC ENDMAC
@ -340,7 +349,7 @@ extern int afs_trclock;
/* can be used on shared or boosted (write) locks */ /* can be used on shared or boosted (write) locks */
#define ReleaseSharedLock(lock)\ #define ReleaseSharedLock(lock)\
BEGINMAC\ BEGINMAC\
/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, SHARED_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\ (lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\ if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
ENDMAC ENDMAC