VOP_LINK(). The reason of strange behavior was wrong order of the
argument, that is, the operation
# ln foo bar
in a union fs tried to do
# ln bar foo
in ufs layer.
Now we can make a link in a union fs.
fix!
The ufs_link() assumes that vnode is not unlocked and tries to lock it
in certain case. Because union_link calls VOP_LINK after locking vnode,
vn_lock in ufs_link causes above panic.
Currently, I don't know the real fix for a locking violation in
union_link, but I think it is important to avoid panic.
A vnode is unlocked before calling VOP_LINK and is locked after it if
the vnode is not union fs. Even though panic went away, the process
that access the union fs in which link was made will hang-up.
Hang-up can be easily reproduced by following operation:
mount -t union a b
cd b
ln foo bar
ls
for this is already in place, so "make tags" (or "make tags HTML=yes")
should work after your next make world.
Submitted by: Shigio Yamaguchi <shigio@wafu.netgate.net>
means.
(2) Change MASTER_SITE_GNU etc. to use += instead of ?=, so users can
specify a local mirror in /etc/make.conf and still get the full
fallback in case something is missing.
Submitted by: Narvi <narvi@haldjas.folklore.ee>
(3) Skip port if USE_X11 or USE_IMAKE is defined and /usr/X11R6
doesn't exist.
Submitted by: imp
(4) Add "-" in front of rmdir of ${DISTDIR}/${DIST_SUBDIR} in
distclean target; the directory might not be empty because the
subdir is shared with some other ports' distfiles.
pppd now creates /var/run/ttyXn.if file containing the interface name;
check that a 'login' user is not listed in /etc/ppp/ppp.disabled;
check that a 'login' user's shell is listed in /etc/ppp/ppp.shells;
make sure that passwordless 'login' logins are recorded in wtmp and
utmp.
were always in a tss; that tss just changed from the one in the
pcb to common_tss (who knows where it was when there was no curpcb?).
Not using the pcb also fixed the problem that there is no pcb in
idle(), so we now always get useful register values.
same directory pair.
If we do:
mount -t union a b
mount -t union a b
then, (1) namei tries to lock fs which has been already locked by
first union mount and (2) union_root() tries to lock locked fs. To
avoid first deadlock condition, unlock vnode if lowerrootvp is union
node, and to avoid second case, union_mount returns EDEADLK when multi
union mount is detected.