From owner-freebsd-current  Tue Mar 17 05:54:12 1998
Return-Path: <owner-freebsd-current@FreeBSD.ORG>
Received: (from majordom@localhost)
          by hub.freebsd.org (8.8.8/8.8.8) id FAA15434
          for freebsd-current-outgoing; Tue, 17 Mar 1998 05:54:12 -0800 (PST)
          (envelope-from owner-freebsd-current@FreeBSD.ORG)
Received: from watermarkgroup.com (lor.watermarkgroup.com [207.202.73.33])
          by hub.freebsd.org (8.8.8/8.8.8) with SMTP id FAA15428
          for <current@freebsd.org>; Tue, 17 Mar 1998 05:54:08 -0800 (PST)
          (envelope-from luoqi@watermarkgroup.com)
Received: by watermarkgroup.com (4.1/SMI-4.1)
	id AA23812; Tue, 17 Mar 98 08:53:37 EST
Date: Tue, 17 Mar 98 08:53:37 EST
From: luoqi@watermarkgroup.com (Luoqi Chen)
Message-Id: <9803171353.AA23812@watermarkgroup.com>
To: current@FreeBSD.ORG
Subject: softupdates allocindir panic
Cc: julian@whistle.com, mckusick@mcKusick.com
Sender: owner-freebsd-current@FreeBSD.ORG
Precedence: bulk
X-Loop: FreeBSD.ORG

Just had this panic myself. I studied the core dump a little bit. I found
something interesting. The relevent piece of code around the crash is
static void
setup_allocindir_phase2(bp, ip, aip)
        struct buf *bp;         /* in-memory copy of the indirect block */
        struct inode *ip;       /* inode for file being extended */
        struct allocindir *aip; /* allocindir allocated by the above routines */
{                               
	...
        for (indirdep = NULL, newindirdep = NULL; ; ) { 
		...
		newindirdep->ir_saveddata = (ufs_daddr_t *)bp->b_data;
                newindirdep->ir_savebp =
                    getblk(ip->i_devvp, bp->b_blkno, bp->b_bcount, 0, 0);
                bcopy((caddr_t)newindirdep->ir_saveddata,
                    newindirdep->ir_savebp->b_data, bp->b_bcount);
        }                       
}

Obviously, the getblk() call assumes VOP_BMAP has been performed, and b_blkno
points to device relative block. But upon examining the core, I got
b_blkno = b_lblkno (= -12). The same is true for dumps posted on -current.
We probably should call VOP_BMAP before getblk() for the blkno == lblkno case.

-lq

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message