Linux NFS development
 help / color / mirror / Atom feed
From: Peter Staubach <staubach@redhat.com>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: Edward Hibbert <Edward.Hibbert@dataconnection.com>,
	nfs@lists.sourceforge.net
Subject: Re: Rename window
Date: Fri, 11 Nov 2005 10:25:02 -0500	[thread overview]
Message-ID: <4374B7CE.6030508@redhat.com> (raw)
In-Reply-To: <1131721983.8805.48.camel@lade.trondhjem.org>

Trond Myklebust wrote:

>On Fri, 2005-11-11 at 09:58 -0500, Peter Staubach wrote:
>  
>
>>Trond Myklebust wrote:
>>
>>    
>>
>>>On Fri, 2005-11-11 at 11:42 +0000, Edward Hibbert wrote:
>>> 
>>>
>>>      
>>>
>>>>I have noticed a atomicity problem with the handling of rename by the
>>>>Linux NFS client, and just wanted to check if this is something that
>>>>we just have to work-around, or is there some other solution.
>>>>
>>>>The problem arises when two different machines issue a file rename
>>>>which is identical.
>>>>
>>>>E.g. rename oldname newname
>>>>
>>>>You would expect that one machine would be successful, and the other
>>>>would fail.    However, the NFS client seems to be issuing 3 NFS
>>>>operations to perform the rename
>>>>     * LOOKUP oldname 
>>>>     * LOOKUP newname 
>>>>     * RENAME oldname newname
>>>>There is a timing window where both LOOKUPs can succeed (if the other
>>>>machine does the rename at the right time).   In this case, the Linux
>>>>NFS client does not issue the final NFS RENAME operation - BUT still
>>>>returns success to the caller.
>>>>
>>>>Thus both machines have succeeded in renaming the file.
>>>>
>>>>You might argue that since they are performing the same operation that
>>>>it is OK for both to succeed, but I have an application that depends
>>>>on the atomicity of the operation, as it uses the filename to hold a
>>>>counter, and rename to assign a unique counter to a process.
>>>>   
>>>>
>>>>        
>>>>
>>>This is another of those cases where the VFS has optimised for local
>>>filesystem behaviour, and where fixing this problem would require
>>>significant VFS changes.
>>>You'd basically have to add a new lookup intent for the RENAME function
>>>in order to tell the NFS layer that it can ignore the lookup requests.
>>>We probably will get round to doing that sometime, but it is not one of
>>>the most pressing bugs on my list.
>>>
>>>In the meantime, I'd suggest just not relying on this level of atomicity
>>>(there are in any case situations where this is always impossible - for
>>>instance in sillyrename() situations).
>>>
>>>      
>>>
>>It is true that rename(2) is supposed to be atomic.
>>
>>It is also true that this is a problem in an optimization in the file system
>>independent layer in the current Linux.  There is a check which compares the
>>"from" inode and the "to" inode and, if they are the same, just returns no
>>error, ie. success.  NFS does need at least the lookup on the "to" name so
>>that it can handle the rename to an open file case.
>>
>>Couldn't this be (fairly) easily handled by making the short circuit check
>>in vfs_rename() conditional and not use it for NFS mounted file systems
>>and perhaps others?
>>    
>>
>
>That causes weird behaviour to pop up in other places. One classic is
>the rename of an open file onto a hard link of itself, where unless
>someone (either NFS or the VFS) tests those inodes for equality, NFS
>will end up sillyrenaming the hard link, then renaming the open file in
>complete violation of POSIX.
>

I suppose that a check could be added for the hard link count, but yuck,
that is a nasty situation.  Oh well, good point...

       ps


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
NFS maillist  -  NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs

  reply	other threads:[~2005-11-11 15:25 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-11 11:42 Rename window Edward Hibbert
2005-11-11 13:30 ` Neil Horman
2005-11-11 13:41   ` Trond Myklebust
2005-11-11 13:38 ` Trond Myklebust
2005-11-11 14:58   ` Peter Staubach
2005-11-11 15:13     ` Trond Myklebust
2005-11-11 15:25       ` Peter Staubach [this message]
  -- strict thread matches above, loose matches on Subject: below --
2005-11-11 15:28 Edward Hibbert
2005-11-11 15:29 ` Trond Myklebust
2005-11-11 15:33 ` Peter Staubach
2005-11-11 15:31 Edward Hibbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4374B7CE.6030508@redhat.com \
    --to=staubach@redhat.com \
    --cc=Edward.Hibbert@dataconnection.com \
    --cc=nfs@lists.sourceforge.net \
    --cc=trond.myklebust@fys.uio.no \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox