From: "Shawn O. Pearce" <spearce@spearce•org>
To: "Todd T. Fries" <todd@fries•net>
Cc: git@vger•kernel.org, Brandon Casey <casey@nrlssc•navy.mil>
Subject: Re: git on afs
Date: Fri, 19 Oct 2007 01:48:14 -0400 [thread overview]
Message-ID: <20071019054814.GJ14735@spearce.org> (raw)
In-Reply-To: <20071018203106.GA13518@fries.net>
There's two different issues here so I'm going to split the thread
into two to simplify the discussion. Well, for me anyway. ;-)
"Todd T. Fries" <todd@fries•net> wrote:
> 1) git presumes that link() works fine across subdirs; in afs land,
> hardlinks do not succeed ever
...
> diff --git a/sha1_file.c b/sha1_file.c
> index 83a06a7..1b93322 100644
> --- a/sha1_file.c
> +++ b/sha1_file.c
> @@ -1961,7 +1961,7 @@ static int link_temp_to_file(const char *tmpfile, const char *filename)
> int ret;
> char *dir;
>
> - if (!link(tmpfile, filename))
> + if (!rename(tmpfile, filename))
> return 0;
>
> /*
> @@ -1980,7 +1980,7 @@ static int link_temp_to_file(const char *tmpfile, const char *filename)
> return -2;
> }
> *dir = '/';
> - if (!link(tmpfile, filename))
> + if (!rename(tmpfile, filename))
> return 0;
> ret = errno;
> }
These cases should already be handled lower, see l.1997-2012 of
sha1_file.c:
/*
* Coda hack - coda doesn't like cross-directory links,
* so we fall back to a rename, which will mean that it
* won't be able to check collisions, but that's not a
* big deal.
*
* The same holds for FAT formatted media.
*
* When this succeeds, we just return 0. We have nothing
* left to unlink.
*/
if (ret && ret != EEXIST) {
if (!rename(tmpfile, filename))
> Brandon Casey <casey@nrlssc•navy.mil> wrote:
> On Thu, 18 Oct 2007, Todd T. Fries wrote:
>
> > link() returns -1 errno 17 File exists on afs.
> >
> > To further muddy the waters, linking within the same dir is ok,
> > linking outside the same dir is not:
> >
> > todd@ispdesk/p6 ~/tmp=A661$ mkdir dir
> > todd@ispdesk/p6 ~/tmp=A662$ touch a
> > todd@ispdesk/p6 ~/tmp=A663$ ln a b
> > todd@ispdesk/p6 ~/tmp=A664$ ls -l a b
> > -rw-r--r-- 2 4 wheel 0 Oct 18 17:09 a
> > -rw-r--r-- 2 4 wheel 0 Oct 18 17:09 b
> > todd@ispdesk/p6 ~/tmp=A665$ ls -li a b
> > 2068032 -rw-r--r-- 2 4 wheel 0 Oct 18 17:09 a
> > 2068032 -rw-r--r-- 2 4 wheel 0 Oct 18 17:09 b
> > todd@ispdesk/p6 ~/tmp=A666$ ln a dir/b
> > ln: dir/b: File exists
> > todd@ispdesk/p6 ~/tmp=A667$ echo $?
>
> That error is just bogus on afs. If it returned a sane
> error, things would just work.
>
> But, looks like afs only supports linking within the same
> directory: http://www.angelfire.com/hi/plutonic/afs-faq.html
So according to that error message from "ln" we really should have
fallen into that Coda hack I just mentioned. Did we instead get
a different errno here and not use that hack?
We probably could just use rename as you do above but then we would
want to remove the unlink(tmpfile) call on l.2013 in sha1_file.c.
Otherwise we're always incurring a syscall for no reason. I'm not
against a change here, I just want to make sure we make the right
change for AFS. :-)
--
Shawn.
next prev parent reply other threads:[~2007-10-19 5:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-18 20:31 git on afs Todd T. Fries
2007-10-18 21:28 ` Brandon Casey
2007-10-18 21:57 ` Brandon Casey
2007-10-18 22:47 ` Linus Torvalds
2007-10-19 6:06 ` Shawn O. Pearce
2007-10-19 12:19 ` Todd T. Fries
2007-10-19 17:59 ` Linus Torvalds
2007-10-19 19:06 ` Linus Torvalds
2007-10-19 5:48 ` Shawn O. Pearce [this message]
2007-10-19 12:42 ` Todd T. Fries
2007-10-19 20:19 ` Daniel Barkalow
2007-10-20 5:29 ` Shawn O. Pearce
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=20071019054814.GJ14735@spearce.org \
--to=spearce@spearce$(echo .)org \
--cc=casey@nrlssc$(echo .)navy.mil \
--cc=git@vger$(echo .)kernel.org \
--cc=todd@fries$(echo .)net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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