Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Jul 2009 07:18:25 GMT
From:      Tatsiana Severyna <tatsianka@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 166251 for review
Message-ID:  <200907190718.n6J7IPhK000724@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166251

Change 166251 by tatsianka@tatsianka_zonder on 2009/07/19 07:18:22

	Add librefuse port
	Add fuse implementations of sshfs and unionfs for testing
	Fix statfs and nodetofh/fhtonode issues

Affected files ...

.. //depot/projects/soc2009/tatsianka_puffs/libpuffs/dirent_compat.h#2 delete
.. //depot/projects/soc2009/tatsianka_puffs/libpuffs/null.c#4 edit
.. //depot/projects/soc2009/tatsianka_puffs/libpuffs/opdump.c#3 edit
.. //depot/projects/soc2009/tatsianka_puffs/libpuffs/puffs_dirent_compat.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/libpuffs/subr.c#3 edit
.. //depot/projects/soc2009/tatsianka_puffs/librefuse/Makefile#1 add
.. //depot/projects/soc2009/tatsianka_puffs/librefuse/fuse.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/librefuse/fuse_opt.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/librefuse/refuse.3#1 add
.. //depot/projects/soc2009/tatsianka_puffs/librefuse/refuse.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/librefuse/refuse_opt.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/mount_psshfs/fs.c#3 edit
.. //depot/projects/soc2009/tatsianka_puffs/puffs/puffs_vnops.c#7 edit
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-sshfs/Makefile#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-sshfs/cache.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-sshfs/cache.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-sshfs/config.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-sshfs/sshfs.1#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-sshfs/sshfs.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/CMakeLists.txt#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/CREDITS#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/Makefile#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/cow.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/cow.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/cow_utils.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/cow_utils.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/debug.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/debug.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/elfhash.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/elfhash.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/findbranch.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/findbranch.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/general.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/general.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hash.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hash.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hashtable.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hashtable.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hashtable_itr.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hashtable_itr.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/hashtable_private.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/opts.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/opts.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/readdir.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/readdir.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/rmdir.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/rmdir.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/stats.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/stats.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/string.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/string.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/test.sh#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/unionfs.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/unionfs.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/unlink.c#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/unlink.h#1 add
.. //depot/projects/soc2009/tatsianka_puffs/test-fusefs-unionfs/version.h#1 add

Differences ...

==== //depot/projects/soc2009/tatsianka_puffs/libpuffs/null.c#4 (text+ko) ====

@@ -47,7 +47,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-#include "dirent_compat.h"
+#include "puffs_dirent_compat.h"
 
 PUFFSOP_PROTOS(puffs_null)
 
@@ -167,10 +167,8 @@
 	PUFFSOP_SET(pops, puffs_null, fs, statvfs);
 	PUFFSOP_SETFSNOP(pops, unmount);
 	PUFFSOP_SETFSNOP(pops, sync);
-#ifdef XXX_TS
 	PUFFSOP_SET(pops, puffs_null, fs, fhtonode);
 	PUFFSOP_SET(pops, puffs_null, fs, nodetofh);
-#endif
 
 	PUFFSOP_SET(pops, puffs_null, node, lookup);
 	PUFFSOP_SET(pops, puffs_null, node, create);
@@ -202,26 +200,21 @@
 	return 0;
 }
 
-#ifdef XXX_TS
 /*
  * XXX: this is the stupidest crap ever, but:
  * getfh() returns the fhandle type, when we are expected to deliver
  * the fid type.  Just adjust it a bit and stop whining.
  *
  * Yes, this really really needs fixing.  Yes, *REALLY*.
+ *
+ * XXX_TS: Directly use struct fid, as fh larger then MAXFIDSZ is unsupported
  */
-#define FHANDLE_HEADERLEN 8
-struct kernfid {
-	unsigned short	fid_len;		/* length of data in bytes */
-	unsigned short	fid_reserved;		/* compat: historic align */
-	char		fid_data[0];		/* data (variable length) */
-};
 
 /*ARGSUSED*/
 static void *
 fhcmp(struct puffs_usermount *pu, struct puffs_node *pn, void *arg)
 {
-	struct kernfid *kf1, *kf2;
+	struct fid *kf1, *kf2;
 
 	if ((kf1 = pn->pn_data) == NULL)
 		return NULL;
@@ -247,6 +240,9 @@
 {
 	struct puffs_node *pn_res;
 
+	if (fidsize != sizeof(struct fid))
+		return EINVAL;
+
 	pn_res = puffs_pn_nodewalk(pu, fhcmp, fid);
 	if (pn_res == NULL)
 		return ENOENT;
@@ -264,38 +260,25 @@
 	void *fid, size_t *fidsize)
 {
 	struct puffs_node *pn = opc;
-	struct kernfid *kfid;
-	void *bounce;
+	fhandle_t fh;
 	int rv;
 
+	if (*fidsize != sizeof(struct fid))
+		return EINVAL;
+
 	rv = 0;
-	bounce = NULL;
-	if (*fidsize) {
-		bounce = malloc(*fidsize + FHANDLE_HEADERLEN);
-		if (!bounce)
-			return ENOMEM;
-		*fidsize += FHANDLE_HEADERLEN;
-	}
-	if (getfh(PNPATH(pn), bounce, fidsize) == -1)
+	if (getfh(PNPATH(pn), &fh) == -1)
 		rv = errno;
-	else
-		memcpy(fid, (uint8_t *)bounce + FHANDLE_HEADERLEN,
-		    *fidsize - FHANDLE_HEADERLEN);
-	kfid = fid;
 	if (rv == 0) {
-		*fidsize = kfid->fid_len;
+		*(struct fid *)fid = fh.fh_fid;
 		pn->pn_data = malloc(*fidsize);
 		if (pn->pn_data == NULL)
 			abort(); /* lazy */
 		memcpy(pn->pn_data, fid, *fidsize);
-	} else {
-		*fidsize -= FHANDLE_HEADERLEN;
 	}
-	free(bounce);
 
 	return rv;
 }
-#endif
 
 int
 puffs_null_node_lookup(struct puffs_usermount *pu, puffs_cookie_t opc,
@@ -431,18 +414,6 @@
 	if (fd == -1)
 		return errno;
 
-#ifdef XXX_TS
-	if (how & PUFFS_FSYNC_DATAONLY)
-		fflags = FDATASYNC;
-	else
-		fflags = FFILESYNC;
-	if (how & PUFFS_FSYNC_CACHE)
-		fflags |= FDISKSYNC;
-
-	if (fsync_range(fd, fflags, offlo, offhi - offlo) == -1)
-		rv = errno;
-#endif
-
 	if (fsync(fd) == -1)
 		rv = errno;
 

==== //depot/projects/soc2009/tatsianka_puffs/libpuffs/opdump.c#3 (text+ko) ====

@@ -258,7 +258,6 @@
 void
 puffsdump_cn(struct puffs_kcn *pkcn)
 {
-
 	/* XXX_TS under if _KERNEL */
 	const int NAMEI_OPMASK = 3;
 

==== //depot/projects/soc2009/tatsianka_puffs/libpuffs/subr.c#3 (text+ko) ====

@@ -44,7 +44,7 @@
 
 #include "puffs_priv.h"
 
-#include "dirent_compat.h"
+#include "puffs_dirent_compat.h"
 
 int
 puffs_gendotdent(struct dirent **dent, ino_t id, int dotdot, size_t *reslen)

==== //depot/projects/soc2009/tatsianka_puffs/mount_psshfs/fs.c#3 (text+ko) ====

@@ -180,11 +180,7 @@
 	uint8_t type;
 
 	memset(sbp, 0, sizeof(*sbp));
-#ifdef XXX_TS
-	sbp->f_bsize = sbp->f_frsize = sbp->f_iosize = 512;
-#else
 	sbp->f_bsize = sbp->f_iosize = 512;
-#endif
 
 	if ((pctx->extensions & SFTP_EXT_STATVFS) == 0)
 		goto out;
@@ -200,21 +196,15 @@
 	}
 
 	psbuf_get_8(pb, &tmpval);
-	sbp->f_bsize = tmpval;
+	sbp->f_iosize = tmpval; /* statvfs.f_bsize */
 	psbuf_get_8(pb, &tmpval);
-#ifdef XXX_TS
-	sbp->f_frsize = tmpval;
-#endif
+	sbp->f_bsize = tmpval; /* statvfs.f_frsize */
 	psbuf_get_8(pb, &sbp->f_blocks);
 	psbuf_get_8(pb, &sbp->f_bfree);
 	psbuf_get_8(pb, &sbp->f_bavail);
 	psbuf_get_8(pb, &sbp->f_files);
 	psbuf_get_8(pb, &sbp->f_ffree);
-#ifdef XXX_TS
-	psbuf_get_8(pb, &sbp->f_favail);
-#else
-	psbuf_get_8(pb, &tmpval);
-#endif
+	psbuf_get_8(pb, &tmpval); /* favail */
 
 	psbuf_get_8(pb, &tmpval); /* fsid */
 	psbuf_get_8(pb, &tmpval); /* flag */

==== //depot/projects/soc2009/tatsianka_puffs/puffs/puffs_vnops.c#7 (text+ko) ====

@@ -123,9 +123,10 @@
 	struct vnode *vp = ap->a_vp;
 	struct fid *fhp = ap->a_fhp;
 	PUFFS_MSG_VARS(vfs, nodetofh);
+	struct puffs_node *pn = VPTOPP(vp);
 	struct puffs_mount *pmp = MPTOPUFFSMP(vp->v_mount);
 	size_t argsize, fhlen;
-	int error;
+	int error, ltype;
 
 	DTRACE();
 	if (pmp->pmp_args.pa_fhsize == 0)
@@ -138,8 +139,11 @@
 	nodetofh_msg->pvfsr_dsize = fhlen;
 	puffs_msg_setinfo(park_nodetofh, PUFFSOP_VFS, PUFFS_VFS_VPTOFH, NULL);
 
-	PUFFS_MSG_ENQUEUEWAIT(pmp, park_nodetofh, error);
+	puffs_msg_enqueue(pmp, park_nodetofh);
+	puffs_unlockvnode(pn, &ltype);
+	error = puffs_msg_wait(pmp, park_nodetofh);
 	error = checkerr(pmp, error, __func__);
+	PUFFS_LOCKVNODE(pn, ltype, error);
 
 	if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_PASSTHROUGH)
 		fhlen = nodetofh_msg->pvfsr_dsize;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907190718.n6J7IPhK000724>