Commit 6216a753 authored by Kevin J. McCarthy's avatar Kevin J. McCarthy

Remove extra lstats() in safe_rename() upon link success.

I originally kept the lstat()'s in order to make as few changes as
possible to the function.  However, Derek Martin argues correctly that
if we are trusting the link() 0-retval, the lstats are unnecessary and
in fact can cause a performance impact over NFS.
parent 2d889227
Pipeline #28990269 passed with stages
in 15 minutes and 25 seconds
......@@ -519,17 +519,24 @@ int safe_rename (const char *src, const char *target)
return -1;
}
/*
* Remove the compare_stat() check, because it causes problems with maildir on
* filesystems that don't properly support hard links, such as
* sshfs. The filesystem creates the link, but the resulting file
* is given a different inode number by the sshfs layer. This
* results in an infinite loop creating links.
*/
#if 0
/*
* Stat both links and check if they are equal.
*/
if (lstat (src, &ssb) == -1)
{
dprint (1, (debugfile, "safe_rename: can't stat %s: %s (%d)\n",
src, strerror (errno), errno));
return -1;
}
if (lstat (target, &tsb) == -1)
{
dprint (1, (debugfile, "safe_rename: can't stat %s: %s (%d)\n",
......@@ -541,15 +548,6 @@ int safe_rename (const char *src, const char *target)
* pretend that the link failed because the target file
* did already exist.
*/
#if 0
/*
* Remove this check, because it causes problems with maildir on
* filesystems that don't properly support hard links, such as
* sshfs. The filesystem creates the link, but the resulting file
* is given a different inode number by the sshfs layer. This
* results in an infinite loop creating links.
*/
if (compare_stat (&ssb, &tsb) == -1)
{
dprint (1, (debugfile, "safe_rename: stat blocks for %s and %s diverge; pretending EEXIST.\n", src, target));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment