Hi, On Mon, Jan 30, 2023 at 2:24 PM Alexander Aring <aahri...@redhat.com> wrote: > > This patch will trace lock state changes of the used dlm posix locks. In > combination with the plock logfile we can see state changes over time > and follow posix locks and their state. > --- > dlm_controld/dlm_daemon.h | 2 +- > dlm_controld/logging.c | 2 +- > dlm_controld/plock.c | 124 +++++++++++++++++++++++++++++--------- > 3 files changed, 97 insertions(+), 31 deletions(-) > > diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h > index c74f684a..9bf3f621 100644 > --- a/dlm_controld/dlm_daemon.h > +++ b/dlm_controld/dlm_daemon.h > @@ -220,7 +220,7 @@ EXTERN struct list_head run_ops; > #define LOG_PLOCK 0x00010000 > #define LOG_NONE 0x00001111 > > -void log_level(char *name_in, uint32_t level_in, const char *fmt, ...); > +void log_level(const char *name_in, uint32_t level_in, const char *fmt, ...); > > #define log_error(fmt, args...) log_level(NULL, LOG_ERR, fmt, ##args) > #define log_debug(fmt, args...) log_level(NULL, LOG_DEBUG, fmt, ##args) > diff --git a/dlm_controld/logging.c b/dlm_controld/logging.c > index 83de2da4..e71fe52c 100644 > --- a/dlm_controld/logging.c > +++ b/dlm_controld/logging.c > @@ -175,7 +175,7 @@ static void log_str_to_file(FILE *fp) > fflush(fp); > } > > -void log_level(char *name_in, uint32_t level_in, const char *fmt, ...) > +void log_level(const char *name_in, uint32_t level_in, const char *fmt, ...) > { > va_list ap; > char name[NAME_ID_SIZE + 2]; > diff --git a/dlm_controld/plock.c b/dlm_controld/plock.c > index 462c9212..77c043fd 100644 > --- a/dlm_controld/plock.c > +++ b/dlm_controld/plock.c > @@ -208,6 +208,62 @@ static uint64_t dt_usec(struct timeval *start, struct > timeval *stop) > return dt; > } > > +static void plock_print_lock_add_state(const struct lockspace *ls, > + const struct lock_waiter *w, > + const char *state) > +{ > + log_dlock(ls, "state: add %s %llx %llx-%llx %d/%u/%llx", > + state, > + (unsigned long long)w->info.number, > + (unsigned long long)w->info.start, > + (unsigned long long)w->info.end, > + w->info.nodeid, w->info.pid, > + (unsigned long long)w->info.owner); > +} > + > +static void plock_print_lock_clear_state(const struct lockspace *ls, > + const struct lock_waiter *w, > + const char *state) > +{ > + log_dlock(ls, "state: clear %s %llx %llx-%llx %d/%u/%llx", > + state, > + (unsigned long long)w->info.number, > + (unsigned long long)w->info.start, > + (unsigned long long)w->info.end, > + w->info.nodeid, w->info.pid, > + (unsigned long long)w->info.owner); > +} > + > +#define plock_print_add_waiter(ls, w) \ > + plock_print_lock_add_state(ls, w, "waiter") > +#define plock_print_clear_waiter(ls, w) \ > + plock_print_lock_clear_state(ls, w, "waiter") > + > +#define plock_print_add_pending(ls, w) \ > + plock_print_lock_add_state(ls, w, "pending") > +#define plock_print_clear_pending(ls, w) \ > + plock_print_lock_clear_state(ls, w, "pending") > + > +static void plock_print_add_plock(const struct lockspace *ls, > + const struct posix_lock *plock)
changes *plock to *po, because it's commonly used as *po in other parts of the code for a struct posix_lock... > +{ > + log_dlock(ls, "state: add plock NA %llx-%llx %d/%u/%llx", removed this NA stuff, there is one attribute which plock doesn't have but waiter has and I did this as placeholder... it's removed in 8/8 so I drop to add it. > + (unsigned long long)plock->start, > + (unsigned long long)plock->end, > + plock->nodeid, plock->pid, > + (unsigned long long)plock->owner); > +} > + > +static void plock_print_del_plock(const struct lockspace *ls, > + const struct posix_lock *plock) > +{ > + log_dlock(ls, "state: del plock NA %llx-%llx %d/%u/%llx", > + (unsigned long long)plock->start, > + (unsigned long long)plock->end, > + plock->nodeid, plock->pid, > + (unsigned long long)plock->owner); > +} same here. - Alex