Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Sep 2002 20:03:37 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Don Lewis <dl-freebsd@catspoiler.org>
Cc:        rwatson@FreeBSD.ORG, <current@FreeBSD.ORG>, <jeff@FreeBSD.ORG>
Subject:   Re: vnode lock assertion problem in nfs_link()
Message-ID:  <20020910194838.M876-100000@gamplex.bde.org>
In-Reply-To: <200209100849.g8A8nWwr094342@gw.catspoiler.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 10 Sep 2002, Don Lewis wrote:

> On 10 Sep, Bruce Evans wrote:
> >> 	The locking changes in union_link() need a thorough review,
> >>         though the light testing of that I performed didn't turn up any
> >>         glaring problems.
> >
> > The changes are obviously just cleanups for leaf file systems, but I
> > wonder why everything wasn't always locked at the top.  Could it have
> > been because locking all the way down is harmful?
>
> Judging by how the leaf filesystems were careful to only do the lock if
> tdvp != vp, I suspect there was the potential for a deadlock if both
> vnodes were automatically locked at the top.

I think this is because some places are still worrying about using
link(2) on directories.  I think there aren't any significant problems
when vp is not a directory.  Hard linking of directories was permitted
(and perhaps even supported) until relatively recently:

% RCS file: /home/ncvs/src/sys/kern/vfs_syscalls.c,v
% Working file: vfs_syscalls.c
% head: 1.285
% ...
% ----------------------------
% revision 1.48
% date: 1996/05/24 16:19:23;  author: peter;  state: Exp;  lines: +9 -7
% Dont allow directories to be link()ed or unlink()ed, even for root
% (returns EPERM always, the errno is specified by POSIX).
%
% If you really have a desperate need to link or unlink a directory, you
% can use fsdb. :-)
%
% This should stop any chance of ftpd, rdist, "rm -rf", etc from
% bugging out and damaging the filesystem structure or loosing races
% with malicious users.
%
% Reviewed by: davidg, bde
% ----------------------------

> > The ugly gotos and uglier braces near them could be replaced by simple
> > returns now.  Some related points:
>
> We can't change the gotos to returns unless we also make the change in
> (1).  I think I agree with you about (1), but VN_KNOTE() doesn't have a
> man page and I didn't want to change anything that I didn't understand.
> I think (1) deserves a separate sweep and mega-commit.  A quick look at
> ufs_vnops.c turns up a number of inconsistencies in the use of
> VN_KNOTE().

> > (1) I think it is just a bug that null changes for failed operations are
> >     knoted.  It might be useful for knote to report attempted operations

OK.  I have fixed some of these inconsistencies in my version, but haven't
done a sweep or tested kevent.

Bruce


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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020910194838.M876-100000>