Hi,
Start tracing struct flock. I've been using this diff during lockf
development.

Comments? OK?

Index: sys/kern/kern_descrip.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_descrip.c,v
retrieving revision 1.182
diff -u -p -r1.182 kern_descrip.c
--- sys/kern/kern_descrip.c     24 Aug 2018 12:45:27 -0000      1.182
+++ sys/kern/kern_descrip.c     5 Nov 2018 07:10:39 -0000
@@ -527,6 +527,10 @@ restart:
                    sizeof (fl));
                if (error)
                        break;
+#ifdef KTRACE
+               if (KTRPOINT(p, KTR_STRUCT))
+                       ktrflock(p, &fl);
+#endif
                if (fl.l_whence == SEEK_CUR) {
                        if (fl.l_start == 0 && fl.l_len < 0) {
                                /* lockf(3) compliance hack */
@@ -615,6 +619,10 @@ restart:
                error = VOP_ADVLOCK(vp, fdp, F_GETLK, &fl, F_POSIX);
                if (error)
                        break;
+#ifdef KTRACE
+               if (KTRPOINT(p, KTR_STRUCT))
+                       ktrflock(p, &fl);
+#endif
                error = (copyout((caddr_t)&fl, (caddr_t)SCARG(uap, arg),
                    sizeof (fl)));
                break;
Index: sys/sys/ktrace.h
===================================================================
RCS file: /cvs/src/sys/sys/ktrace.h,v
retrieving revision 1.36
diff -u -p -r1.36 ktrace.h
--- sys/sys/ktrace.h    28 Nov 2017 16:05:13 -0000      1.36
+++ sys/sys/ktrace.h    5 Nov 2018 07:10:39 -0000
@@ -248,5 +248,7 @@ void    ktrstruct(struct proc *, const c
        ktrstruct(p, "pollfd", pfd, (count) * sizeof(struct pollfd))
 #define ktrfds(p, fds, count) \
        ktrstruct(p, "fds", fds, (count) * sizeof(int))
+#define ktrflock(p, fl) \
+       ktrstruct(p, "flock", (fl), sizeof(struct flock))
 
 #endif /* !_KERNEL */
Index: usr.bin/kdump/kdump_subr.h
===================================================================
RCS file: /cvs/src/usr.bin/kdump/kdump_subr.h,v
retrieving revision 1.21
diff -u -p -r1.21 kdump_subr.h
--- usr.bin/kdump/kdump_subr.h  28 Apr 2017 13:53:05 -0000      1.21
+++ usr.bin/kdump/kdump_subr.h  5 Nov 2018 07:10:39 -0000
@@ -98,5 +98,6 @@ void evfflagsname(int, int);
 void pollfdeventname(int);
 void syslogflagname(int);
 void futexflagname(int);
+void flocktypename(int);
 
 extern int decimal, fancy, basecol, arg1;
Index: usr.bin/kdump/ktrstruct.c
===================================================================
RCS file: /cvs/src/usr.bin/kdump/ktrstruct.c,v
retrieving revision 1.25
diff -u -p -r1.25 ktrstruct.c
--- usr.bin/kdump/ktrstruct.c   13 Jul 2018 09:25:23 -0000      1.25
+++ usr.bin/kdump/ktrstruct.c   5 Nov 2018 07:10:39 -0000
@@ -37,6 +37,7 @@
 #include <sys/time.h>
 #include <sys/event.h>
 #include <sys/un.h>
+#include <sys/fcntl.h>
 #include <ufs/ufs/quota.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -517,6 +518,17 @@ ktrcmsghdr(char *data, socklen_t len)
        printf("\n");
 }
 
+static void
+ktrflock(const struct flock *fl)
+{
+       printf("struct flock { start=%lld, len=%lld, pid=%d, type=",
+           fl->l_start, fl->l_len, fl->l_pid);
+       flocktypename(fl->l_type);
+       printf(", whence=");
+       whencename(fl->l_whence);
+       printf(" } \n");
+}
+
 void
 ktrstruct(char *buf, size_t buflen)
 {
@@ -658,6 +670,13 @@ ktrstruct(char *buf, size_t buflen)
                printf("flags=");
                showbufc(basecol + sizeof("flags=") - 1,
                    (unsigned char *)data, datalen, VIS_DQ | VIS_TAB | VIS_NL);
+       } else if (strcmp(name, "flock") == 0) {
+               struct flock fl;
+
+               if (datalen != sizeof(fl))
+                       goto invalid;
+               memcpy(&fl, data, datalen);
+               ktrflock(&fl);
        } else {
                printf("unknown structure %s\n", name);
        }
Index: usr.bin/kdump/mksubr
===================================================================
RCS file: /cvs/src/usr.bin/kdump/mksubr,v
retrieving revision 1.35
diff -u -p -r1.35 mksubr
--- usr.bin/kdump/mksubr        14 Feb 2018 17:26:56 -0000      1.35
+++ usr.bin/kdump/mksubr        5 Nov 2018 07:10:39 -0000
@@ -365,6 +365,7 @@ auto_orz_type "pollfdeventname" "POLL[^_
 auto_orz_type "evflagsname" "EV_[^S][A-Z]+[[:space:]]+0x" "sys/event.h"
 auto_orz_type "syslogflagname" "LOG_[A-Z]+[[:space:]]+0x0*[1248]0*[[:space:]]" 
"sys/syslog.h"
 auto_orz_type "futexflagname" "FUTEX_[A-Z_]+[[:space:]]+[0-9]+" "sys/futex.h"
+auto_switch_type "flocktypename" "F_[A-Z]+LCK" "sys/fcntl.h"
 
 cat <<_EOF_
 /*

Reply via email to