xref: /freebsd/share/man/man9/alq.9 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
1dab12c8eSHiten Pandya.\"
297ad30b9SHiten Pandya.\" Copyright (c) 2003 Hiten Pandya <hmp@FreeBSD.org>
37d11e744SLawrence Stewart.\" Copyright (c) 2009-2010 The FreeBSD Foundation
4dab12c8eSHiten Pandya.\" All rights reserved.
5dab12c8eSHiten Pandya.\"
67d11e744SLawrence Stewart.\" Portions of this software were developed at the Centre for Advanced
77d11e744SLawrence Stewart.\" Internet Architectures, Swinburne University of Technology, Melbourne,
87d11e744SLawrence Stewart.\" Australia by Lawrence Stewart under sponsorship from the FreeBSD
97d11e744SLawrence Stewart.\" Foundation.
107d11e744SLawrence Stewart.\"
11dab12c8eSHiten Pandya.\" Redistribution and use in source and binary forms, with or without
12dab12c8eSHiten Pandya.\" modification, are permitted provided that the following conditions
13dab12c8eSHiten Pandya.\" are met:
14dab12c8eSHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
15dab12c8eSHiten Pandya.\"    notice, this list of conditions, and the following disclaimer,
16dab12c8eSHiten Pandya.\"    without modification, immediately at the beginning of the file.
17dab12c8eSHiten Pandya.\" 2. The name of the author may not be used to endorse or promote products
18dab12c8eSHiten Pandya.\"    derived from this software without specific prior written permission.
19dab12c8eSHiten Pandya.\"
20dab12c8eSHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21dab12c8eSHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22dab12c8eSHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23dab12c8eSHiten Pandya.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
24dab12c8eSHiten Pandya.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25dab12c8eSHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26dab12c8eSHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27dab12c8eSHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28dab12c8eSHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29dab12c8eSHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30dab12c8eSHiten Pandya.\" SUCH DAMAGE.
31dab12c8eSHiten Pandya.\"
327d11e744SLawrence Stewart.Dd April 26, 2010
33dab12c8eSHiten Pandya.Dt ALQ 9
34dab12c8eSHiten Pandya.Os
35dab12c8eSHiten Pandya.Sh NAME
36dab12c8eSHiten Pandya.Nm alq ,
377d11e744SLawrence Stewart.Nm alq_open_flags ,
38dab12c8eSHiten Pandya.Nm alq_open ,
397d11e744SLawrence Stewart.Nm alq_writen ,
40dab12c8eSHiten Pandya.Nm alq_write ,
41dab12c8eSHiten Pandya.Nm alq_flush ,
42dab12c8eSHiten Pandya.Nm alq_close ,
437d11e744SLawrence Stewart.Nm alq_getn ,
44dab12c8eSHiten Pandya.Nm alq_get ,
457d11e744SLawrence Stewart.Nm alq_post_flags ,
46dab12c8eSHiten Pandya.Nm alq_post
47dab12c8eSHiten Pandya.Nd Asynchronous Logging Queues
48dab12c8eSHiten Pandya.Sh SYNOPSIS
49dab12c8eSHiten Pandya.In sys/alq.h
50dab12c8eSHiten Pandya.Ft int
517d11e744SLawrence Stewart.Fo alq_open_flags
527d11e744SLawrence Stewart.Fa "struct alq **app"
537d11e744SLawrence Stewart.Fa "const char *file"
547d11e744SLawrence Stewart.Fa "struct ucred *cred"
557d11e744SLawrence Stewart.Fa "int cmode"
567d11e744SLawrence Stewart.Fa "int size"
577d11e744SLawrence Stewart.Fa "int flags"
587d11e744SLawrence Stewart.Fc
597d11e744SLawrence Stewart.Ft int
602f6e95a1SJoseph Koshy.Fo alq_open
612f6e95a1SJoseph Koshy.Fa "struct alq **app"
622f6e95a1SJoseph Koshy.Fa "const char *file"
632f6e95a1SJoseph Koshy.Fa "struct ucred *cred"
64e551d452SRobert Watson.Fa "int cmode"
652f6e95a1SJoseph Koshy.Fa "int size"
662f6e95a1SJoseph Koshy.Fa "int count"
672f6e95a1SJoseph Koshy.Fc
68dab12c8eSHiten Pandya.Ft int
697d11e744SLawrence Stewart.Fn alq_writen "struct alq *alq" "void *data" "int len" "int flags"
707d11e744SLawrence Stewart.Ft int
717d11e744SLawrence Stewart.Fn alq_write "struct alq *alq" "void *data" "int flags"
72dab12c8eSHiten Pandya.Ft void
73dab12c8eSHiten Pandya.Fn alq_flush "struct alq *alq"
74dab12c8eSHiten Pandya.Ft void
75dab12c8eSHiten Pandya.Fn alq_close "struct alq *alq"
76dab12c8eSHiten Pandya.Ft struct ale *
777d11e744SLawrence Stewart.Fn alq_getn "struct alq *alq" "int len" "int flags"
787d11e744SLawrence Stewart.Ft struct ale *
797d11e744SLawrence Stewart.Fn alq_get "struct alq *alq" "int flags"
807d11e744SLawrence Stewart.Ft void
817d11e744SLawrence Stewart.Fn alq_post_flags "struct alq *alq" "struct ale *ale" "int flags"
82dab12c8eSHiten Pandya.Ft void
83dab12c8eSHiten Pandya.Fn alq_post "struct alq *alq" "struct ale *ale"
84dab12c8eSHiten Pandya.Sh DESCRIPTION
85dab12c8eSHiten PandyaThe
86dab12c8eSHiten Pandya.Nm
877d11e744SLawrence Stewartfacility provides an asynchronous fixed or variable length recording
88dab12c8eSHiten Pandyamechanism, known as Asynchronous Logging Queues.
89dab12c8eSHiten PandyaIt can record to any
90dab12c8eSHiten Pandya.Xr vnode 9 ,
91dab12c8eSHiten Pandyathus providing the ability to journal logs to character
92dab12c8eSHiten Pandyadevices as well as regular files.
93dab12c8eSHiten PandyaAll functions accept a
94dab12c8eSHiten Pandya.Vt "struct alq"
95dab12c8eSHiten Pandyaargument, which is an opaque type that maintains state information
96dab12c8eSHiten Pandyafor an Asynchronous Logging Queue.
97dab12c8eSHiten PandyaThe logging facility runs in a separate kernel thread, which services
98dab12c8eSHiten Pandyaall log entry requests.
99dab12c8eSHiten Pandya.Pp
100dab12c8eSHiten PandyaAn
101db79bbffSRuslan Ermilov.Dq asynchronous log entry
102dab12c8eSHiten Pandyais defined as
103dab12c8eSHiten Pandya.Vt "struct ale" ,
104dab12c8eSHiten Pandyawhich has the following members:
105db79bbffSRuslan Ermilov.Bd -literal -offset indent
106dab12c8eSHiten Pandyastruct ale {
1077d11e744SLawrence Stewart	intptr_t	ae_bytesused;	/* # bytes written to ALE. */
1087d11e744SLawrence Stewart	char		*ae_data;	/* Write ptr. */
1097d11e744SLawrence Stewart	int		ae_pad;		/* Unused, compat. */
110dab12c8eSHiten Pandya};
111dab12c8eSHiten Pandya.Ed
112dab12c8eSHiten Pandya.Pp
1137d11e744SLawrence StewartAn
114dab12c8eSHiten Pandya.Nm
1157d11e744SLawrence Stewartcan be created in either fixed or variable length mode.
1167d11e744SLawrence StewartA variable length
1177d11e744SLawrence Stewart.Nm
1187d11e744SLawrence Stewartaccommodates writes of varying length using
1197d11e744SLawrence Stewart.Fn alq_writen
1207d11e744SLawrence Stewartand
1217d11e744SLawrence Stewart.Fn alq_getn .
1227d11e744SLawrence StewartA fixed length
1237d11e744SLawrence Stewart.Nm
1247d11e744SLawrence Stewartaccommodates a fixed number of writes using
1257d11e744SLawrence Stewart.Fn alq_write
1267d11e744SLawrence Stewartand
1277d11e744SLawrence Stewart.Fn alq_get ,
1287d11e744SLawrence Stewarteach of fixed size (set at queue creation time).
1297d11e744SLawrence StewartFixed length mode is deprecated in favour of variable length mode.
130dab12c8eSHiten Pandya.Sh FUNCTIONS
131dab12c8eSHiten PandyaThe
1327d11e744SLawrence Stewart.Fn alq_open_flags
1337d11e744SLawrence Stewartfunction creates a new variable length asynchronous logging queue.
134dab12c8eSHiten PandyaThe
135dab12c8eSHiten Pandya.Fa file
1367d11e744SLawrence Stewartargument is the name of the file to open for logging.
1377d11e744SLawrence StewartIf the file does not yet exist,
138e551d452SRobert Watson.Fn alq_open
139e551d452SRobert Watsonwill attempt to create it.
140e551d452SRobert WatsonThe
141e551d452SRobert Watson.Fa cmode
142e551d452SRobert Watsonargument will be passed to
143e551d452SRobert Watson.Fn vn_open
144e551d452SRobert Watsonas the requested creation mode, to be used if the file will be created by
145e551d452SRobert Watson.Fn alq_open .
146e551d452SRobert WatsonConsumers of this API may wish to pass
147e551d452SRobert Watson.Dv ALQ_DEFAULT_CMODE ,
148e551d452SRobert Watsona default creation mode suitable for most applications.
149dab12c8eSHiten PandyaThe
1507d11e744SLawrence Stewart.Fa cred
1517d11e744SLawrence Stewartargument specifies the credentials to use when opening and performing I/O on the file.
1527d11e744SLawrence StewartThe
1537d11e744SLawrence Stewart.Fa size
1547d11e744SLawrence Stewartargument sets the size (in bytes) of the underlying queue.
1557d11e744SLawrence StewartThe ALQ_ORDERED flag may be passed in via
1567d11e744SLawrence Stewart.Fa flags
1577d11e744SLawrence Stewartto indicate that the ordering of writer threads waiting for a busy
1587d11e744SLawrence Stewart.Nm
1597d11e744SLawrence Stewartto free up resources should be preserved.
1607d11e744SLawrence Stewart.Pp
1617d11e744SLawrence StewartThe deprecated
1627d11e744SLawrence Stewart.Fn alq_open
1637d11e744SLawrence Stewartfunction is implemented as a wrapper around
1647d11e744SLawrence Stewart.Fn alq_open_flags
1657d11e744SLawrence Stewartto provide backwards compatibility to consumers that have not been updated to
1667d11e744SLawrence Stewartutilise the newer
1677d11e744SLawrence Stewart.Fn alq_open_flags
1687d11e744SLawrence Stewartfunction.
1697d11e744SLawrence StewartIt passes all arguments through to
1707d11e744SLawrence Stewart.Fn alq_open_flags
1717d11e744SLawrence Stewartuntouched except for
1727d11e744SLawrence Stewart.Fa size
1737d11e744SLawrence Stewartand
1747d11e744SLawrence Stewart.Fa count ,
1757d11e744SLawrence Stewartand sets
1767d11e744SLawrence Stewart.Fa flags
1777d11e744SLawrence Stewartto 0.
1787d11e744SLawrence StewartTo create a variable length mode
1797d11e744SLawrence Stewart.Nm ,
1807d11e744SLawrence Stewartthe
1817d11e744SLawrence Stewart.Fa size
1827d11e744SLawrence Stewartargument should be set to the size (in bytes) of the underlying queue and the
183dab12c8eSHiten Pandya.Fa count
1847d11e744SLawrence Stewartargument should be set to 0.
1857d11e744SLawrence StewartTo create a fixed length mode
1867d11e744SLawrence Stewart.Nm ,
1877d11e744SLawrence Stewartthe
1887d11e744SLawrence Stewart.Fa size
1897d11e744SLawrence Stewartargument should be set to the size (in bytes) of each write and the
1907d11e744SLawrence Stewart.Fa count
1917d11e744SLawrence Stewartargument should be set to the number of
1927d11e744SLawrence Stewart.Fa size
1937d11e744SLawrence Stewartbyte chunks to reserve capacity for.
194dab12c8eSHiten Pandya.Pp
195dab12c8eSHiten PandyaThe
1967d11e744SLawrence Stewart.Fn alq_writen
197dab12c8eSHiten Pandyafunction writes
1987d11e744SLawrence Stewart.Fa len
1997d11e744SLawrence Stewartbytes from
200dab12c8eSHiten Pandya.Fa data
2017d11e744SLawrence Stewartto the designated variable length mode queue
202dab12c8eSHiten Pandya.Fa alq .
2037d11e744SLawrence StewartIf
2047d11e744SLawrence Stewart.Fn alq_writen
2057d11e744SLawrence Stewartcould not write the entry immediately and
206dab12c8eSHiten Pandya.Dv ALQ_WAITOK
2077d11e744SLawrence Stewartis set in
2087d11e744SLawrence Stewart.Fa flags ,
2097d11e744SLawrence Stewartthe function will be allowed to
2107d11e744SLawrence Stewart.Xr msleep_spin 9
2117d11e744SLawrence Stewartwith the
2127d11e744SLawrence Stewart.Dq Li alqwnord
2137d11e744SLawrence Stewartor
2147d11e744SLawrence Stewart.Dq Li alqwnres
2157d11e744SLawrence Stewartwait message.
2167d11e744SLawrence StewartA write will automatically schedule the queue
2177d11e744SLawrence Stewart.Fa alq
2187d11e744SLawrence Stewartto be flushed to disk.
2197d11e744SLawrence StewartThis behaviour can be controlled by passing ALQ_NOACTIVATE via
2207d11e744SLawrence Stewart.Fa flags
2217d11e744SLawrence Stewartto indicate that the write should not schedule
2227d11e744SLawrence Stewart.Fa alq
2237d11e744SLawrence Stewartto be flushed to disk.
2247d11e744SLawrence Stewart.Pp
2257d11e744SLawrence StewartThe deprecated
226dab12c8eSHiten Pandya.Fn alq_write
2277d11e744SLawrence Stewartfunction is implemented as a wrapper around
2287d11e744SLawrence Stewart.Fn alq_writen
2297d11e744SLawrence Stewartto provide backwards compatibility to consumers that have not been updated to
2307d11e744SLawrence Stewartutilise variable length mode queues.
2317d11e744SLawrence StewartThe function will write
2327d11e744SLawrence Stewart.Fa size
2337d11e744SLawrence Stewartbytes of data (where
2347d11e744SLawrence Stewart.Fa size
2357d11e744SLawrence Stewartwas specified at queue creation time) from the
2367d11e744SLawrence Stewart.Fa data
2377d11e744SLawrence Stewartbuffer to the
2387d11e744SLawrence Stewart.Fa alq .
2397d11e744SLawrence StewartNote that it is an error to call
2407d11e744SLawrence Stewart.Fn alq_write
2417d11e744SLawrence Stewarton a variable length mode queue.
242dab12c8eSHiten Pandya.Pp
243dab12c8eSHiten PandyaThe
244dab12c8eSHiten Pandya.Fn alq_flush
245dab12c8eSHiten Pandyafunction is used for flushing
246dab12c8eSHiten Pandya.Fa alq
247dab12c8eSHiten Pandyato the log medium that was passed to
248dab12c8eSHiten Pandya.Fn alq_open .
2497d11e744SLawrence StewartIf
2507d11e744SLawrence Stewart.Fa alq
2517d11e744SLawrence Stewarthas data to flush and is not already in the process of being flushed, the
2527d11e744SLawrence Stewartfunction will block doing IO.
2537d11e744SLawrence StewartOtherwise, the function will return immediately.
254dab12c8eSHiten Pandya.Pp
255dab12c8eSHiten PandyaThe
256dab12c8eSHiten Pandya.Fn alq_close
2577d11e744SLawrence Stewartfunction will close the asynchronous logging queue
2587d11e744SLawrence Stewart.Fa alq
259dab12c8eSHiten Pandyaand flush all pending write requests to the log medium.
260dab12c8eSHiten PandyaIt will free all resources that were previously allocated.
261dab12c8eSHiten Pandya.Pp
262dab12c8eSHiten PandyaThe
2637d11e744SLawrence Stewart.Fn alq_getn
2647d11e744SLawrence Stewartfunction returns an asynchronous log entry from
2657d11e744SLawrence Stewart.Fa alq ,
2667d11e744SLawrence Stewartinitialised to point at a buffer capable of receiving
2677d11e744SLawrence Stewart.Fa len
2687d11e744SLawrence Stewartbytes of data.
2697d11e744SLawrence StewartThis function leaves
2707d11e744SLawrence Stewart.Fa alq
2717d11e744SLawrence Stewartin a locked state, until a subsequent
272dab12c8eSHiten Pandya.Fn alq_post
2737d11e744SLawrence Stewartor
2747d11e744SLawrence Stewart.Fn alq_post_flags
275dab12c8eSHiten Pandyacall is made.
2767d11e744SLawrence StewartIf
2777d11e744SLawrence Stewart.Fn alq_getn
2787d11e744SLawrence Stewartcould not obtain
2797d11e744SLawrence Stewart.Fa len
2807d11e744SLawrence Stewartbytes of buffer immediately and
2817d11e744SLawrence Stewart.Dv ALQ_WAITOK
2827d11e744SLawrence Stewartis set in
2837d11e744SLawrence Stewart.Fa flags ,
2847d11e744SLawrence Stewartthe function will be allowed to
2857d11e744SLawrence Stewart.Xr msleep_spin 9
286dab12c8eSHiten Pandyawith the
2877d11e744SLawrence Stewart.Dq Li alqgnord
2887d11e744SLawrence Stewartor
2897d11e744SLawrence Stewart.Dq Li alqgnres
290dab12c8eSHiten Pandyawait message.
2917d11e744SLawrence StewartThe caller can choose to write less than
2927d11e744SLawrence Stewart.Fa len
2937d11e744SLawrence Stewartbytes of data to the returned asynchronous log entry by setting the entry's
2947d11e744SLawrence Stewartae_bytesused field to the number of bytes actually written.
2957d11e744SLawrence StewartThis must be done prior to calling
2967d11e744SLawrence Stewart.Fn alq_post .
2977d11e744SLawrence Stewart.Pp
2987d11e744SLawrence StewartThe deprecated
2997d11e744SLawrence Stewart.Fn alq_get
3007d11e744SLawrence Stewartfunction is implemented as a wrapper around
3017d11e744SLawrence Stewart.Fn alq_getn
3027d11e744SLawrence Stewartto provide backwards compatibility to consumers that have not been updated to
3037d11e744SLawrence Stewartutilise variable length mode queues.
3047d11e744SLawrence StewartThe asynchronous log entry returned will be initialised to point at a buffer
3057d11e744SLawrence Stewartcapable of receiving
3067d11e744SLawrence Stewart.Fa size
3077d11e744SLawrence Stewartbytes of data (where
3087d11e744SLawrence Stewart.Fa size
3097d11e744SLawrence Stewartwas specified at queue creation time).
3107d11e744SLawrence StewartNote that it is an error to call
3117d11e744SLawrence Stewart.Fn alq_get
3127d11e744SLawrence Stewarton a variable length mode queue.
3137d11e744SLawrence Stewart.Pp
3147d11e744SLawrence StewartThe
3157d11e744SLawrence Stewart.Fn alq_post_flags
3167d11e744SLawrence Stewartfunction schedules the asynchronous log entry
3177d11e744SLawrence Stewart.Fa ale
3187d11e744SLawrence Stewart(obtained from
3197d11e744SLawrence Stewart.Fn alq_getn
3207d11e744SLawrence Stewartor
3217d11e744SLawrence Stewart.Fn alq_get )
3227d11e744SLawrence Stewartfor writing to
3237d11e744SLawrence Stewart.Fa alq .
3247d11e744SLawrence StewartThe ALQ_NOACTIVATE flag may be passed in via
3257d11e744SLawrence Stewart.Fa flags
3267d11e744SLawrence Stewartto indicate that the queue should not be immediately scheduled to be flushed to
3277d11e744SLawrence Stewartdisk.
3287d11e744SLawrence StewartThis function leaves
3297d11e744SLawrence Stewart.Fa alq
3307d11e744SLawrence Stewartin an unlocked state.
331dab12c8eSHiten Pandya.Pp
332dab12c8eSHiten PandyaThe
333dab12c8eSHiten Pandya.Fn alq_post
3347d11e744SLawrence Stewartfunction is implemented as a wrapper around
3357d11e744SLawrence Stewart.Fn alq_post_flags
3367d11e744SLawrence Stewartto provide backwards compatibility to consumers that have not been updated to
3377d11e744SLawrence Stewartutilise the newer
3387d11e744SLawrence Stewart.Fn alq_post_flags
3397d11e744SLawrence Stewartfunction.
3407d11e744SLawrence StewartIt simply passes all arguments through to
3417d11e744SLawrence Stewart.Fn alq_post_flags
3427d11e744SLawrence Stewartuntouched, and sets
3437d11e744SLawrence Stewart.Fa flags
3447d11e744SLawrence Stewartto 0.
345dab12c8eSHiten Pandya.Sh IMPLEMENTATION NOTES
346dab12c8eSHiten PandyaThe
3477d11e744SLawrence Stewart.Fn alq_writen
3487d11e744SLawrence Stewartand
349dab12c8eSHiten Pandya.Fn alq_write
3507d11e744SLawrence Stewartfunctions both perform a
3517d11e744SLawrence Stewart.Xr bcopy 3
3527d11e744SLawrence Stewartfrom the supplied
3537d11e744SLawrence Stewart.Fa data
3547d11e744SLawrence Stewartbuffer into the underlying
3557d11e744SLawrence Stewart.Nm
3567d11e744SLawrence Stewartbuffer.
3577d11e744SLawrence StewartPerformance critical code paths may wish to consider using
3587d11e744SLawrence Stewart.Fn alq_getn
3597d11e744SLawrence Stewart(variable length queues) or
3607d11e744SLawrence Stewart.Fn alq_get
361*445deb63SEnji Cooper(fixed length queues) to avoid the extra memory copy.
362*445deb63SEnji CooperNote that a queue remains locked between calls to
3637d11e744SLawrence Stewart.Fn alq_getn
3647d11e744SLawrence Stewartor
365dab12c8eSHiten Pandya.Fn alq_get
366dab12c8eSHiten Pandyaand
367dab12c8eSHiten Pandya.Fn alq_post
3687d11e744SLawrence Stewartor
3697d11e744SLawrence Stewart.Fn alq_post_flags ,
3707d11e744SLawrence Stewartso this method of writing to a queue is unsuitable for situations where the
3717d11e744SLawrence Stewarttime between calls may be substantial.
3722f6e95a1SJoseph Koshy.Sh LOCKING
3737d11e744SLawrence StewartEach asynchronous logging queue is protected by a spin mutex.
3742f6e95a1SJoseph Koshy.Pp
375a4230398SJoseph KoshyFunctions
3767d11e744SLawrence Stewart.Fn alq_flush
377a4230398SJoseph Koshyand
3787d11e744SLawrence Stewart.Fn alq_open
3792f6e95a1SJoseph Koshymay attempt to acquire an internal sleep mutex, and should
3802f6e95a1SJoseph Koshyconsequently not be used in contexts where sleeping is
3812f6e95a1SJoseph Koshynot allowed.
382dab12c8eSHiten Pandya.Sh RETURN VALUES
383dab12c8eSHiten PandyaThe
384dab12c8eSHiten Pandya.Fn alq_open
385dab12c8eSHiten Pandyafunction returns one of the error codes listed in
386dab12c8eSHiten Pandya.Xr open 2 ,
387dab12c8eSHiten Pandyaif it fails to open
388dab12c8eSHiten Pandya.Fa file ,
389dab12c8eSHiten Pandyaor else it returns 0.
390dab12c8eSHiten Pandya.Pp
391dab12c8eSHiten PandyaThe
3927d11e744SLawrence Stewart.Fn alq_writen
3937d11e744SLawrence Stewartand
394dab12c8eSHiten Pandya.Fn alq_write
3957d11e744SLawrence Stewartfunctions return
396dab12c8eSHiten Pandya.Er EWOULDBLOCK
397dab12c8eSHiten Pandyaif
398dab12c8eSHiten Pandya.Dv ALQ_NOWAIT
3997d11e744SLawrence Stewartwas set in
4007d11e744SLawrence Stewart.Fa flags
4017d11e744SLawrence Stewartand either the queue is full or the system is shutting down.
402dab12c8eSHiten Pandya.Pp
403dab12c8eSHiten PandyaThe
4047d11e744SLawrence Stewart.Fn alq_getn
4057d11e744SLawrence Stewartand
406dab12c8eSHiten Pandya.Fn alq_get
4077d11e744SLawrence Stewartfunctions return
4087d11e744SLawrence Stewart.Dv NULL
409dab12c8eSHiten Pandyaif
410dab12c8eSHiten Pandya.Dv ALQ_NOWAIT
4117d11e744SLawrence Stewartwas set in
4127d11e744SLawrence Stewart.Fa flags
4137d11e744SLawrence Stewartand either the queue is full or the system is shutting down.
414dab12c8eSHiten Pandya.Pp
415db79bbffSRuslan ErmilovNOTE: invalid arguments to non-void functions will result in
416dab12c8eSHiten Pandyaundefined behaviour.
417dab12c8eSHiten Pandya.Sh SEE ALSO
4181e9469d1SChristian Brueffer.Xr syslog 3 ,
4197d11e744SLawrence Stewart.Xr kproc 9 ,
420dab12c8eSHiten Pandya.Xr ktr 9 ,
4217d11e744SLawrence Stewart.Xr msleep_spin 9 ,
422dab12c8eSHiten Pandya.Xr vnode 9
423dab12c8eSHiten Pandya.Sh HISTORY
424dab12c8eSHiten PandyaThe
425dab12c8eSHiten PandyaAsynchronous Logging Queues (ALQ) facility first appeared in
426db79bbffSRuslan Ermilov.Fx 5.0 .
427dab12c8eSHiten Pandya.Sh AUTHORS
428dab12c8eSHiten Pandya.An -nosplit
429dab12c8eSHiten PandyaThe
430dab12c8eSHiten Pandya.Nm
431dab12c8eSHiten Pandyafacility was written by
4328a7314fcSBaptiste Daroussin.An Jeffrey Roberson Aq Mt jeff@FreeBSD.org
4337d11e744SLawrence Stewartand extended by
4348a7314fcSBaptiste Daroussin.An Lawrence Stewart Aq Mt lstewart@freebsd.org .
435dab12c8eSHiten Pandya.Pp
436dab12c8eSHiten PandyaThis manual page was written by
4378a7314fcSBaptiste Daroussin.An Hiten Pandya Aq Mt hmp@FreeBSD.org
4387d11e744SLawrence Stewartand revised by
4398a7314fcSBaptiste Daroussin.An Lawrence Stewart Aq Mt lstewart@freebsd.org .
440