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