From 59aff5fcf3f4302800908f8014877379bc32e250 Mon Sep 17 00:00:00 2001 From: Alfred Perlstein Date: Sun, 2 Dec 2001 12:47:25 +0000 Subject: [PATCH] make LOCKF_DEBUG kernel option work (sorta) Submitted by: Maxim Konovalov PR: kern/32267 --- sys/kern/kern_lockf.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/sys/kern/kern_lockf.c b/sys/kern/kern_lockf.c index 3bbb4d0116b2..4ec87a0dd435 100644 --- a/sys/kern/kern_lockf.c +++ b/sys/kern/kern_lockf.c @@ -163,7 +163,13 @@ lf_advlock(ap, head, size) lock->lf_start = start; lock->lf_end = end; lock->lf_id = ap->a_id; -/* lock->lf_inode = ip; */ /* XXX JH */ + /* + * XXX The problem is that VTOI is ufs specific, so it will + * break LOCKF_DEBUG for all other FS's other than UFS because + * it casts the vnode->data ptr to struct inode *. + */ +/* lock->lf_inode = VTOI(ap->a_vp); */ + lock->lf_inode = (struct inode *)0; lock->lf_type = fl->l_type; lock->lf_head = head; lock->lf_next = (struct lockf *)0; @@ -768,15 +774,22 @@ lf_print(tag, lock) printf("proc %ld", (long)((struct proc *)lock->lf_id)->p_pid); else printf("id %p", (void *)lock->lf_id); - /* XXX no %qd in kernel. Truncate. */ - printf(" in ino %lu on dev <%d, %d>, %s, start %ld, end %ld", - (u_long)lock->lf_inode->i_number, - major(lock->lf_inode->i_dev), - minor(lock->lf_inode->i_dev), - lock->lf_type == F_RDLCK ? "shared" : - lock->lf_type == F_WRLCK ? "exclusive" : - lock->lf_type == F_UNLCK ? "unlock" : - "unknown", (long)lock->lf_start, (long)lock->lf_end); + if (lock->lf_inode != (struct inode *)0) + /* XXX no %qd in kernel. Truncate. */ + printf(" in ino %lu on dev <%d, %d>, %s, start %ld, end %ld", + (u_long)lock->lf_inode->i_number, + major(lock->lf_inode->i_dev), + minor(lock->lf_inode->i_dev), + lock->lf_type == F_RDLCK ? "shared" : + lock->lf_type == F_WRLCK ? "exclusive" : + lock->lf_type == F_UNLCK ? "unlock" : + "unknown", (long)lock->lf_start, (long)lock->lf_end); + else + printf(" %s, start %ld, end %ld", + lock->lf_type == F_RDLCK ? "shared" : + lock->lf_type == F_WRLCK ? "exclusive" : + lock->lf_type == F_UNLCK ? "unlock" : + "unknown", (long)lock->lf_start, (long)lock->lf_end); if (!TAILQ_EMPTY(&lock->lf_blkhd)) printf(" block %p\n", (void *)TAILQ_FIRST(&lock->lf_blkhd)); else @@ -790,6 +803,9 @@ lf_printlist(tag, lock) { register struct lockf *lf, *blk; + if (lock->lf_inode == (struct inode *)0) + return; + printf("%s: Lock list for ino %lu on dev <%d, %d>:\n", tag, (u_long)lock->lf_inode->i_number, major(lock->lf_inode->i_dev),