xref: /dflybsd-src/share/man/man9/lock.9 (revision deff95cb9689e092bc08ed53878ea432387b690c)
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