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.
This commit is contained in:
pooka 2010-05-21 10:40:19 +00:00
parent b91d2535d9
commit 40b04abea5
2 changed files with 35 additions and 40 deletions

View File

@ -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 @@ enum {
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 @@ struct puffs_kargs {
size_t pa_fhsize;
int pa_fhflags;
puffs_cookie_t pa_root_cookie;
enum vtype pa_root_vtype;
voff_t pa_root_vsize;
dev_t pa_root_rdev;
struct statvfs pa_svfsb;
uint8_t pa_vnopmask[PUFFS_VN_MAX + PUFFS_VN_SPARE];
char pa_typename[_VFS_NAMELEN];
char pa_mntfromname[_VFS_MNAMELEN];
uint8_t pa_vnopmask[PUFFS_VN_MAX];
puffs_cookie_t pa_root_cookie;
enum vtype pa_root_vtype;
voff_t pa_root_vsize;
union {
dev_t dev;
uint64_t container;
} devunion;
struct statvfs pa_svfsb;
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 @@ struct puffs_kargs {
#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 @@ struct puffs_req {
* 2) page cache for one entire node
*/
/* XXX: needs restructuring */
struct puffs_flush {
struct puffs_req pf_req;
@ -227,9 +227,6 @@ struct puffs_flush {
#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 @@ struct puffs_kcred {
* 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_vnmsg_readlink {
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 {

View File

@ -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 @@ puffs_vfsop_mount(struct mount *mp, const char *path, void *data,
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;
}