Module Name:    src
Committed By:   pooka
Date:           Fri May 21 10:40:20 UTC 2010

Modified Files:
        src/sys/fs/puffs: puffs_msgif.h puffs_vfsops.c

Log Message:
Since libpuffs needs a major bump for extattr support anyway, make
some changes to the user-kernel protocol.  Namely, try to be a
little more resilient some future changes.


To generate a diff of this commit:
cvs rdiff -u -r1.71 -r1.72 src/sys/fs/puffs/puffs_msgif.h
cvs rdiff -u -r1.88 -r1.89 src/sys/fs/puffs/puffs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/puffs/puffs_msgif.h
diff -u src/sys/fs/puffs/puffs_msgif.h:1.71 src/sys/fs/puffs/puffs_msgif.h:1.72
--- src/sys/fs/puffs/puffs_msgif.h:1.71	Fri May 21 10:16:54 2010
+++ src/sys/fs/puffs/puffs_msgif.h	Fri May 21 10:40:19 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_msgif.h,v 1.71 2010/05/21 10:16:54 pooka Exp $	*/
+/*	$NetBSD: puffs_msgif.h,v 1.72 2010/05/21 10:40:19 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -61,18 +61,15 @@
 #define PUFFSOP_OPCLASS(a)	((a) & PUFFSOP_OPCMASK)
 #define PUFFSOP_WANTREPLY(a)	(((a) & PUFFSOPFLAG_FAF) == 0)
 
-/* XXX: we don't need everything */
 enum {
 	PUFFS_VFS_MOUNT,	PUFFS_VFS_START,	PUFFS_VFS_UNMOUNT,
-	PUFFS_VFS_ROOT,		PUFFS_VFS_STATVFS,	PUFFS_VFS_SYNC,
-	PUFFS_VFS_VGET,		PUFFS_VFS_FHTOVP,	PUFFS_VFS_VPTOFH,
-	PUFFS_VFS_INIT,		PUFFS_VFS_DONE,		PUFFS_VFS_SNAPSHOT,
-	PUFFS_VFS_EXTATTRCTL,	PUFFS_VFS_SUSPEND
+	PUFFS_VFS_ROOT,		PUFFS_VFS_QUOTACTL,	PUFFS_VFS_STATVFS,
+	PUFFS_VFS_SYNC,		PUFFS_VFS_VGET,		PUFFS_VFS_FHTOVP,
+	PUFFS_VFS_VPTOFH,	PUFFS_VFS_INIT,		PUFFS_VFS_DONE,
+	PUFFS_VFS_SNAPSHOT,	PUFFS_VFS_EXTATTRCTL,	PUFFS_VFS_SUSPEND
 };
-#define PUFFS_VFS_SPARE 0
-#define PUFFS_VFS_MAX (PUFFS_VFS_EXTATTRCTL+PUFFS_VFS_SPARE)
+#define PUFFS_VFS_MAX PUFFS_VFS_SUSPEND
 
-/* moreXXX: we don't need everything here either */
 enum {
 	PUFFS_VN_LOOKUP,	PUFFS_VN_CREATE,	PUFFS_VN_MKNOD,
 	PUFFS_VN_OPEN,		PUFFS_VN_CLOSE,		PUFFS_VN_ACCESS,
@@ -89,27 +86,24 @@
 	PUFFS_VN_ADVLOCK,	PUFFS_VN_LEASE,		PUFFS_VN_WHITEOUT,
 	PUFFS_VN_GETPAGES,	PUFFS_VN_PUTPAGES,	PUFFS_VN_GETEXTATTR,
 	PUFFS_VN_LISTEXTATTR,	PUFFS_VN_OPENEXTATTR,	PUFFS_VN_DELETEEXTATTR,
-	PUFFS_VN_SETEXTATTR	/* PUFFS_VN_CLOSEEXTATTR */
+	PUFFS_VN_SETEXTATTR,	PUFFS_VN_CLOSEEXTATTR
+	/* NOTE: If you add an op, decrement PUFFS_VN_SPARE accordingly */
 };
-#define PUFFS_VN_SPARE 0
-#define PUFFS_VN_MAX (PUFFS_VN_SETEXTATTR+PUFFS_VN_SPARE)
+#define PUFFS_VN_MAX PUFFS_VN_CLOSEEXTATTR
+#define PUFFS_VN_SPARE 32
 
 /*
  * These signal invalid parameters the file system returned.
  */
 enum {
+	PUFFS_ERR_ERROR,
 	PUFFS_ERR_MAKENODE,	PUFFS_ERR_LOOKUP,	PUFFS_ERR_READDIR,
 	PUFFS_ERR_READLINK,	PUFFS_ERR_READ,		PUFFS_ERR_WRITE,
-	PUFFS_ERR_VPTOFH,	PUFFS_ERR_ERROR
+	PUFFS_ERR_VPTOFH,	PUFFS_ERR_GETEXTATTR,	PUFFS_ERR_LISTEXTATTR
 };
-#define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH
+#define PUFFS_ERR_MAX PUFFS_ERR_LISTEXTATTR
 
