Date: Wed, 3 Oct 2001 10:48:14 -0400 (EDT) From: Zhihui Zhang <zzhang@cs.binghamton.edu> To: Matt Dillon <dillon@earth.backplane.com> Cc: Peter Wemm <peter@wemm.org>, Ian Dowse <iedowse@maths.tcd.ie>, Yevgeniy Aleynikov <eugenea@infospace.com>, ache@FreeBSD.ORG, mckusick@mckusick.com, Ken Pizzini <kenp@infospace.com>, hackers@FreeBSD.ORG Subject: Re: patch #3 (was Re: bleh. Re: ufs_rename panic) Message-ID: <Pine.SOL.4.21.0110031029380.11609-100000@onyx> In-Reply-To: <200110030224.f932OIO62159@earth.backplane.com>
next in thread | previous in thread | raw e-mail | index | archive | help
The rename routine is probably the most convoluted in the entire file
system code (FFS). Now that everybody's memory is fresh, I would like to
ask something about it:
(1) I am always wondering why not use a global rename lock so that there
is only one rename operation in progress at any time. This method is
used by GFS and probably Linux. This could make the code simply. Maybe
we can even get rid of the relookup() stuff.
This may reduce concurrency, but rename should not be a frequent
operation.
(2) In the code of 4.3-release, we grab the source inode while holding the
locks of target inodes. In ufs_rename(), we have:
if ((error = vn_lock(fvp, LK_EXCLUSIVE, p)) != 0)
goto abortit;
I wonder whether this could cause deadlock. I think locking more than
one inode should be done in some sequence (ie. order them by inode
number).
(3) Matt says "For example, if you have two hardlinked files residing in
different directories both get renamed simultaniously, one of the
rename()s can fail even though there is no conflict
Can you explain this a little bit more?
(4) This is not related to rename(). But ufs_mknod() reload the inode
through VFS_VGET() to avoid duplicate aliases. I can not see why it
is necessary. I asked this before, but have not got any satisfactory
responses.
Any ideas are welcome. Thanks,
-Zhihui
On Tue, 2 Oct 2001, Matt Dillon wrote:
>
> :
> :Matt Dillon wrote:
> :> Here is the latest patch I have. It appears to completely solve the
> :> problem. I have shims in unionfs and nfs for the moment.
> :
> :This seems rather large compared to Ian Dowse's version.. Are you sure that
> :you're doing this the right way? Adding a whole new locking mechanism
> :when the simple VRENAME flag to be enough seems like a bit of overkill..
>
> Ian's doesn't fix any of the filesystem semantics bugs, it only prevents
> the panic from occuring. For example, if you have two hardlinked files
> residing in different directories both get renamed simultaniously, one
> of the rename()s can fail even though there is no conflict. If you
> have a simultanious rmdir() and rename(), the rename() can return an
> unexpected error code. And so forth.
>
> If you remove the filesystem semantics fixes from my patch you
> essentially get Ian's patch except that I integrated the vnode flag
> in namei/lookup whereas Ian handles it manually in the syscall code.
>
> Also, Ian's patch only effects system calls. It doesn't do the same
> fixes for nfs (server side) or unionfs.
>
> -Matt
>
> :I'm not criticizing your work, I am just wondering if you have considered
> :Ian's work and feel that it is wrong or the wrong direction.. His certainly
> :appears more elegant than yours so I want to understand why you feel yours
> :is better than his.
> :
> :freebsd-hackers
> :Message-id: <200110022152.aa36964@salmon.maths.tcd.ie>
> :
> :Cheers,
> :-Peter
> :--
> :Peter Wemm - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au
> :"All of this is for nothing if we don't go to the stars" - JMS/B5
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-hackers" in the body of the message
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SOL.4.21.0110031029380.11609-100000>
