-#define LDLM_DEBUG(lock, format, a...) \
-do { \
- CDEBUG(D_DLMTRACE, "### " format \
- " (%s: lock %p mode %d/%d on res %Lu (rc %d) " \
- " type %d remote %Lx)\n" , ## a, \
- lock->l_resource->lr_namespace->ns_name, lock, \
- lock->l_granted_mode, lock->l_req_mode, \
- lock->l_resource->lr_name[0], \
- lock->l_resource->lr_refcount, \
- lock->l_resource->lr_type, \
- lock->l_remote_handle.addr); \
+
+extern char *ldlm_lockname[];
+extern char *ldlm_typename[];
+extern char *ldlm_it2str(int it);
+
+#define LDLM_DEBUG(lock, format, a...) \
+do { \
+ if (lock->l_resource == NULL) \
+ CDEBUG(D_DLMTRACE, "### " format \
+ " (UNKNOWN: lock %p(rc=%d/%d,%d) mode %s/%s on " \
+ "res \?\? (rc=\?\?) type \?\?\? remote %Lx)\n" , \
+ ## a, lock, lock->l_refc, lock->l_readers, \
+ lock->l_writers, \
+ ldlm_lockname[lock->l_granted_mode], \
+ ldlm_lockname[lock->l_req_mode], \
+ lock->l_remote_handle.addr); \
+ else \
+ CDEBUG(D_DLMTRACE, "### " format \
+ " (%s: lock %p(rc=%d/%d,%d) mode %s/%s on res " \
+ "%Lu (rc=%d) type %s remote %Lx)\n" , ## a, \
+ lock->l_resource->lr_namespace->ns_name, lock, \
+ lock->l_refc, lock->l_readers, lock->l_writers, \
+ ldlm_lockname[lock->l_granted_mode], \
+ ldlm_lockname[lock->l_req_mode], \
+ lock->l_resource->lr_name[0], \
+ atomic_read(&lock->l_resource->lr_refcount), \
+ ldlm_typename[lock->l_resource->lr_type], \
+ lock->l_remote_handle.addr); \