Module Name:    src
Committed By:   pooka
Date:           Thu Nov  5 19:42:44 UTC 2009

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

Log Message:
Kill suspend support.  It was never implemented correctly:
  * it depended on the biglock (in a very cruel way)
  * it was attached to userspace transactions rather than logical
    fs operations

(If someone wants to revisit it some day, most of the stuff can be
reused from cvs history)


To generate a diff of this commit:
cvs rdiff -u -r1.73 -r1.74 src/sys/fs/puffs/puffs_msgif.c
cvs rdiff -u -r1.14 -r1.15 src/sys/fs/puffs/puffs_node.c
cvs rdiff -u -r1.71 -r1.72 src/sys/fs/puffs/puffs_sys.h
cvs rdiff -u -r1.82 -r1.83 src/sys/fs/puffs/puffs_vfsops.c
cvs rdiff -u -r1.137 -r1.138 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/sys/fs/puffs/puffs_msgif.c
diff -u src/sys/fs/puffs/puffs_msgif.c:1.73 src/sys/fs/puffs/puffs_msgif.c:1.74
--- src/sys/fs/puffs/puffs_msgif.c:1.73	Wed Mar 18 10:22:42 2009
+++ src/sys/fs/puffs/puffs_msgif.c	Thu Nov  5 19:42:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_msgif.c,v 1.73 2009/03/18 10:22:42 cegger Exp $	*/
+/*	$NetBSD: puffs_msgif.c,v 1.74 2009/11/05 19:42:44 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,11 +30,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.73 2009/03/18 10:22:42 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.74 2009/11/05 19:42:44 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
-#include <sys/fstrans.h>
 #include <sys/kmem.h>
 #include <sys/kthread.h>
 #include <sys/lock.h>
@@ -366,38 +365,7 @@
 		}
 	}
 
-	/*
-	 * test for suspension lock.
-	 *
-	 * Note that we *DO NOT* keep the lock, since that might block
-	 * lock acquiring PLUS it would give userlandia control over
-	 * the lock.  The operation queue enforces a strict ordering:
-	 * when the fs server gets in the op stream, it knows things
-	 * are in order.  The kernel locks can't guarantee that for
-	 * userspace, in any case.
-	 *
-	 * BUT: this presents a problem for ops which have a consistency
-	 * clause based on more than one operation.  Unfortunately such
-	 * operations (read, write) do not reliably work yet.
-	 *
-	 * Ya, Ya, it's wrong wong wrong, me be fixink this someday.
-	 *
-	 * XXX: and there is one more problem.  We sometimes need to
-	 * take a lazy lock in case the fs is suspending and we are
-	 * executing as the fs server context.  This might happen
-	 * e.g. in the case that the user server triggers a reclaim
-	 * in the kernel while the fs is suspending.  It's not a very
-	 * likely event, but it needs to be fixed some day.
-	 */
-
-	/*
-	 * MOREXXX: once PUFFS_WCACHEINFO is enabled, we can't take
-	 * the mutex here, since getpages() might be called locked.
-	 */
-	fstrans_start(mp, FSTRANS_NORMAL);
 	mutex_enter(&pmp->pmp_lock);
