NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/41189: kernel panic xen dom0 using mke2fs & WAPBL
The following reply was made to PR kern/41189; it has been noted by GNATS.
From: Andrew Doran <ad%netbsd.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: kern/41189: kernel panic xen dom0 using mke2fs & WAPBL
Date: Fri, 17 Apr 2009 20:51:04 +0000
I don't know exactly what is happening in this case but there are at least
two issues that I see. Ok so ffs_full_fsync() is called for the vnode
representing /dev/sd0m:
(1) WAPBL processing should happen on this vnode, because the corresponding
inode is from a logging file system. However it represents a block device,
and so the call to wapbl_vptomp() ignores the important fact that it's from
a logging FS and returns NULL. We skip the WAPBL block.
(2) Since we are not doing the logging update in ffs_full_sync(), we descend
into the regular UFS case. This flushes any delayed writes resulting from
block I/O from userspace (or a mounted file system) to the device. This
happens correctly. Note that if (1) is fixed naively, this will cease to
happen. In theory this should flush the buffers for spec_close(). Once this
is done, we incorrectly do the inode update as if there was no logging.
Some background information. ffs hangs its dirty buffers in two places:
- vp->v_dirtyblkhd
VREG/VDIR: indirect blocks, to track per-inode space allocation
VBLK: dirty blocks for a block device
Others: not used
- VTOI(vp)->i_ump->um_devvp->v_dirtyblkhd
All other metadata, e.g. on-disk inodes.
Since block devices don't have indirect blocks, there shouldn't be a clash.
The whole thing is a big mess. We could fix a slew of bugs once and for all
with devfs. It would greatly simplify this crud. In the meantime I am going
to crack open a beer. :-)
Home |
Main Index |
Thread Index |
Old Index