Module Name: src Committed By: sborrill Date: Sun Oct 18 12:46:07 UTC 2009
Modified Files: src/lib/libpuffs [netbsd-5]: dispatcher.c puffs.c puffs.h src/sys/fs/puffs [netbsd-5]: puffs_msgif.h puffs_vnops.c Log Message: Pull up the following revisions(s) (requested by pooka in ticket #1100): lib/libpuffs/dispatcher.c: revision 1.33 lib/libpuffs/puffs.c: revision 1.99 lib/libpuffs/puffs.h: revision 1.111 sys/fs/puffs/puffs_msgif.h: revision 1.67 via patch sys/fs/puffs/puffs_vnops.c: revision 1.136 Support VOP_ABORTOP() in puffs. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.32.4.1 src/lib/libpuffs/dispatcher.c cvs rdiff -u -r1.92.4.2 -r1.92.4.3 src/lib/libpuffs/puffs.c cvs rdiff -u -r1.108.4.2 -r1.108.4.3 src/lib/libpuffs/puffs.h cvs rdiff -u -r1.65 -r1.65.20.1 src/sys/fs/puffs/puffs_msgif.h cvs rdiff -u -r1.129.4.2 -r1.129.4.3 src/sys/fs/puffs/puffs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libpuffs/dispatcher.c diff -u src/lib/libpuffs/dispatcher.c:1.32 src/lib/libpuffs/dispatcher.c:1.32.4.1 --- src/lib/libpuffs/dispatcher.c:1.32 Tue Aug 12 19:44:39 2008 +++ src/lib/libpuffs/dispatcher.c Sun Oct 18 12:46:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dispatcher.c,v 1.32 2008/08/12 19:44:39 pooka Exp $ */ +/* $NetBSD: dispatcher.c,v 1.32.4.1 2009/10/18 12:46:07 sborrill Exp $ */ /* * Copyright (c) 2006, 2007, 2008 Antti Kantee. All Rights Reserved. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: dispatcher.c,v 1.32 2008/08/12 19:44:39 pooka Exp $"); +__RCSID("$NetBSD: dispatcher.c,v 1.32.4.1 2009/10/18 12:46:07 sborrill Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -828,6 +828,24 @@ break; } + case PUFFS_VN_ABORTOP: + { + struct puffs_vnmsg_abortop *auxt = auxbuf; + struct puffs_cn pcn; + + if (pops->puffs_node_abortop == NULL) { + error = 0; + break; + } + + pcn.pcn_pkcnp = &auxt->pvnr_cn; + PUFFS_KCREDTOCRED(pcn.pcn_cred, &auxt->pvnr_cn_cred); + + error = pops->puffs_node_abortop(pu, opcookie, &pcn); + + break; + } + case PUFFS_VN_READ: { struct puffs_vnmsg_read *auxt = auxbuf; @@ -896,6 +914,8 @@ break; } +#if 0 + /* not issued by kernel currently */ } else if (PUFFSOP_OPCLASS(preq->preq_opclass) == PUFFSOP_CACHE) { struct puffs_cacheinfo *pci = (void *)preq; @@ -904,6 +924,7 @@ pci->pcache_nruns, pci->pcache_runs); } error = 0; +#endif } else if (PUFFSOP_OPCLASS(preq->preq_opclass) == PUFFSOP_ERROR) { struct puffs_error *perr = (void *)preq; Index: src/lib/libpuffs/puffs.c diff -u src/lib/libpuffs/puffs.c:1.92.4.2 src/lib/libpuffs/puffs.c:1.92.4.3 --- src/lib/libpuffs/puffs.c:1.92.4.2 Fri Oct 16 12:10:54 2009 +++ src/lib/libpuffs/puffs.c Sun Oct 18 12:46:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs.c,v 1.92.4.2 2009/10/16 12:10:54 sborrill Exp $ */ +/* $NetBSD: puffs.c,v 1.92.4.3 2009/10/18 12:46:07 sborrill Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: puffs.c,v 1.92.4.2 2009/10/16 12:10:54 sborrill Exp $"); +__RCSID("$NetBSD: puffs.c,v 1.92.4.3 2009/10/18 12:46:07 sborrill Exp $"); #endif /* !lint */ #include <sys/param.h> @@ -99,6 +99,7 @@ FILLOP(print, PRINT); FILLOP(read, READ); FILLOP(write, WRITE); + FILLOP(abortop, ABORTOP); } #undef FILLOP @@ -584,21 +585,15 @@ return rv; } +/*ARGSUSED*/ struct puffs_usermount * -_puffs_init(int develv, struct puffs_ops *pops, const char *mntfromname, +_puffs_init(int dummy, struct puffs_ops *pops, const char *mntfromname, const char *puffsname, void *priv, uint32_t pflags) { struct puffs_usermount *pu; struct puffs_kargs *pargs; int sverrno; - if (develv != PUFFS_DEVEL_LIBVERSION) { - warnx("puffs_init: mounting with lib version %d, need %d", - develv, PUFFS_DEVEL_LIBVERSION); - errno = EINVAL; - return NULL; - } - pu = malloc(sizeof(struct puffs_usermount)); if (pu == NULL) goto failfree; Index: src/lib/libpuffs/puffs.h diff -u src/lib/libpuffs/puffs.h:1.108.4.2 src/lib/libpuffs/puffs.h:1.108.4.3 --- src/lib/libpuffs/puffs.h:1.108.4.2 Fri Oct 16 12:10:54 2009 +++ src/lib/libpuffs/puffs.h Sun Oct 18 12:46:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs.h,v 1.108.4.2 2009/10/16 12:10:54 sborrill Exp $ */ +/* $NetBSD: puffs.h,v 1.108.4.3 2009/10/18 12:46:07 sborrill Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -218,10 +218,13 @@ uint8_t *, off_t, size_t *, const struct puffs_cred *, int); int (*puffs_node_write)(struct puffs_usermount *, puffs_cookie_t, uint8_t *, off_t, size_t *, const struct puffs_cred *, int); + int (*puffs_node_abortop)(struct puffs_usermount *, puffs_cookie_t, + const struct puffs_cn *); - /* XXX: this shouldn't be here */ - void (*puffs_cache_write)(struct puffs_usermount *, - puffs_cookie_t, size_t, struct puffs_cacherun *); +#if 0 + /* enable next time this structure is changed */ + void *puffs_ops_spare[32]; +#endif }; typedef int (*pu_pathbuild_fn)(struct puffs_usermount *, @@ -354,8 +357,8 @@ int fsname##_node_write(struct puffs_usermount *, \ puffs_cookie_t, uint8_t *, off_t, size_t *, \ const struct puffs_cred *, int); \ - int fsname##_cache_write(struct puffs_usermount *, \ - puffs_cookie_t, size_t, struct puffs_cacheinfo *); + int fsname##_node_abortop(struct puffs_usermount *, \ + puffs_cookie_t, const struct puffs_cn *); #define PUFFSOP_INIT(ops) \ ops = malloc(sizeof(struct puffs_ops)); \ Index: src/sys/fs/puffs/puffs_msgif.h diff -u src/sys/fs/puffs/puffs_msgif.h:1.65 src/sys/fs/puffs/puffs_msgif.h:1.65.20.1 --- src/sys/fs/puffs/puffs_msgif.h:1.65 Mon Jan 28 21:06:36 2008 +++ src/sys/fs/puffs/puffs_msgif.h Sun Oct 18 12:46:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_msgif.h,v 1.65 2008/01/28 21:06:36 pooka Exp $ */ +/* $NetBSD: puffs_msgif.h,v 1.65.20.1 2009/10/18 12:46:07 sborrill Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -102,7 +102,7 @@ #define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH #define PUFFSDEVELVERS 0x80000000 -#define PUFFSVERSION 26 +#define PUFFSVERSION 28 #define PUFFSNAMESIZE 32 #define PUFFS_TYPEPREFIX "puffs|" @@ -563,6 +563,13 @@ struct puffs_kcred pvnr_cred; /* OUT */ }; +struct puffs_vnmsg_abortop { + struct puffs_req pvn_pr; + + struct puffs_kcn pvnr_cn; /* OUT */ + struct puffs_kcred pvnr_cn_cred; /* OUT */ +}; + /* * For cache reports. Everything is always out-out-out, no replies Index: src/sys/fs/puffs/puffs_vnops.c diff -u src/sys/fs/puffs/puffs_vnops.c:1.129.4.2 src/sys/fs/puffs/puffs_vnops.c:1.129.4.3 --- src/sys/fs/puffs/puffs_vnops.c:1.129.4.2 Sat Oct 3 23:11:27 2009 +++ src/sys/fs/puffs/puffs_vnops.c Sun Oct 18 12:46:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_vnops.c,v 1.129.4.2 2009/10/03 23:11:27 snj Exp $ */ +/* $NetBSD: puffs_vnops.c,v 1.129.4.3 2009/10/18 12:46:07 sborrill Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.129.4.2 2009/10/03 23:11:27 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.129.4.3 2009/10/18 12:46:07 sborrill Exp $"); #include <sys/param.h> #include <sys/fstrans.h> @@ -81,6 +81,7 @@ int puffs_vnop_bmap(void *); int puffs_vnop_mmap(void *); int puffs_vnop_getpages(void *); +int puffs_vnop_abortop(void *); int puffs_vnop_spec_read(void *); int puffs_vnop_spec_write(void *); @@ -129,7 +130,7 @@ { &vop_advlock_desc, puffs_vnop_checkop }, /* advlock */ { &vop_strategy_desc, puffs_vnop_strategy }, /* REAL strategy */ { &vop_revoke_desc, genfs_revoke }, /* REAL revoke */ - { &vop_abortop_desc, genfs_abortop }, /* REAL abortop */ + { &vop_abortop_desc, puffs_vnop_abortop }, /* REAL abortop */ { &vop_inactive_desc, puffs_vnop_inactive }, /* REAL inactive */ { &vop_reclaim_desc, puffs_vnop_reclaim }, /* REAL reclaim */ { &vop_lock_desc, puffs_vnop_lock }, /* REAL lock */ @@ -2114,6 +2115,33 @@ return error; } +int +puffs_vnop_abortop(void *v) +{ + struct vop_abortop_args /* { + struct vnode *a_dvp; + struct componentname *a_cnp; + }; */ *ap = v; + PUFFS_MSG_VARS(vn, abortop); + struct vnode *dvp = ap->a_dvp; + struct puffs_mount *pmp = MPTOPUFFSMP(dvp->v_mount); + struct componentname *cnp = ap->a_cnp; + int error; + + if (EXISTSOP(pmp, ABORTOP)) { + PUFFS_MSG_ALLOC(vn, abortop); + puffs_makecn(&abortop_msg->pvnr_cn, &abortop_msg->pvnr_cn_cred, + cnp, PUFFS_USE_FULLPNBUF(pmp)); + puffs_msg_setinfo(park_abortop, PUFFSOP_VN, + PUFFS_VN_ABORTOP, VPTOPNC(dvp)); + + PUFFS_MSG_ENQUEUEWAIT(pmp, park_abortop, error); + PUFFS_MSG_RELEASE(abortop); + } + + return genfs_abortop(v); +} + #define BIOASYNC(bp) (bp->b_flags & B_ASYNC) /*