[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Seeking pre-approval for sshfs update for lenny



On Thu, Aug 21, 2008 at 09:45:02AM +0200, Marc 'HE' Brockschmidt wrote:
> Sebastien Delafond <seb@debian.org> writes:
> > The changelog for 2.1[1] lists the following changes:
> [...]
> 
> Generally OK, but please send the full diff between the current version
> and the version you intend to upload (for example, I have no idea how
> invasive the build fixes for totally unrelated OS are)

attached is the debdiff for what would be 2.1-1.1.

A close review did not reveal anything worrisome, at least to me. Just
what the changelog from 2.0 to 2.1 mentions.

Cheers,

--Seb
diff -Nru sshfs-fuse-2.0/cache.c sshfs-fuse-2.1/cache.c
--- sshfs-fuse-2.0/cache.c	2007-12-11 14:23:24.000000000 -0800
+++ sshfs-fuse-2.1/cache.c	2008-07-11 04:00:33.000000000 -0700
@@ -28,6 +28,7 @@
 	GHashTable *table;
 	pthread_mutex_t lock;
 	time_t last_cleaned;
+	uint64_t write_ctr;
 };
 
 static struct cache cache;
@@ -47,6 +48,7 @@
 	fuse_dirh_t h;
 	fuse_dirfil_t filler;
 	GPtrArray *dir;
+	uint64_t wrctr;
 };
 
 static void free_node(gpointer node_)
@@ -108,6 +110,14 @@
 	pthread_mutex_unlock(&cache.lock);
 }
 
+void cache_invalidate_write(const char *path)
+{
+	pthread_mutex_lock(&cache.lock);
+	cache_purge(path);
+	cache.write_ctr++;
+	pthread_mutex_unlock(&cache.lock);
+}
+
 static void cache_invalidate_dir(const char *path)
 {
 	pthread_mutex_lock(&cache.lock);
@@ -148,19 +158,21 @@
 	return node;
 }
 
-void cache_add_attr(const char *path, const struct stat *stbuf)
+void cache_add_attr(const char *path, const struct stat *stbuf, uint64_t wrctr)
 {
 	struct node *node;
 	time_t now;
 
 	pthread_mutex_lock(&cache.lock);
-	node = cache_get(path);
-	now = time(NULL);
-	node->stat = *stbuf;
-	node->stat_valid = time(NULL) + cache.stat_timeout;
-	if (node->stat_valid > node->valid)
-		node->valid = node->stat_valid;
-	cache_clean();
+	if (wrctr == cache.write_ctr) {
+		node = cache_get(path);
+		now = time(NULL);
+		node->stat = *stbuf;
+		node->stat_valid = time(NULL) + cache.stat_timeout;
+		if (node->stat_valid > node->valid)
+			node->valid = node->stat_valid;
+		cache_clean();
+	}
 	pthread_mutex_unlock(&cache.lock);
 }
 
@@ -222,13 +234,25 @@
 	return err;
 }
 
+uint64_t cache_get_write_ctr(void)
+{
+	uint64_t res;
+
+	pthread_mutex_lock(&cache.lock);
+	res = cache.write_ctr;
+	pthread_mutex_unlock(&cache.lock);
+
+	return res;
+}
+
 static int cache_getattr(const char *path, struct stat *stbuf)
 {
 	int err = cache_get_attr(path, stbuf);
 	if (err) {
+		uint64_t wrctr = cache_get_write_ctr();
 		err = cache.next_oper->oper.getattr(path, stbuf);
 		if (!err)
-			cache_add_attr(path, stbuf);
+			cache_add_attr(path, stbuf, wrctr);
 	}
 	return err;
 }
@@ -268,7 +292,7 @@
 			const char *basepath = !ch->path[1] ? "" : ch->path;
 
 			fullpath = g_strdup_printf("%s/%s", basepath, name);
-			cache_add_attr(fullpath, stbuf);
+			cache_add_attr(fullpath, stbuf, ch->wrctr);
 			g_free(fullpath);
 		}
 	}
@@ -299,6 +323,7 @@
 	ch.h = h;
 	ch.filler = filler;
 	ch.dir = g_ptr_array_new();
