19b8d2ca1SEirik Nygaard.\" 29b8d2ca1SEirik Nygaard.\" Copyright (C) 2002 Chad David <davidc@acns.ab.ca>. All rights reserved. 39b8d2ca1SEirik Nygaard.\" 49b8d2ca1SEirik Nygaard.\" Redistribution and use in source and binary forms, with or without 59b8d2ca1SEirik Nygaard.\" modification, are permitted provided that the following conditions 69b8d2ca1SEirik Nygaard.\" are met: 79b8d2ca1SEirik Nygaard.\" 1. Redistributions of source code must retain the above copyright 89b8d2ca1SEirik Nygaard.\" notice(s), this list of conditions and the following disclaimer as 99b8d2ca1SEirik Nygaard.\" the first lines of this file unmodified other than the possible 109b8d2ca1SEirik Nygaard.\" addition of one or more copyright notices. 119b8d2ca1SEirik Nygaard.\" 2. Redistributions in binary form must reproduce the above copyright 129b8d2ca1SEirik Nygaard.\" notice(s), this list of conditions and the following disclaimer in the 139b8d2ca1SEirik Nygaard.\" documentation and/or other materials provided with the distribution. 149b8d2ca1SEirik Nygaard.\" 159b8d2ca1SEirik Nygaard.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 169b8d2ca1SEirik Nygaard.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 179b8d2ca1SEirik Nygaard.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 189b8d2ca1SEirik Nygaard.\" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 199b8d2ca1SEirik Nygaard.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 209b8d2ca1SEirik Nygaard.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 219b8d2ca1SEirik Nygaard.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 229b8d2ca1SEirik Nygaard.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 239b8d2ca1SEirik Nygaard.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 249b8d2ca1SEirik Nygaard.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 259b8d2ca1SEirik Nygaard.\" DAMAGE. 269b8d2ca1SEirik Nygaard.\" 279b8d2ca1SEirik Nygaard.\" $FreeBSD: src/share/man/man9/lock.9,v 1.11 2003/09/08 19:57:21 ru Exp $ 289b8d2ca1SEirik Nygaard.\" 29*deff95cbSSascha Wildner.Dd April 10, 2010 309b8d2ca1SEirik Nygaard.Dt LOCK 9 319b8d2ca1SEirik Nygaard.Os 329b8d2ca1SEirik Nygaard.Sh NAME 339b8d2ca1SEirik Nygaard.Nm lockinit , 349b8d2ca1SEirik Nygaard.Nm lockcount , 359b8d2ca1SEirik Nygaard.Nm lockmgr , 369b8d2ca1SEirik Nygaard.Nm lockstatus , 379b8d2ca1SEirik Nygaard.Nm lockmgr_printinfo 389b8d2ca1SEirik Nygaard.Nd "lockmgr family of functions" 399b8d2ca1SEirik Nygaard.Sh SYNOPSIS 409b8d2ca1SEirik Nygaard.In sys/types.h 419b8d2ca1SEirik Nygaard.In sys/lock.h 429b8d2ca1SEirik Nygaard.Ft void 43b13563f4SSascha Wildner.Fn lockinit "struct lock *lkp" "char *wmesg" "int timo" "int flags" 449b8d2ca1SEirik Nygaard.Ft int 459b8d2ca1SEirik Nygaard.Fn lockcount "struct lock *lkp" 469b8d2ca1SEirik Nygaard.Ft int 47dd86bdf4SHiten Pandya.Fn lockcountnb "struct lock *lkp" 48dd86bdf4SHiten Pandya.Ft int 49b13563f4SSascha Wildner.Fn lockmgr "struct lock *lkp" "u_int flags" 509b8d2ca1SEirik Nygaard.Ft int 519b8d2ca1SEirik Nygaard.Fn lockstatus "struct lock *lkp" "struct thread *td" 529b8d2ca1SEirik Nygaard.Ft void 539b8d2ca1SEirik Nygaard.Fn lockmgr_printinfo "struct lock *lkp" 549b8d2ca1SEirik Nygaard.Sh DESCRIPTION 559b8d2ca1SEirik NygaardThe 569b8d2ca1SEirik Nygaard.Fn lockinit 579b8d2ca1SEirik Nygaardfunction is used to initialize a lock. 589b8d2ca1SEirik NygaardIt must be called before any operation can be performed on a lock. 599b8d2ca1SEirik NygaardIts arguments are: 609b8d2ca1SEirik Nygaard.Bl -tag -width ".Fa wmesg" 619b8d2ca1SEirik Nygaard.It Fa lkp 629b8d2ca1SEirik NygaardA pointer to the lock to initialize. 639b8d2ca1SEirik Nygaard.It Fa wmesg 649b8d2ca1SEirik NygaardThe lock message. 659b8d2ca1SEirik NygaardThis is used for both debugging output and 669b8d2ca1SEirik Nygaard.Xr tsleep 9 . 679b8d2ca1SEirik Nygaard.It Fa timo 689b8d2ca1SEirik NygaardThe timeout value passed to 699b8d2ca1SEirik Nygaard.Xr tsleep 9 . 709b8d2ca1SEirik Nygaard.It Fa flags 719b8d2ca1SEirik NygaardThe flags the lock is to be initialized with. 723142490eSSascha Wildner.Bl -tag -width ".Dv LK_CANRECURSE" 739b8d2ca1SEirik Nygaard.It Dv LK_NOWAIT 749b8d2ca1SEirik NygaardDo not sleep while acquiring the lock. 759b8d2ca1SEirik Nygaard.It Dv LK_SLEEPFAIL 769b8d2ca1SEirik NygaardFail after a sleep. 779b8d2ca1SEirik Nygaard.It Dv LK_CANRECURSE 789b8d2ca1SEirik NygaardAllow recursive exclusive locks. 799b8d2ca1SEirik Nygaard.It Dv LK_TIMELOCK 809b8d2ca1SEirik NygaardUse 819b8d2ca1SEirik Nygaard.Fa timo 829b8d2ca1SEirik Nygaardduring a sleep; otherwise, 0 is used. 839b8d2ca1SEirik Nygaard.El 849b8d2ca1SEirik Nygaard.El 859b8d2ca1SEirik Nygaard.Pp 869b8d2ca1SEirik NygaardThe 879b8d2ca1SEirik Nygaard.Fn lockcount 889b8d2ca1SEirik Nygaardfunction returns a count of the number of exclusive locks and shared locks 899b8d2ca1SEirik Nygaardheld against the lock 909b8d2ca1SEirik Nygaard.Fa lkp . 919b8d2ca1SEirik Nygaard.Pp 929b8d2ca1SEirik NygaardThe 93dd86bdf4SHiten Pandya.Fn lockcountnb 94dd86bdf4SHiten Pandyafunction is a non-blocking counter-part of 95dd86bdf4SHiten Pandya.Fn lockcount . 96dd86bdf4SHiten Pandyawhich, can be safely used in assertion statements e.g. a 97dd86bdf4SHiten Pandya.Xr KASSERT 9 . 98dd86bdf4SHiten Pandya.Pp 99dd86bdf4SHiten PandyaThe 1009b8d2ca1SEirik Nygaard.Fn lockmgr 1019b8d2ca1SEirik Nygaardfunction handles general locking functionality within the kernel, including 1029b8d2ca1SEirik Nygaardsupport for shared and exclusive locks, and recursion. 1039b8d2ca1SEirik Nygaard.Fn lockmgr 1049b8d2ca1SEirik Nygaardis also able to upgrade and downgrade locks. 1059b8d2ca1SEirik Nygaard.Pp 1069b8d2ca1SEirik NygaardIts arguments are: 1078f1a379eSSascha Wildner.Bl -tag -width ".Fa flags" 1089b8d2ca1SEirik Nygaard.It Fa lkp 1099b8d2ca1SEirik NygaardA pointer to the lock to manipulate. 1109b8d2ca1SEirik Nygaard.It Fa flags 1119b8d2ca1SEirik NygaardFlags indicating what action is to be taken. 1129b8d2ca1SEirik Nygaard.Bl -tag -width ".Dv LK_EXCLUPGRADE" 1139b8d2ca1SEirik Nygaard.It Dv LK_SHARED 1149b8d2ca1SEirik NygaardAcquire a shared lock. 1159b8d2ca1SEirik NygaardIf an exclusive lock is currently held, it will be downgraded. 1169b8d2ca1SEirik Nygaard.It Dv LK_EXCLUSIVE 1179b8d2ca1SEirik NygaardAcquire an exclusive lock. 1189b8d2ca1SEirik NygaardIf an exclusive lock is already held, and 1199b8d2ca1SEirik Nygaard.Dv LK_CANRECURSE 1209b8d2ca1SEirik Nygaardis not set, the system will 1219b8d2ca1SEirik Nygaard.Xr panic 9 . 1229b8d2ca1SEirik Nygaard.It Dv LK_DOWNGRADE 1239b8d2ca1SEirik NygaardDowngrade exclusive lock to a shared lock. 1249b8d2ca1SEirik NygaardDowngrading a shared lock is not permitted. 1259b8d2ca1SEirik NygaardIf an exclusive lock has been recursed, all references will be downgraded. 1269b8d2ca1SEirik Nygaard.It Dv LK_EXCLUPGRADE 1279b8d2ca1SEirik NygaardUpgrade a shared lock to an exclusive lock. 1289b8d2ca1SEirik NygaardFails with 1299b8d2ca1SEirik Nygaard.Er EBUSY 1309b8d2ca1SEirik Nygaardif there is someone ahead of you in line waiting for an upgrade. 1319b8d2ca1SEirik NygaardIf this call fails, the shared lock is lost. 1329b8d2ca1SEirik NygaardAttempts to upgrade an exclusive lock will cause a 1339b8d2ca1SEirik Nygaard.Xr panic 9 . 1349b8d2ca1SEirik Nygaard.It Dv LK_UPGRADE 1359b8d2ca1SEirik NygaardUpgrade a shared lock to an exclusive lock. 1369b8d2ca1SEirik NygaardIf this call fails, the shared lock is lost. 1379b8d2ca1SEirik NygaardAttempts to upgrade an exclusive lock will cause a 1389b8d2ca1SEirik Nygaard.Xr panic 9 . 1399b8d2ca1SEirik Nygaard.It Dv LK_RELEASE 1409b8d2ca1SEirik NygaardRelease the lock. 1419b8d2ca1SEirik NygaardReleasing a lock that is not held can cause a 1429b8d2ca1SEirik Nygaard.Xr panic 9 . 1439b8d2ca1SEirik Nygaard.It Dv LK_SLEEPFAIL 1449b8d2ca1SEirik NygaardFail if operation has slept. 1459b8d2ca1SEirik Nygaard.It Dv LK_NOWAIT 1469b8d2ca1SEirik NygaardDo not allow the call to sleep. 1479b8d2ca1SEirik NygaardThis can be used to test the lock. 1489b8d2ca1SEirik Nygaard.It Dv LK_CANRECURSE 1499b8d2ca1SEirik NygaardAllow recursion on an exclusive lock. 1509b8d2ca1SEirik NygaardFor every lock there must be a release. 1519b8d2ca1SEirik Nygaard.El 1529b8d2ca1SEirik Nygaard.El 1539b8d2ca1SEirik Nygaard.Pp 1549b8d2ca1SEirik NygaardThe 1559b8d2ca1SEirik Nygaard.Fn lockstatus 1569b8d2ca1SEirik Nygaardfunction returns the status of the lock in relation to the 1579b8d2ca1SEirik Nygaard.Vt thread 1589b8d2ca1SEirik Nygaardpassed to it. 1599b8d2ca1SEirik NygaardNote that if 1609b8d2ca1SEirik Nygaard.Fa td 1619b8d2ca1SEirik Nygaardis 1629b8d2ca1SEirik Nygaard.Dv NULL 1639b8d2ca1SEirik Nygaardand an exclusive lock is held, 1649b8d2ca1SEirik Nygaard.Dv LK_EXCLUSIVE 1659b8d2ca1SEirik Nygaardwill be returned. 1669b8d2ca1SEirik Nygaard.Pp 1679b8d2ca1SEirik NygaardThe 1689b8d2ca1SEirik Nygaard.Fn lockmgr_printinfo 1699b8d2ca1SEirik Nygaardfunction prints debugging information about the lock. 1709b8d2ca1SEirik NygaardIt is used primarily by 1719b8d2ca1SEirik Nygaard.Xr VOP_PRINT 9 1729b8d2ca1SEirik Nygaardfunctions. 1739b8d2ca1SEirik Nygaard.Sh RETURN VALUES 1749b8d2ca1SEirik NygaardThe 1759b8d2ca1SEirik Nygaard.Fn lockcount 1769b8d2ca1SEirik Nygaardfunction returns an integer greater than or equal to zero. 1779b8d2ca1SEirik Nygaard.Pp 1789b8d2ca1SEirik NygaardThe 1799b8d2ca1SEirik Nygaard.Fn lockmgr 1809b8d2ca1SEirik Nygaardfunction returns 0 on success and non-zero on failure. 1819b8d2ca1SEirik Nygaard.Pp 1829b8d2ca1SEirik NygaardThe 1839b8d2ca1SEirik Nygaard.Fn lockstatus 1849b8d2ca1SEirik Nygaardfunction returns: 1859b8d2ca1SEirik Nygaard.Bl -tag -width ".Dv LK_EXCLUSIVE" 1869b8d2ca1SEirik Nygaard.It Dv LK_EXCLUSIVE 1879b8d2ca1SEirik NygaardAn exclusive lock is held by the thread 1889b8d2ca1SEirik Nygaard.Fa td . 1899b8d2ca1SEirik Nygaard.It Dv LK_EXCLOTHER 1909b8d2ca1SEirik NygaardAn exclusive lock is held by someone other than the thread 1919b8d2ca1SEirik Nygaard.Fa td . 1929b8d2ca1SEirik Nygaard.It Dv LK_SHARED 1939b8d2ca1SEirik NygaardA shared lock is held. 1949b8d2ca1SEirik Nygaard.It Li 0 1959b8d2ca1SEirik NygaardThe lock is not held by anyone. 1969b8d2ca1SEirik Nygaard.El 197*deff95cbSSascha Wildner.Sh FILES 198*deff95cbSSascha WildnerThe lock manager itself is implemented within the file 199*deff95cbSSascha Wildner.Pa /sys/kern/kern_lock.c . 200*deff95cbSSascha WildnerData structures and function prototypes for the lock manager are in 201*deff95cbSSascha Wildner.Pa /sys/sys/lock.h . 2029b8d2ca1SEirik Nygaard.Sh ERRORS 2039b8d2ca1SEirik Nygaard.Fn lockmgr 2049b8d2ca1SEirik Nygaardfails if: 2059b8d2ca1SEirik Nygaard.Bl -tag -width Er 2069b8d2ca1SEirik Nygaard.It Bq Er EBUSY 2079b8d2ca1SEirik Nygaard.Dv LK_NOWAIT 2089b8d2ca1SEirik Nygaardwas set, and a sleep would have been required. 2099b8d2ca1SEirik Nygaard.It Bq Er ENOLCK 2109b8d2ca1SEirik Nygaard.Dv LK_SLEEPFAIL 2119b8d2ca1SEirik Nygaardwas set and 2129b8d2ca1SEirik Nygaard.Fn lockmgr 2139b8d2ca1SEirik Nygaarddid sleep. 2149b8d2ca1SEirik Nygaard.It Bq Er EINTR 2159b8d2ca1SEirik Nygaard.Dv PCATCH 2169b8d2ca1SEirik Nygaardwas set in the lock priority, and a signal was delivered during a sleep. 2179b8d2ca1SEirik NygaardNote the 2189b8d2ca1SEirik Nygaard.Er ERESTART 2199b8d2ca1SEirik Nygaarderror below. 2209b8d2ca1SEirik Nygaard.It Bq Er ERESTART 2219b8d2ca1SEirik Nygaard.Dv PCATCH 2229b8d2ca1SEirik Nygaardwas set in the lock priority, a signal was delivered during a sleep, 2239b8d2ca1SEirik Nygaardand the system call is to be restarted. 2249b8d2ca1SEirik Nygaard.It Bq Er EWOULDBLOCK 2259b8d2ca1SEirik Nygaarda non-zero timeout was given, and the timeout expired. 2269b8d2ca1SEirik Nygaard.El 2279b8d2ca1SEirik Nygaard.Sh LOCKS 2289b8d2ca1SEirik NygaardUpgrade attempts that fail result in the loss of the lock that 2299b8d2ca1SEirik Nygaardis currently held. 2309b8d2ca1SEirik NygaardAlso, it is invalid to upgrade an 2319b8d2ca1SEirik Nygaardexclusive lock, and a 2329b8d2ca1SEirik Nygaard.Xr panic 9 2339b8d2ca1SEirik Nygaardwill be the result of trying. 2349b8d2ca1SEirik Nygaard.Sh SEE ALSO 2359b8d2ca1SEirik Nygaard.Xr panic 9 , 2369b8d2ca1SEirik Nygaard.Xr tsleep 9 , 2379b8d2ca1SEirik Nygaard.Xr VOP_PRINT 9 238*deff95cbSSascha Wildner.Sh HISTORY 239*deff95cbSSascha WildnerThe lock manager appeared in 240*deff95cbSSascha Wildner.Dx 1.0 . 241*deff95cbSSascha Wildner.Pp 242*deff95cbSSascha WildnerThe lock manager API first appeared in 243*deff95cbSSascha Wildner.Bx 4.4 lite2 . 2449b8d2ca1SEirik Nygaard.Sh AUTHORS 2459b8d2ca1SEirik NygaardThis man page was written by 2469b8d2ca1SEirik Nygaard.An Chad David Aq davidc@acns.ab.ca . 247