version 1.69, 2010/01/07 22:45:31 |
version 1.69.4.2, 2010/07/03 01:19:50 |
|
|
#define PUFFSOP_OPCLASS(a) ((a) & PUFFSOP_OPCMASK) |
#define PUFFSOP_OPCLASS(a) ((a) & PUFFSOP_OPCMASK) |
#define PUFFSOP_WANTREPLY(a) (((a) & PUFFSOPFLAG_FAF) == 0) |
#define PUFFSOP_WANTREPLY(a) (((a) & PUFFSOPFLAG_FAF) == 0) |
|
|
/* XXX: we don't need everything */ |
|
enum { |
enum { |
PUFFS_VFS_MOUNT, PUFFS_VFS_START, PUFFS_VFS_UNMOUNT, |
PUFFS_VFS_MOUNT, PUFFS_VFS_START, PUFFS_VFS_UNMOUNT, |
PUFFS_VFS_ROOT, PUFFS_VFS_STATVFS, PUFFS_VFS_SYNC, |
PUFFS_VFS_ROOT, PUFFS_VFS_QUOTACTL, PUFFS_VFS_STATVFS, |
PUFFS_VFS_VGET, PUFFS_VFS_FHTOVP, PUFFS_VFS_VPTOFH, |
PUFFS_VFS_SYNC, PUFFS_VFS_VGET, PUFFS_VFS_FHTOVP, |
PUFFS_VFS_INIT, PUFFS_VFS_DONE, PUFFS_VFS_SNAPSHOT, |
PUFFS_VFS_VPTOFH, PUFFS_VFS_INIT, PUFFS_VFS_DONE, |
PUFFS_VFS_EXTATTCTL, PUFFS_VFS_SUSPEND |
PUFFS_VFS_SNAPSHOT, PUFFS_VFS_EXTATTRCTL, PUFFS_VFS_SUSPEND |
}; |
}; |
#define PUFFS_VFS_MAX PUFFS_VFS_EXTATTCTL |
#define PUFFS_VFS_MAX PUFFS_VFS_SUSPEND |
|
|
/* moreXXX: we don't need everything here either */ |
|
enum { |
enum { |
PUFFS_VN_LOOKUP, PUFFS_VN_CREATE, PUFFS_VN_MKNOD, |
PUFFS_VN_LOOKUP, PUFFS_VN_CREATE, PUFFS_VN_MKNOD, |
PUFFS_VN_OPEN, PUFFS_VN_CLOSE, PUFFS_VN_ACCESS, |
PUFFS_VN_OPEN, PUFFS_VN_CLOSE, PUFFS_VN_ACCESS, |
|
|
PUFFS_VN_ADVLOCK, PUFFS_VN_LEASE, PUFFS_VN_WHITEOUT, |
PUFFS_VN_ADVLOCK, PUFFS_VN_LEASE, PUFFS_VN_WHITEOUT, |
PUFFS_VN_GETPAGES, PUFFS_VN_PUTPAGES, PUFFS_VN_GETEXTATTR, |
PUFFS_VN_GETPAGES, PUFFS_VN_PUTPAGES, PUFFS_VN_GETEXTATTR, |
PUFFS_VN_LISTEXTATTR, PUFFS_VN_OPENEXTATTR, PUFFS_VN_DELETEEXTATTR, |
PUFFS_VN_LISTEXTATTR, PUFFS_VN_OPENEXTATTR, PUFFS_VN_DELETEEXTATTR, |
PUFFS_VN_SETEXTATTR |
PUFFS_VN_SETEXTATTR, PUFFS_VN_CLOSEEXTATTR |
|
/* NOTE: If you add an op, decrement PUFFS_VN_SPARE accordingly */ |
}; |
}; |
#define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR |
#define PUFFS_VN_MAX PUFFS_VN_CLOSEEXTATTR |
|
#define PUFFS_VN_SPARE 32 |
|
|
/* |
/* |
* These signal invalid parameters the file system returned. |
* These signal invalid parameters the file system returned. |
*/ |
*/ |
enum { |
enum { |
|
PUFFS_ERR_ERROR, |
PUFFS_ERR_MAKENODE, PUFFS_ERR_LOOKUP, PUFFS_ERR_READDIR, |
PUFFS_ERR_MAKENODE, PUFFS_ERR_LOOKUP, PUFFS_ERR_READDIR, |
PUFFS_ERR_READLINK, PUFFS_ERR_READ, PUFFS_ERR_WRITE, |
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 |
|
|
#define PUFFSDEVELVERS 0x80000000 |
#define PUFFSVERSION 30 |
#define PUFFSVERSION 29 |
|
#define PUFFSNAMESIZE 32 |
#define PUFFSNAMESIZE 32 |
|
|
#define PUFFS_TYPEPREFIX "puffs|" |
#define PUFFS_TYPEPREFIX "puffs|" |
Line 131 struct puffs_kargs { |
|
Line 131 struct puffs_kargs { |
|
size_t pa_fhsize; |
size_t pa_fhsize; |
int pa_fhflags; |
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; |
puffs_cookie_t pa_root_cookie; |
enum vtype pa_root_vtype; |
enum vtype pa_root_vtype; |
voff_t pa_root_vsize; |
voff_t pa_root_vsize; |
dev_t pa_root_rdev; |
union { |
|
dev_t dev; |
|
uint64_t container; |
|
} devunion; |
|
|
struct statvfs pa_svfsb; |
struct statvfs pa_svfsb; |
|
|
char pa_typename[_VFS_NAMELEN]; |
uint32_t pa_spare[128]; |
char pa_mntfromname[_VFS_MNAMELEN]; |
|
|
|
uint8_t pa_vnopmask[PUFFS_VN_MAX]; |
|
}; |
}; |
|
#define pa_root_rdev devunion.dev |
|
|
#define PUFFS_KFLAG_NOCACHE_NAME 0x01 /* don't use name cache */ |
#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_PAGE 0x02 /* don't use page cache */ |
#define PUFFS_KFLAG_NOCACHE 0x03 /* no cache whatsoever */ |
#define PUFFS_KFLAG_NOCACHE 0x03 /* no cache whatsoever */ |
Line 151 struct puffs_kargs { |
|
Line 158 struct puffs_kargs { |
|
#define PUFFS_KFLAG_IAONDEMAND 0x10 /* inactive only on demand */ |
#define PUFFS_KFLAG_IAONDEMAND 0x10 /* inactive only on demand */ |
#define PUFFS_KFLAG_LOOKUP_FULLPNBUF 0x20 /* full pnbuf in lookup */ |
#define PUFFS_KFLAG_LOOKUP_FULLPNBUF 0x20 /* full pnbuf in lookup */ |
#define PUFFS_KFLAG_MASK 0x3f |
#define PUFFS_KFLAG_MASK 0x3f |
|
#define PUFFS_KFLAG_NOCACHE_ATTR 0x40 /* no attrib cache (unused) */ |
|
|
#define PUFFS_FHFLAG_DYNAMIC 0x01 |
#define PUFFS_FHFLAG_DYNAMIC 0x01 |
#define PUFFS_FHFLAG_NFSV2 0x02 |
#define PUFFS_FHFLAG_NFSV2 0x02 |
Line 159 struct puffs_kargs { |
|
Line 167 struct puffs_kargs { |
|
#define PUFFS_FHFLAG_PASSTHROUGH 0x08 |
#define PUFFS_FHFLAG_PASSTHROUGH 0x08 |
#define PUFFS_FHFLAG_MASK 0x0f |
#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 puffs_req { |
struct putter_hdr preq_pth; |
struct putter_hdr preq_pth; |
Line 205 struct puffs_req { |
|
Line 213 struct puffs_req { |
|
* 2) page cache for one entire node |
* 2) page cache for one entire node |
*/ |
*/ |
|
|
/* XXX: needs restructuring */ |
|
struct puffs_flush { |
struct puffs_flush { |
struct puffs_req pf_req; |
struct puffs_req pf_req; |
|
|
Line 221 struct puffs_flush { |
|
Line 228 struct puffs_flush { |
|
#define PUFFS_INVAL_PAGECACHE_NODE_RANGE 3 |
#define PUFFS_INVAL_PAGECACHE_NODE_RANGE 3 |
#define PUFFS_FLUSH_PAGECACHE_NODE_RANGE 4 |
#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 |
* Credentials for an operation. Can be either struct uucred for |
* ops called from a credential context or NOCRED/FSCRED for ops |
* ops called from a credential context or NOCRED/FSCRED for ops |
Line 245 struct puffs_kcred { |
|
Line 249 struct puffs_kcred { |
|
* else treated as garbage |
* else treated as garbage |
*/ |
*/ |
#define PUFFS_MSG_MAXSIZE 2*MAXPHYS |
#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 */ |
|
|
#define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX)) |
#define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX)) |
|
|
Line 327 struct puffs_vfsmsg_suspend { |
|
Line 333 struct puffs_vfsmsg_suspend { |
|
#define PUFFS_SUSPEND_RESUME 2 |
#define PUFFS_SUSPEND_RESUME 2 |
#define PUFFS_SUSPEND_ERROR 3 |
#define PUFFS_SUSPEND_ERROR 3 |
|
|
|
#define PUFFS_EXTATTRCTL_HASNODE 0x01 |
|
#define PUFFS_EXTATTRCTL_HASATTRNAME 0x02 |
|
struct puffs_vfsmsg_extattrctl { |
|
struct puffs_req pvfsr_pr; |
|
|
|
int pvfsr_cmd; /* OUT */ |
|
int pvfsr_attrnamespace; /* OUT */ |
|
int pvfsr_flags; /* OUT */ |
|
char pvfsr_attrname[PUFFS_EXTNAMELEN]; /* OUT */ |
|
}; |
|
|
/* |
/* |
* aux structures for vnode operations. |
* aux structures for vnode operations. |
*/ |
*/ |
Line 524 struct puffs_vnmsg_readlink { |
|
Line 541 struct puffs_vnmsg_readlink { |
|
|
|
struct puffs_kcred pvnr_cred; /* OUT */ |
struct puffs_kcred pvnr_cred; /* OUT */ |
size_t pvnr_linklen; /* IN */ |
size_t pvnr_linklen; /* IN */ |
char pvnr_link[MAXPATHLEN]; /* IN, XXX */ |
char pvnr_link[MAXPATHLEN]; /* IN */ |
}; |
}; |
|
|
struct puffs_vnmsg_reclaim { |
struct puffs_vnmsg_reclaim { |
Line 545 struct puffs_vnmsg_pathconf { |
|
Line 562 struct puffs_vnmsg_pathconf { |
|
struct puffs_req pvn_pr; |
struct puffs_req pvn_pr; |
|
|
int pvnr_name; /* OUT */ |
int pvnr_name; /* OUT */ |
int pvnr_retval; /* IN */ |
register_t pvnr_retval; /* IN */ |
}; |
}; |
|
|
struct puffs_vnmsg_advlock { |
struct puffs_vnmsg_advlock { |
Line 571 struct puffs_vnmsg_abortop { |
|
Line 588 struct puffs_vnmsg_abortop { |
|
struct puffs_kcred pvnr_cn_cred; /* OUT */ |
struct puffs_kcred pvnr_cn_cred; /* OUT */ |
}; |
}; |
|
|
|
struct puffs_vnmsg_getextattr { |
|
struct puffs_req pvn_pr; |
|
|
|
int pvnr_attrnamespace; /* OUT */ |
|
char pvnr_attrname[PUFFS_EXTNAMELEN];/* OUT */ |
|
|
|
struct puffs_kcred pvnr_cred; /* OUT */ |
|
size_t pvnr_datasize; /* IN */ |
|
|
|
size_t pvnr_resid; /* IN/OUT */ |
|
uint8_t pvnr_data[0] /* IN */ |
|
__aligned(ALIGNBYTES+1); |
|
}; |
|
|
|
struct puffs_vnmsg_setextattr { |
|
struct puffs_req pvn_pr; |
|
|
|
int pvnr_attrnamespace; /* OUT */ |
|
char pvnr_attrname[PUFFS_EXTNAMELEN];/* OUT */ |
|
|
|
struct puffs_kcred pvnr_cred; /* OUT */ |
|
|
|
size_t pvnr_resid; /* IN/OUT */ |
|
uint8_t pvnr_data[0] /* OUT */ |
|
__aligned(ALIGNBYTES+1); |
|
}; |
|
|
|
struct puffs_vnmsg_listextattr { |
|
struct puffs_req pvn_pr; |
|
|
|
int pvnr_attrnamespace; /* OUT */ |
|
|
|
struct puffs_kcred pvnr_cred; /* OUT */ |
|
size_t pvnr_datasize; /* IN */ |
|
|
|
size_t pvnr_resid; /* IN/OUT */ |
|
uint8_t pvnr_data[0] /* IN */ |
|
__aligned(ALIGNBYTES+1); |
|
}; |
|
|
|
struct puffs_vnmsg_deleteextattr { |
|
struct puffs_req pvn_pr; |
|
|
|
int pvnr_attrnamespace; /* OUT */ |
|
char pvnr_attrname[PUFFS_EXTNAMELEN];/* OUT */ |
|
|
|
struct puffs_kcred pvnr_cred; /* OUT */ |
|
}; |
|
|
/* |
/* |
* For cache reports. Everything is always out-out-out, no replies |
* For cache reports. Everything is always out-out-out, no replies |