+	ch.wrctr = cache_get_write_ctr();
 	err = cache.next_oper->cache_getdir(path, &ch, cache_dirfill);
 	g_ptr_array_add(ch.dir, NULL);
 	dir = (char **) ch.dir->pdata;
@@ -421,7 +446,7 @@
 {
 	int res = cache.next_oper->oper.write(path, buf, size, offset, fi);
 	if (res >= 0)
-		cache_invalidate(path);
+		cache_invalidate_write(path);
 	return res;
 }
 
@@ -449,9 +474,10 @@
 {
 	int err = cache_get_attr(path, stbuf);
 	if (err) {
+		uint64_t wrctr = cache_get_write_ctr();
 		err = cache.next_oper->oper.fgetattr(path, stbuf, fi);
 		if (!err)
-			cache_add_attr(path, stbuf);
+			cache_add_attr(path, stbuf, wrctr);
 	}
 	return err;
 }
diff -Nru sshfs-fuse-2.0/cache.h sshfs-fuse-2.1/cache.h
--- sshfs-fuse-2.0/cache.h	2006-02-20 03:43:23.000000000 -0800
+++ sshfs-fuse-2.1/cache.h	2008-07-11 04:00:33.000000000 -0700
@@ -24,5 +24,6 @@
 
 struct fuse_operations *cache_init(struct fuse_cache_operations *oper);
 int cache_parse_options(struct fuse_args *args);
-void cache_add_attr(const char *path, const struct stat *stbuf);
+void cache_add_attr(const char *path, const struct stat *stbuf, uint64_t wrctr);
 void cache_invalidate(const char *path);
+uint64_t cache_get_write_ctr(void);
diff -Nru sshfs-fuse-2.0/ChangeLog sshfs-fuse-2.1/ChangeLog
--- sshfs-fuse-2.0/ChangeLog	2008-04-23 05:07:58.000000000 -0700
+++ sshfs-fuse-2.1/ChangeLog	2008-07-11 04:00:33.000000000 -0700
@@ -1,3 +1,31 @@
+2008-07-11  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Released 2.1
+
+2008-07-11  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Fix statvfs extension to match the current protocol in
+	opensshfs
+
+	* Check version numbers of extensions, so such changes wouldn't
+	cause stupid behavior
+
+2008-06-24  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Add '-F' option to specify the ssh config file.  Patch by Pat
+	Pascal.
+
+2008-05-06  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Fix bug in caching which could cause file corruption for append
+	mode writes.  Reported by Jose Alonso
+
+2008-05-05  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Fix compile on OS X.  Original patch from Michael G Schwern
+
+	* Fix compile on Solaris.  Reported by Jean-Jacques Sarton
+
 2008-04-23  Miklos Szeredi <miklos@szeredi.hu>
 
 	* Released 2.0
diff -Nru sshfs-fuse-2.0/configure sshfs-fuse-2.1/configure
--- sshfs-fuse-2.0/configure	2008-04-22 09:05:27.000000000 -0700
+++ sshfs-fuse-2.1/configure	2008-07-11 04:04:07.000000000 -0700
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for sshfs-fuse 2.0.
+# Generated by GNU Autoconf 2.61 for sshfs-fuse 2.1.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@@ -572,8 +572,8 @@
 # Identity of this package.
 PACKAGE_NAME='sshfs-fuse'
 PACKAGE_TARNAME='sshfs-fuse'
-PACKAGE_VERSION='2.0'
-PACKAGE_STRING='sshfs-fuse 2.0'
+PACKAGE_VERSION='2.1'
+PACKAGE_STRING='sshfs-fuse 2.1'
 PACKAGE_BUGREPORT=''
 
 ac_subst_vars='SHELL