-/* trick to avoid protocol bump */
-#define PUFFS_ERR_GETEXTATTR PUFFS_ERR_ERROR
-#define PUFFS_ERR_LISTEXTATTR PUFFS_ERR_ERROR
-
-#define PUFFSDEVELVERS	0x80000000
-#define PUFFSVERSION	29
+#define PUFFSVERSION	30
 #define PUFFSNAMESIZE	32
 
 #define PUFFS_TYPEPREFIX "puffs|"
@@ -137,18 +131,25 @@
 	size_t		pa_fhsize;
 	int		pa_fhflags;
 
+	uint8_t		pa_vnopmask[PUFFS_VN_MAX + PUFFS_VN_SPARE];
+
+	char		pa_typename[_VFS_NAMELEN];
+	char		pa_mntfromname[_VFS_MNAMELEN];
+
 	puffs_cookie_t	pa_root_cookie;
 	enum vtype	pa_root_vtype;
 	voff_t		pa_root_vsize;
-	dev_t		pa_root_rdev;
+	union {
+		dev_t		dev;
+		uint64_t	container;
+	} devunion;
 
 	struct statvfs	pa_svfsb;
 
-	char		pa_typename[_VFS_NAMELEN];
-	char		pa_mntfromname[_VFS_MNAMELEN];
-
-	uint8_t		pa_vnopmask[PUFFS_VN_MAX];
+	uint32_t	pa_spare[128];
 };
+#define pa_root_rdev devunion.dev
+
 #define PUFFS_KFLAG_NOCACHE_NAME	0x01	/* don't use name cache     */
 #define PUFFS_KFLAG_NOCACHE_PAGE	0x02	/* don't use page cache	    */
 #define PUFFS_KFLAG_NOCACHE		0x03	/* no cache whatsoever      */
@@ -165,7 +166,7 @@
 #define PUFFS_FHFLAG_PASSTHROUGH	0x08
 #define PUFFS_FHFLAG_MASK		0x0f
 
-#define PUFFS_FHSIZE_MAX	1020	/* XXX: FHANDLE_SIZE_MAX - 4 */
+#define PUFFS_FHSIZE_MAX	1020	/* FHANDLE_SIZE_MAX - 4 */
 
 struct puffs_req {
 	struct putter_hdr	preq_pth;
@@ -211,7 +212,6 @@
  * 2) page cache for one entire node
  */
 
-/* XXX: needs restructuring */
 struct puffs_flush {
 	struct puffs_req	pf_req;
 
@@ -227,9 +227,6 @@
 #define PUFFS_INVAL_PAGECACHE_NODE_RANGE	3
 #define PUFFS_FLUSH_PAGECACHE_NODE_RANGE	4
 
-/* keep this for now */
-#define PUFFSREQSIZEOP		_IOR ('p', 1, size_t)
-
 /*
  * Credentials for an operation.  Can be either struct uucred for
  * ops called from a credential context or NOCRED/FSCRED for ops
@@ -251,7 +248,7 @@
  * else treated as garbage
  */
 #define PUFFS_MSG_MAXSIZE	2*MAXPHYS
-#define PUFFS_MSGSTRUCT_MAX	4096 /* XXX: approxkludge */
+#define PUFFS_MSGSTRUCT_MAX	4096 /* approximate */
 
 #define PUFFS_EXTNAMELEN NAME_MAX /* currently same as EXTATTR_MAXNAMELEN */
 
@@ -543,7 +540,7 @@
 
 	struct puffs_kcred	pvnr_cred;		/* OUT */
 	size_t			pvnr_linklen;		/* IN  */
-	char			pvnr_link[MAXPATHLEN];	/* IN, XXX  */
+	char			pvnr_link[MAXPATHLEN];	/* IN  */
 };
 
 struct puffs_vnmsg_reclaim {

Index: src/sys/fs/puffs/puffs_vfsops.c
diff -u src/sys/fs/puffs/puffs_vfsops.c:1.88 src/sys/fs/puffs/puffs_vfsops.c:1.89
--- src/sys/fs/puffs/puffs_vfsops.c:1.88	Fri May 21 10:16:54 2010
+++ src/sys/fs/puffs/puffs_vfsops.c	Fri May 21 10:40:19 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vfsops.c,v 1.88 2010/05/21 10:16:54 pooka Exp $	*/
+/*	$NetBSD: puffs_vfsops.c,v 1.89 2010/05/21 10:40:19 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.88 2010/05/21 10:16:54 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.89 2010/05/21 10:40:19 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/mount.h>
@@ -111,11 +111,9 @@
 
 	args = (struct puffs_kargs *)data;
 
-	/* devel phase */
-	if (args->pa_vers != (PUFFSVERSION | PUFFSDEVELVERS)) {
+	if (args->pa_vers != PUFFSVERSION) {
 		printf("puffs_mount: development version mismatch: "
-		    "kernel %d, lib %d\n",
-		    PUFFSVERSION, args->pa_vers & ~PUFFSDEVELVERS);
+		    "kernel %d, lib %d\n", PUFFSVERSION, args->pa_vers);
 		error = EINVAL;
 		goto out;
 	}

Reply via email to