Louis-David Mitterrand <[email protected]> writes:
> On Wed, May 16, 2012 at 10:36:43PM +0200, Miklos Szeredi wrote:
>> >
>> > Hi,
>> >
>> > Please find the strace attached.
>>
>> Thanks.
>>
>> Still I have no clues, the EEXIST error is not seen in any of the system
>> calls and I can't see fopen returning EEXIST for any reason.
>>
>> Can you try ltrace as well? Though I don't have high hopes of that
>> revealing anything...
>
> Hi,
>
> Please find the ltrace outuput attached.
Can you please try the "disable_hardlink" option added by the attached
patch?
Thanks,
Miklos
diff --git a/sshfs.1 b/sshfs.1
index d316930..c045b3c 100644
--- a/sshfs.1
+++ b/sshfs.1
@@ -141,6 +141,11 @@ directly connect to PORT bypassing ssh
\fB\-o\fR slave
communicate over stdin and stdout bypassing network
.TP
+\fB\-o\fR disable_hardlink
+link(2) will return with errno set to ENOSYS. Hard links don't currently work
+perfectly on sshfs, and this confuses some programs. If that happens try
+disabling hard links with this option.
+.TP
\fB\-o\fR transform_symlinks
transform absolute symlinks to relative
.TP
diff --git a/sshfs.c b/sshfs.c
index 4945302..2e3d84a 100644
--- a/sshfs.c
+++ b/sshfs.c
@@ -203,6 +203,7 @@ struct sshfs {
int detect_uid;
int idmap;
int nomap;
+ int disable_hardlink;
char *uid_file;
char *gid_file;
GHashTable *uid_map;
@@ -358,6 +359,7 @@ static struct fuse_opt sshfs_opts[] = {
SSHFS_OPT("password_stdin", password_stdin, 1),
SSHFS_OPT("delay_connect", delay_connect, 1),
SSHFS_OPT("slave", slave, 1),
+ SSHFS_OPT("disable_hardlink", disable_hardlink, 1),
FUSE_OPT_KEY("-p ", KEY_PORT),
FUSE_OPT_KEY("-C", KEY_COMPRESS),
@@ -2192,7 +2194,7 @@ static int sshfs_link(const char *from, const char *to)
{
int err = -ENOSYS;
- if (sshfs.ext_hardlink) {
+ if (sshfs.ext_hardlink && !sshfs.disable_hardlink) {
struct buffer buf;
buf_init(&buf, 0);
@@ -3190,6 +3192,7 @@ static void usage(const char *progname)
" -o sftp_server=SERV path to sftp server or subsystem (default: sftp)\n"
" -o directport=PORT directly connect to PORT bypassing ssh\n"
" -o slave communicate over stdin and stdout bypassing network\n"
+" -o disable_hardlink link(2) will return with errno set to ENOSYS\n"
" -o transform_symlinks transform absolute symlinks to relative\n"
" -o follow_symlinks follow symlinks on the server\n"
" -o no_check_root don't check for existence of 'dir' on server\n"