@@ -1174,7 +1174,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures sshfs-fuse 2.0 to adapt to many kinds of systems.
+\`configure' configures sshfs-fuse 2.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1240,7 +1240,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of sshfs-fuse 2.0:";;
+     short | recursive ) echo "Configuration of sshfs-fuse 2.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1327,7 +1327,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-sshfs-fuse configure 2.0
+sshfs-fuse configure 2.1
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1341,7 +1341,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by sshfs-fuse $as_me 2.0, which was
+It was created by sshfs-fuse $as_me 2.1, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -2011,7 +2011,7 @@
 
 # Define the identity of the package.
  PACKAGE='sshfs-fuse'
- VERSION='2.0'
+ VERSION='2.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4274,7 +4274,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by sshfs-fuse $as_me 2.0, which was
+This file was extended by sshfs-fuse $as_me 2.1, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -4327,7 +4327,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-sshfs-fuse config.status 2.0
+sshfs-fuse config.status 2.1
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
diff -Nru sshfs-fuse-2.0/configure.ac sshfs-fuse-2.1/configure.ac
--- sshfs-fuse-2.0/configure.ac	2008-04-22 09:02:41.000000000 -0700
+++ sshfs-fuse-2.1/configure.ac	2008-07-11 04:00:33.000000000 -0700
@@ -1,4 +1,4 @@
-AC_INIT(sshfs-fuse, 2.0)
+AC_INIT(sshfs-fuse, 2.1)
 AM_INIT_AUTOMAKE
 AM_CONFIG_HEADER(config.h)
 
diff -Nru sshfs-fuse-2.0/debian/changelog sshfs-fuse-2.1/debian/changelog
--- sshfs-fuse-2.0/debian/changelog	2008-08-21 09:42:01.000000000 -0700
+++ sshfs-fuse-2.1/debian/changelog	2008-08-21 09:42:01.000000000 -0700
@@ -1,3 +1,10 @@
+sshfs-fuse (2.1-1.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * New upstream release (Closes: #494140).
+
+ -- Sebastien Delafond <seb@debian.org>  Thu, 21 Aug 2008 09:38:59 -0700
+
 sshfs-fuse (2.0-2) unstable; urgency=low
 
   * Depends only on ssh client. (Closes: #477731)
diff -Nru sshfs-fuse-2.0/sshfs.1 sshfs-fuse-2.1/sshfs.1
--- sshfs-fuse-2.0/sshfs.1	2008-08-21 09:42:01.000000000 -0700
+++ sshfs-fuse-2.1/sshfs.1	2008-07-11 04:00:33.000000000 -0700
@@ -37,6 +37,9 @@
 \fB\-C\fR
 equivalent to '\-o compression=yes'
 .TP
+\fB\-F\fR ssh_configfile
+specifies alternative ssh configuration file
+.TP
 \fB\-1\fR
 equivalent to '\-o ssh_protocol=1'
 .TP
@@ -240,3 +243,4 @@
 This man page was written by Bartosz Fenski <fenio@debian.org> for the
 Debian GNU/Linux distribution (but it may be used by others).
 
+
diff -Nru sshfs-fuse-2.0/sshfs.c sshfs-fuse-2.1/sshfs.c
--- sshfs-fuse-2.0/sshfs.c	2008-04-22 09:02:42.000000000 -0700
+++ sshfs-fuse-2.1/sshfs.c	2008-07-11 04:00:33.000000000 -0700
@@ -24,6 +24,7 @@
 #include <netdb.h>
 #include <signal.h>
 #include <sys/uio.h>
+#include <sys/types.h>
 #include <sys/time.h>
 #include <sys/wait.h>
 #include <sys/socket.h>
@@ -36,6 +37,15 @@
 
 #include "cache.h"
 
+#ifndef MAP_LOCKED
+#define MAP_LOCKED 0
+#endif
+
+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+
 #if FUSE_VERSION >= 23
 #define SSHFS_USE_INIT
 #endif
@@ -278,6 +288,7 @@
 	KEY_HELP,
 	KEY_VERSION,
 	KEY_FOREGROUND,
+	KEY_CONFIGFILE,
 };
 
 #define SSHFS_OPT(t, p, v) { t, offsetof(struct sshfs, p), v }
@@ -311,6 +322,7 @@
 	FUSE_OPT_KEY("debug",          KEY_FOREGROUND),
 	FUSE_OPT_KEY("-d",             KEY_FOREGROUND),
 	FUSE_OPT_KEY("-f",             KEY_FOREGROUND),
+	FUSE_OPT_KEY("-F ",            KEY_CONFIGFILE),
 	FUSE_OPT_END
 };
 
@@ -650,29 +662,29 @@
 
 static int buf_get_statvfs(struct buffer *buf, struct statvfs *stbuf)
 {
-	uint32_t bsize;
-	uint32_t frsize;
+	uint64_t bsize;
+	uint64_t frsize;
 	uint64_t blocks;
 	uint64_t bfree;
 	uint64_t bavail;
 	uint64_t files;
 	uint64_t ffree;
 	uint64_t favail;
-	uint32_t fsid;
-	uint32_t flag;
-	uint32_t namemax;
+	uint64_t fsid;
+	uint64_t flag;
+	uint64_t namemax;
 
-	if (buf_get_uint32(buf, &bsize) == -1 ||
-	    buf_get_uint32(buf, &frsize) == -1 ||
+	if (buf_get_uint64(buf, &bsize) == -1 ||
+	    buf_get_uint64(buf, &frsize) == -1 ||
 	    buf_get_uint64(buf, &blocks) == -1 ||
 	    buf_get_uint64(buf, &bfree) == -1 ||
 	    buf_get_uint64(buf, &bavail) == -1 ||
 	    buf_get_uint64(buf, &files) == -1 ||
 	    buf_get_uint64(buf, &ffree) == -1 ||
 	    buf_get_uint64(buf, &favail) == -1 ||
-	    buf_get_uint32(buf, &fsid) == -1 ||
-	    buf_get_uint32(buf, &flag) == -1 ||
-	    buf_get_uint32(buf, &namemax) == -1) {
+	    buf_get_uint64(buf, &fsid) == -1 ||
+	    buf_get_uint64(buf, &flag) == -1 ||
+	    buf_get_uint64(buf, &namemax) == -1) {
 		return -1;
 	}
 
@@ -1338,11 +1350,13 @@
 
 			DEBUG("Extension: %s <%s>\n", ext, extdata);
 
-			if (strcmp(ext, SFTP_EXT_POSIX_RENAME) == 0) {
+			if (strcmp(ext, SFTP_EXT_POSIX_RENAME) == 0 &&
+			    strcmp(extdata, "1") == 0) {
 				sshfs.ext_posix_rename = 1;
 				sshfs.rename_workaround = 0;
 			}
-			if (strcmp(ext, SFTP_EXT_STATVFS) == 0)
+			if (strcmp(ext, SFTP_EXT_STATVFS) == 0 &&
+			    strcmp(extdata, "2") == 0)
 				sshfs.ext_statvfs = 1;
 		} while (buf2.len < buf2.size);
 	}
@@ -2116,6 +2130,7 @@
 	uint32_t pflags = 0;
 	struct iovec iov;
 	uint8_t type;
+	uint64_t wrctr = cache_get_write_ctr();
 
 	if ((fi->flags & O_ACCMODE) == O_RDONLY)
 		pflags = SSH_FXF_READ;
@@ -2171,7 +2186,7 @@
 	}
 
 	if (!err) {
-		cache_add_attr(path, &stbuf);
+		cache_add_attr(path, &stbuf, wrctr);
 		buf_finish(&sf->handle);
 		fi->fh = (unsigned long) sf;
 	} else {
@@ -2823,6 +2838,7 @@
 "SSHFS options:\n"
 "    -p PORT                equivalent to '-o port=PORT'\n"
 "    -C                     equivalent to '-o compression=yes'\n"
+"    -F ssh_configfile      specifies alternative ssh configuration file\n"
 "    -1                     equivalent to '-o ssh_protocol=1'\n"
 "    -o reconnect           reconnect to server\n"
 "    -o sshfs_sync          synchronous writes\n"
@@ -2913,6 +2929,12 @@
 		ssh_add_arg("-oCompression=yes");
 		return 0;
 
+	case KEY_CONFIGFILE:
+		tmp = g_strdup_printf("-F%s", arg + 2);
+		ssh_add_arg(tmp);
+		g_free(tmp);
+		return 0;
+
 	case KEY_HELP:
 		usage(outargs->argv[0]);
 		fuse_opt_add_arg(outargs, "-ho");

Attachment: signature.asc
Description: Digital signature


Reply to: