From owner-p4-projects@FreeBSD.ORG Sun Jul 19 07:18:26 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 84336106566C; Sun, 19 Jul 2009 07:18:25 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4412F106564A for ; Sun, 19 Jul 2009 07:18:25 +0000 (UTC) (envelope-from tatsianka@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 3025E8FC18 for ; Sun, 19 Jul 2009 07:18:25 +0000 (UTC) (envelope-from tatsianka@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6J7IPaN000726 for ; Sun, 19 Jul 2009 07:18:25 GMT (envelope-from tatsianka@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6J7IPhK000724 for perforce@freebsd.org; Sun, 19 Jul 2009 07:18:25 GMT (envelope-from tatsianka@FreeBSD.org) Date: Sun, 19 Jul 2009 07:18:25 GMT Message-Id: <200907190718.n6J7IPhK000724@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to tatsianka@FreeBSD.org using -f From: Tatsiana Severyna To: Perforce Change Reviews Cc: Subject: PERFORCE change 166251 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Jul 2009 07:18:26 -0000 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 #include -#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, <ype); + 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;