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)
/*