Re: [PANIC] ufs_dirbad: bad dir

From: Matthew Dillon <dillon_at_apollo.backplane.com>
Date: Sun, 16 Oct 2005 15:11:35 -0700 (PDT)
    Going through all this badly documented filesystem code is 
    aweful.

    Could someone check the reallocblks code?  Specifically this:

        /*
         * If the block range spans two block maps, get the second map.
         */
        if (end_lvl == 0 || (idp = &end_ap[end_lvl - 1])->in_off + 1 >= len) {
                ssize = len;
        } else {
#ifdef DIAGNOSTIC
                if (start_ap[start_lvl-1].in_lbn == idp->in_lbn)
                        panic("ffs_reallocblk: start == end");
#endif
                ssize = len - (idp->in_off + 1);
			^^^^^^^^^^^^^^^^^^^^^
			This doesn't look right.  It kinda seems to me
			that it should be (len - idp->in_off).


                if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, &ebp))
                        goto fail;
                ebap = (ufs_daddr_t *)ebp->b_data;
        }

    I went through about 3 or 4 false alarms earlier today, and this could
    be another one.   But if it is wrong it would fit the symptoms....
    the first indirect block in the inode getting blown to bits.

					-Matt
					Matthew Dillon 
					<dillon_at_backplane.com>
Received on Sun Oct 16 2005 - 20:11:48 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:45 UTC