-	fstrans_done(mp);
-
 	if (pmp->pmp_status != PUFFSTAT_RUNNING) {
 		mutex_exit(&pmp->pmp_lock);
 		park->park_flags |= PARKFLAG_HASERROR;
@@ -432,7 +400,6 @@
 puffs_msg_wait(struct puffs_mount *pmp, struct puffs_msgpark *park)
 {
 	struct puffs_req *preq = park->park_preq; /* XXX: hmmm */
-	struct mount *mp = PMPTOMP(pmp);
 	int error = 0;
 	int rv;
 
@@ -504,20 +471,6 @@
 		mutex_exit(&park->park_mtx);
 	}
 
-	/*
-	 * retake the lock and release.  This makes sure (haha,
-	 * I'm humorous) that we don't process the same vnode in
-	 * multiple threads due to the locks hacks we have in
-	 * puffs_lock().  In reality this is well protected by
-	 * the biglock, but once that's gone, well, hopefully
-	 * this will be fixed for real.  (and when you read this
-	 * comment in 2017 and subsequently barf, my condolences ;).
-	 */
-	if (rv == 0 && !fstrans_is_owner(mp)) {
-		fstrans_start(mp, FSTRANS_NORMAL);
-		fstrans_done(mp);
-	}
-
  skipwait:
 	mutex_enter(&pmp->pmp_lock);
 	puffs_mp_release(pmp);
@@ -799,63 +752,6 @@
 	puffs_msgpark_release1(park, 2);
 }
 
-/*
- * helpers
- */
-static void
-dosuspendresume(void *arg)
-{
-	struct puffs_mount *pmp = arg;
-	struct mount *mp;
-	int rv;
-
-	mp = PMPTOMP(pmp);
-	/*
-	 * XXX?  does this really do any good or is it just
-	 * paranoid stupidity?  or stupid paranoia?
-	 */
-	if (mp->mnt_iflag & IMNT_UNMOUNT) {
-		printf("puffs dosuspendresume(): detected suspend on "
-		    "unmounting fs\n");
-		goto out;
-	}
-
-	/* Do the dance.  Allow only one concurrent suspend */
-	rv = vfs_suspend(PMPTOMP(pmp), 1);
-	if (rv == 0)
-		vfs_resume(PMPTOMP(pmp));
-
- out:
-	mutex_enter(&pmp->pmp_lock);
-	KASSERT(pmp->pmp_suspend == 1);
-	pmp->pmp_suspend = 0;
-	puffs_mp_release(pmp);
-	mutex_exit(&pmp->pmp_lock);
-
-	kthread_exit(0);
-}
-
-static void
-puffsop_suspend(struct puffs_mount *pmp)
-{
-	int rv = 0;
-
-	mutex_enter(&pmp->pmp_lock);
-	if (pmp->pmp_suspend || pmp->pmp_status != PUFFSTAT_RUNNING) {
-		rv = EBUSY;
-	} else {
-		puffs_mp_reference(pmp);
-		pmp->pmp_suspend = 1;
-	}
-	mutex_exit(&pmp->pmp_lock);
-	if (rv)
-		return;
-	rv = kthread_create(PRI_NONE, 0, NULL, dosuspendresume,
-	    pmp, NULL, "puffsusp");
-
-	/* XXX: "return" rv */
-}
-
 static void
 puffsop_flush(struct puffs_mount *pmp, struct puffs_flush *pf)
 {
@@ -949,6 +845,7 @@
 {
 	struct puffs_mount *pmp = this;
 	struct puffs_req *preq = (struct puffs_req *)pth;
+	int rv = 0;
 
 	/* XXX: need to send error to userspace */
 	if (pth->pth_framelen < sizeof(struct puffs_req)) {
@@ -968,7 +865,7 @@
 		break;
 	case PUFFSOP_SUSPEND:
 		DPRINTF(("dispatch: suspend\n"));
-		puffsop_suspend(pmp);
+		rv = EOPNOTSUPP;
 		break;
 	default:
 		DPRINTF(("dispatch: invalid class 0x%x\n", preq->preq_opclass));
@@ -976,7 +873,7 @@
 		break;
 	}
 
-	return 0;
+	return rv;
 }
 
 int

Index: src/sys/fs/puffs/puffs_node.c
diff -u src/sys/fs/puffs/puffs_node.c:1.14 src/sys/fs/puffs/puffs_node.c:1.15
--- src/sys/fs/puffs/puffs_node.c:1.14	Wed Sep 30 18:19:17 2009
+++ src/sys/fs/puffs/puffs_node.c	Thu Nov  5 19:42:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_node.c,v 1.14 2009/09/30 18:19:17 pooka Exp $	*/
+/*	$NetBSD: puffs_node.c,v 1.15 2009/11/05 19:42:44 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_node.c,v 1.14 2009/09/30 18:19:17 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_node.c,v 1.15 2009/11/05 19:42:44 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/hash.h>
@@ -93,7 +93,6 @@
 	error = getnewvnode(VT_PUFFS, mp, puffs_vnodeop_p, &vp);
 	if (error)
 		goto bad;
-	vp->v_vnlock = NULL;
 	vp->v_type = type;
 
 	/*

Index: src/sys/fs/puffs/puffs_sys.h
diff -u src/sys/fs/puffs/puffs_sys.h:1.71 src/sys/fs/puffs/puffs_sys.h:1.72
--- src/sys/fs/puffs/puffs_sys.h:1.71	Thu Nov  5 19:22:57 2009
+++ src/sys/fs/puffs/puffs_sys.h	Thu Nov  5 19:42:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_sys.h,v 1.71 2009/11/05 19:22:57 pooka Exp $	*/
+/*	$NetBSD: puffs_sys.h,v 1.72 2009/11/05 19:42:44 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006  Antti Kantee.  All Rights Reserved.
@@ -153,7 +153,7 @@
 
 #define PNODE_NOREFS	0x01	/* no backend reference			*/
 #define PNODE_DYING	0x02	/* NOREFS + inactive			*/
-#define PNODE_SUSPEND	0x04	/* issue all operations as FAF		*/
+#define PNODE_FAF	0x04	/* issue all operations as FAF		*/
 #define PNODE_DOINACT	0x08	/* if inactive-on-demand, call inactive */
 
 #define PNODE_METACACHE_ATIME	0x10	/* cache atime metadata */

Index: src/sys/fs/puffs/puffs_vfsops.c
diff -u src/sys/fs/puffs/puffs_vfsops.c:1.82 src/sys/fs/puffs/puffs_vfsops.c:1.83
--- src/sys/fs/puffs/puffs_vfsops.c:1.82	Wed Mar 18 10:22:42 2009
+++ src/sys/fs/puffs/puffs_vfsops.c	Thu Nov  5 19:42:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vfsops.c,v 1.82 2009/03/18 10:22:42 cegger Exp $	*/
+/*	$NetBSD: puffs_vfsops.c,v 1.83 2009/11/05 19:42:44 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.82 2009/03/18 10:22:42 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.83 2009/11/05 19:42:44 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/mount.h>
@@ -40,7 +40,6 @@
 #include <sys/vnode.h>
 #include <sys/dirent.h>
 #include <sys/kauth.h>
-#include <sys/fstrans.h>
 #include <sys/proc.h>
 #include <sys/module.h>
 
@@ -109,9 +108,6 @@
 	if (!data)
 		return EINVAL;
 
-	error = fstrans_mount(mp);
-	if (error)
-		return error;
 	args = (struct puffs_kargs *)data;
 
 	/* devel phase */
@@ -224,7 +220,6 @@
 	mp->mnt_dev_bshift = DEV_BSHIFT;
 	mp->mnt_flag &= ~MNT_LOCAL; /* we don't really know, so ... */
 	mp->mnt_data = pmp;
-	mp->mnt_iflag |= IMNT_HAS_TRANS;
 
 	pmp->pmp_status = PUFFSTAT_MOUNTING;
 	pmp->pmp_mp = mp;
@@ -267,8 +262,6 @@
 	vfs_getnewfsid(mp);
 
  out:
-	if (error)
-		fstrans_unmount(mp);
 	if (error && pmp && pmp->pmp_pnodehash)
 		kmem_free(pmp->pmp_pnodehash, BUCKETALLOC(pmp->pmp_npnodehash));
 	if (error && pmp)
@@ -365,7 +358,6 @@
 		cv_destroy(&pmp->pmp_msg_waiter_cv);
 		mutex_destroy(&pmp->pmp_lock);
 
-		fstrans_unmount(mp);
 		kmem_free(pmp->pmp_pnodehash, BUCKETALLOC(pmp->pmp_npnodehash));
 		kmem_free(pmp, sizeof(struct puffs_mount));
 		error = 0;
@@ -436,17 +428,12 @@
 }
 
 static int
-pageflush(struct mount *mp, kauth_cred_t cred, int waitfor, int suspending)
+pageflush(struct mount *mp, kauth_cred_t cred, int waitfor)
 {
 	struct puffs_node *pn;
 	struct vnode *vp, *mvp;
 	int error, rv;
 
-	KASSERT(((waitfor == MNT_WAIT) && suspending) == 0);
-	KASSERT((suspending == 0)
-	    || (fstrans_is_owner(mp)
-	      && fstrans_getstate(mp) == FSTRANS_SUSPENDING));
-
 	error = 0;
 
 	/* Allocate a marker vnode. */
@@ -489,9 +476,6 @@
 		 * dounmount(), when we are wait-flushing all the dirty
 		 * vnodes through other routes in any case.  So there,
 		 * sync() doesn't actually sync.  Happy now?
-		 *
-		 * NOTE: if we're suspending, vget() does NOT lock.
-		 * See puffs_lock() for details.
 		 */
 		rv = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK);
 		if (rv) {
@@ -503,36 +487,16 @@
 			continue;
 		}
 
-		/*
-		 * Thread information to puffs_strategy() through the
-		 * pnode flags: we want to issue the putpages operations
-		 * as FAF if we're suspending, since it's very probable
-		 * that our execution context is that of the userspace
-		 * daemon.  We can do this because:
-		 *   + we send the "going to suspend" prior to this part
-		 *   + if any of the writes fails in userspace, it's the
-		 *     file system server's problem to decide if this was a
-		 *     failed snapshot when it gets the "snapshot complete"
-		 *     notification.
-		 *   + if any of the writes fail in the kernel already, we
-		 *     immediately fail *and* notify the user server of
-		 *     failure.
-		 *
-		 * We also do FAFs if we're called from the syncer.  This
-		 * is just general optimization for trickle sync: no need
-		 * to really guarantee that the stuff ended on backing
-		 * storage.
-		 * TODO: Maybe also hint the user server of this twist?
-		 */
-		if (suspending || waitfor == MNT_LAZY) {
+		/* hmm.. is the FAF thing entirely sensible? */
+		if (waitfor == MNT_LAZY) {
 			mutex_enter(&vp->v_interlock);
-			pn->pn_stat |= PNODE_SUSPEND;
+			pn->pn_stat |= PNODE_FAF;
 			mutex_exit(&vp->v_interlock);
 		}
 		rv = VOP_FSYNC(vp, cred, waitfor, 0, 0);
-		if (suspending || waitfor == MNT_LAZY) {
+		if (waitfor == MNT_LAZY) {
 			mutex_enter(&vp->v_interlock);
-			pn->pn_stat &= ~PNODE_SUSPEND;
+			pn->pn_stat &= ~PNODE_FAF;
 			mutex_exit(&vp->v_interlock);
 		}
 		if (rv)
@@ -553,7 +517,7 @@
 	struct puffs_mount *pmp = MPTOPUFFSMP(mp);
 	int error, rv;
 
-	error = pageflush(mp, cred, waitfor, 0);
+	error = pageflush(mp, cred, waitfor);
 
 	/* sync fs */
 	PUFFS_MSG_ALLOC(vfs, sync);
@@ -732,79 +696,6 @@
 	return EOPNOTSUPP;
 }
 
-int
-puffs_vfsop_suspendctl(struct mount *mp, int cmd)
-{
-	PUFFS_MSG_VARS(vfs, suspend);
-	struct puffs_mount *pmp;
-	int error;
-
-	pmp = MPTOPUFFSMP(mp);
-	switch (cmd) {
-	case SUSPEND_SUSPEND:
-		DPRINTF(("puffs_suspendctl: suspending\n"));
-		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDING)) != 0)
-			break;
-		PUFFS_MSG_ALLOC(vfs, suspend);
-		puffs_msg_setfaf(park_suspend);
-		suspend_msg->pvfsr_status = PUFFS_SUSPEND_START;
-		puffs_msg_setinfo(park_suspend, PUFFSOP_VFS,
-		    PUFFS_VFS_SUSPEND, NULL);
-
-		puffs_msg_enqueue(pmp, park_suspend);
-		PUFFS_MSG_RELEASE(suspend);
-
-		error = pageflush(mp, FSCRED, 0, 1);
-		if (error == 0)
-			error = fstrans_setstate(mp, FSTRANS_SUSPENDED);
-
-		if (error != 0) {
-			PUFFS_MSG_ALLOC(vfs, suspend);
-			puffs_msg_setfaf(park_suspend);
-			suspend_msg->pvfsr_status = PUFFS_SUSPEND_ERROR;
-			puffs_msg_setinfo(park_suspend, PUFFSOP_VFS,
-			    PUFFS_VFS_SUSPEND, NULL);
-
-			puffs_msg_enqueue(pmp, park_suspend);
-			PUFFS_MSG_RELEASE(suspend);
-			(void) fstrans_setstate(mp, FSTRANS_NORMAL);
-			break;
-		}
-
-		PUFFS_MSG_ALLOC(vfs, suspend);
-		puffs_msg_setfaf(park_suspend);
-		suspend_msg->pvfsr_status = PUFFS_SUSPEND_SUSPENDED;
-		puffs_msg_setinfo(park_suspend, PUFFSOP_VFS,
-		    PUFFS_VFS_SUSPEND, NULL);
-
-		puffs_msg_enqueue(pmp, park_suspend);
-		PUFFS_MSG_RELEASE(suspend);
-
-		break;
-
-	case SUSPEND_RESUME:
-		DPRINTF(("puffs_suspendctl: resume\n"));
-		error = 0;
-		(void) fstrans_setstate(mp, FSTRANS_NORMAL);
-		PUFFS_MSG_ALLOC(vfs, suspend);
-		puffs_msg_setfaf(park_suspend);
-		suspend_msg->pvfsr_status = PUFFS_SUSPEND_RESUME;
-		puffs_msg_setinfo(park_suspend, PUFFSOP_VFS,
-		    PUFFS_VFS_SUSPEND, NULL);
-
-		puffs_msg_enqueue(pmp, park_suspend);
-		PUFFS_MSG_RELEASE(suspend);
-		break;
-
-	default:
-		error = EINVAL;
-		break;
-	}
-
-	DPRINTF(("puffs_suspendctl: return %d\n", error));
-	return error;
-}
-
 const struct vnodeopv_desc * const puffs_vnodeopv_descs[] = {
 	&puffs_vnodeop_opv_desc,
 	&puffs_specop_opv_desc,
@@ -832,7 +723,7 @@
 	NULL,				/* mountroot	*/
 	puffs_vfsop_snapshot,		/* snapshot	*/
 	vfs_stdextattrctl,		/* extattrctl	*/
-	puffs_vfsop_suspendctl,		/* suspendctl	*/
+	(void *)eopnotsupp,		/* suspendctl	*/
 	genfs_renamelock_enter,
 	genfs_renamelock_exit,
 	(void *)eopnotsupp,

Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.137 src/sys/fs/puffs/puffs_vnops.c:1.138
--- src/sys/fs/puffs/puffs_vnops.c:1.137	Thu Nov  5 19:22:57 2009
+++ src/sys/fs/puffs/puffs_vnops.c	Thu Nov  5 19:42:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vnops.c,v 1.137 2009/11/05 19:22:57 pooka Exp $	*/
+/*	$NetBSD: puffs_vnops.c,v 1.138 2009/11/05 19:42:44 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,11 +30,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.137 2009/11/05 19:22:57 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.138 2009/11/05 19:42:44 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
-#include <sys/fstrans.h>
 #include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/namei.h>
@@ -91,16 +90,9 @@
 
 int	puffs_vnop_checkop(void *);
 
-
-#if 0
-#define puffs_lock genfs_lock
-#define puffs_unlock genfs_unlock
-#define puffs_islocked genfs_islocked
-#else
-int puffs_vnop_lock(void *);
-int puffs_vnop_unlock(void *);
-int puffs_vnop_islocked(void *);
-#endif
+#define puffs_vnop_lock genfs_lock
+#define puffs_vnop_unlock genfs_unlock
+#define puffs_vnop_islocked genfs_islocked
 
 int (**puffs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc puffs_vnodeop_entries[] = {
@@ -2198,7 +2190,7 @@
 		mutex_enter(&vp->v_interlock);
 		if (vp->v_iflag & VI_XLOCK)
 			dofaf = 1;
-		if (pn->pn_stat & PNODE_SUSPEND)
+		if (pn->pn_stat & PNODE_FAF)
 			dofaf = 1;
 		mutex_exit(&vp->v_interlock);
 	}
@@ -2557,77 +2549,6 @@
 	return error;
 }
 
-int
-puffs_vnop_lock(void *v)
-{
-	struct vop_lock_args /* {
-		struct vnode *a_vp;
-		int a_flags;
-	} */ *ap = v;
-	struct vnode *vp = ap->a_vp;
-	struct mount *mp = vp->v_mount;
-	int flags = ap->a_flags;
-
-#if 0
-	DPRINTF(("puffs_lock: lock %p, args 0x%x\n", vp, ap->a_flags));
-#endif
-
-	if (flags & LK_INTERLOCK) {
-		mutex_exit(&vp->v_interlock);
-		flags &= ~LK_INTERLOCK;
-	}
-
-	/*
-	 * XXX: this avoids deadlocking when we're suspending.
-	 * e.g. some ops holding the vnode lock might be blocked for
-	 * the vfs transaction lock so we'd deadlock.
-	 *
-	 * Now once again this is skating on the thin ice of modern life,
-	 * since we are breaking the consistency guarantee provided
-	 * _to the user server_ by vnode locking.  Hopefully this will
-	 * get fixed soon enough by getting rid of the dependency on
-	 * vnode locks alltogether.
-	 */
-	if (fstrans_is_owner(mp) && fstrans_getstate(mp) == FSTRANS_SUSPENDING){
-		return 0;
-	}
-
-	return vlockmgr(&vp->v_lock, flags);
-}
-
-int
-puffs_vnop_unlock(void *v)
-{
-	struct vop_unlock_args /* {
-		struct vnode *a_vp;
-		int a_flags;
-	} */ *ap = v;
-	struct vnode *vp = ap->a_vp;
-	struct mount *mp = vp->v_mount;
-
-#if 0
-	DPRINTF(("puffs_unlock: lock %p, args 0x%x\n", vp, ap->a_flags));
-#endif
-
-	/* XXX: see puffs_lock() */
-	if (fstrans_is_owner(mp) && fstrans_getstate(mp) == FSTRANS_SUSPENDING){
-		return 0;
-	}
-
-	return vlockmgr(&vp->v_lock, ap->a_flags | LK_RELEASE);
-}
-
-int
-puffs_vnop_islocked(void *v)
-{
-	struct vop_islocked_args *ap = v;
-	int rv;
-
-	rv = vlockstatus(&ap->a_vp->v_lock);
-	return rv;
-}
-
-
 /*
  * spec & fifo.  These call the miscfs spec and fifo vectors, but issue
  * FAF update information for the puffs node first.

Reply via email to