From 7e67e1e73230219ea55118f095cc1800faf2c534 Mon Sep 17 00:00:00 2001 From: dfr Date: Mon, 3 Mar 1997 18:01:01 +0000 Subject: This is the current draft of my filesystem manpages. Some files are incomplete and some are just placeholders but I wanted to try to get something at least into 2.2 on the grounds that what I have is a lot better than nothing. I also wanted to commit something which documents the interfaces in 2.2 before I start updating the documentation for 3.0. This is a definite 2.2 candidate and is also relavent to 2.1 if people still care about that branch. --- share/man/man9/VOP_LOCK.9 | 129 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 share/man/man9/VOP_LOCK.9 (limited to 'share/man/man9/VOP_LOCK.9') diff --git a/share/man/man9/VOP_LOCK.9 b/share/man/man9/VOP_LOCK.9 new file mode 100644 index 0000000..03cf51e --- /dev/null +++ b/share/man/man9/VOP_LOCK.9 @@ -0,0 +1,129 @@ +.\" -*- nroff -*- +.\" +.\" Copyright (c) 1996 Doug Rabson +.\" +.\" All rights reserved. +.\" +.\" This program is free software. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $Id$ +.\" +.Dd July 24, 1996 +.Os +.Dt VOP_LOCK 9 +.Sh NAME +.Nm VOP_LOCK , +.Nm VOP_UNLOCK , +.Nm VOP_ISLOCKED +.Nd serialize access to a vnode +.Sh SYNOPSIS +.Fd #include +.Ft int +.Fn VOP_LOCK "struct vnode *vp" +.Ft int +.Fn VOP_UNLOCK "struct vnode *vp" +.Ft int +.Fn VOP_ISLOCKED "struct vnode *vp" +.Sh DESCRIPTION +.Pp +The arguments are: +.Bl -tag -width vp +.It Ar vp +the vnode being locked or unlocked +.El +.Pp +These calls are used to serialise access to the filesystem, for +instance to prevent two writes to the same file from happening at the +same time. +.Sh RETURN VALUES +Zero is returned on success, otherwise an error is returned. +.Sh PSEUDOCODE +.Bd -literal +struct vopnode { + int von_flag; + /* + * Other filesystem specific data. + */ + ...; +}; +#define VON_LOCKED 1 +#define VON_WANTED 2 +#define VTOVON(vp) ((struct vopnode *) (vp)->v_data) + +int +vop_lock(struct vnode *vp) +{ + struct vopnode* vop; + +start: + while (vp->v_flag & VXLOCK) { + vp->v_flag |= VXWANT; + tsleep((caddr_t)vp, PINOD, "voplk1", 0); + } + if (vp->v_tag == VT_NON) + return ENOENT; + + vop = VTOVON(vp); + if (vop->von_flag & VON_LOCKED) { + vop->von_flag |= VON_WANTED; + tsleep((caddr_t) vop, PINOD, "voplk2", 0); + goto start; + } + + vop->von_flag |= VON_LOCKED; + + return 0; +} + +int +vop_unlock(struct vnode *vp) +{ + struct vopnode *vop = VTOVON(vp); + + if ((vop->von_flag & VON_LOCKED) == 0) { + panic("vop_unlock not locked"); + } + vop->von_flag &= ~VON_LOCKED; + if (vop->von_flag & VON_WANTED) { + vop->von_flag &= ~VON_WANTED; + wakeup((caddr_t) vop); + } + + return 0; +} + +int +vop_islocked(struct vnode *vp) +{ + struct vopnode *vop = VTOVON(vp); + + if (vop->von_flag & VON_LOCKED) + return 1; + else + return 0; +} +.Ed +.Sh SEE ALSO +.Xr vnode 9 +.Sh AUTHORS +This man page was written by Doug Rabson. -- cgit v1.1