1*9d2330fbSHiten Pandya.\" Copyright (c) 2005 The DragonFly Project. All rights reserved. 2*9d2330fbSHiten Pandya.\" 3*9d2330fbSHiten Pandya.\" This code is derived from software contributed to The DragonFly Project 4*9d2330fbSHiten Pandya.\" by Hiten Pandya <hmp@dragonflybsd.org>. 5*9d2330fbSHiten Pandya.\" 6*9d2330fbSHiten Pandya.\" Redistribution and use in source and binary forms, with or without 7*9d2330fbSHiten Pandya.\" modification, are permitted provided that the following conditions 8*9d2330fbSHiten Pandya.\" are met: 9*9d2330fbSHiten Pandya.\" 10*9d2330fbSHiten Pandya.\" 1. Redistributions of source code must retain the above copyright 11*9d2330fbSHiten Pandya.\" notice, this list of conditions and the following disclaimer. 12*9d2330fbSHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright 13*9d2330fbSHiten Pandya.\" notice, this list of conditions and the following disclaimer in 14*9d2330fbSHiten Pandya.\" the documentation and/or other materials provided with the 15*9d2330fbSHiten Pandya.\" distribution. 16*9d2330fbSHiten Pandya.\" 3. Neither the name of The DragonFly Project nor the names of its 17*9d2330fbSHiten Pandya.\" contributors may be used to endorse or promote products derived 18*9d2330fbSHiten Pandya.\" from this software without specific, prior written permission. 19*9d2330fbSHiten Pandya.\" 20*9d2330fbSHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21*9d2330fbSHiten Pandya.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*9d2330fbSHiten Pandya.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23*9d2330fbSHiten Pandya.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 24*9d2330fbSHiten Pandya.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25*9d2330fbSHiten Pandya.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 26*9d2330fbSHiten Pandya.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27*9d2330fbSHiten Pandya.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28*9d2330fbSHiten Pandya.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29*9d2330fbSHiten Pandya.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 30*9d2330fbSHiten Pandya.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*9d2330fbSHiten Pandya.\" SUCH DAMAGE. 32*9d2330fbSHiten Pandya.\" 33*9d2330fbSHiten Pandya.\" $DragonFly: src/share/man/man9/bufcache.9,v 1.1 2005/07/29 16:10:36 hmp Exp $ 34*9d2330fbSHiten Pandya.\" 35*9d2330fbSHiten Pandya.Dd July 29, 2005 36*9d2330fbSHiten Pandya.Os 37*9d2330fbSHiten Pandya.Dt BUFCACHE 9 38*9d2330fbSHiten Pandya.Sh NAME 39*9d2330fbSHiten Pandya.Nm bufinit , 40*9d2330fbSHiten Pandya.Nm bread , 41*9d2330fbSHiten Pandya.Nm bwrite 42*9d2330fbSHiten Pandya.Nd Buffer Cache Functions 43*9d2330fbSHiten Pandya.Sh SYNOPSIS 44*9d2330fbSHiten Pandya.In sys/param.h 45*9d2330fbSHiten Pandya.In sys/systm.h 46*9d2330fbSHiten Pandya.In sys/buf.h 47*9d2330fbSHiten Pandya.In sys/buf2.h 48*9d2330fbSHiten Pandya.Ft int 49*9d2330fbSHiten Pandya.Fo bread 50*9d2330fbSHiten Pandya.Fa "struct vnode *vp" 51*9d2330fbSHiten Pandya.Fa "daddr_t blkno" 52*9d2330fbSHiten Pandya.Fa "int size" 53*9d2330fbSHiten Pandya.Fa "struct buf **bpp" 54*9d2330fbSHiten Pandya.Fc 55*9d2330fbSHiten Pandya.Ft int 56*9d2330fbSHiten Pandya.Fo bwrite 57*9d2330fbSHiten Pandya.Fa "struct buf *bp" 58*9d2330fbSHiten Pandya.Fc 59*9d2330fbSHiten Pandya.Sh DESCRIPTION 60*9d2330fbSHiten PandyaThe buffer cache functions are at the heart of all storage file systems; 61*9d2330fbSHiten Pandyathey are used for reading from and writing to the underlying storage. 62*9d2330fbSHiten PandyaThe 63*9d2330fbSHiten Pandya.Fn bread 64*9d2330fbSHiten Pandyaand 65*9d2330fbSHiten Pandya.Fn bwrite 66*9d2330fbSHiten Pandyafunctions observe most activity in the kernel from file systems, but other 67*9d2330fbSHiten Pandyafunctions such as 68*9d2330fbSHiten Pandya.Fn breadn 69*9d2330fbSHiten Pandyaare also used. 70*9d2330fbSHiten Pandya.Pp 71*9d2330fbSHiten PandyaAt boot time, the 72*9d2330fbSHiten Pandya.Fn bufinit 73*9d2330fbSHiten Pandyafunction is invoked to initialize various accounting code. 74*9d2330fbSHiten PandyaIt also initializes 75*9d2330fbSHiten Pandya.Va nbuf 76*9d2330fbSHiten Pandyanumber of buffers and inserts them into the empty queue 77*9d2330fbSHiten Pandya.Dv QUEUE_EMPTY . 78*9d2330fbSHiten PandyaThe variable 79*9d2330fbSHiten Pandya.Va nbuf 80*9d2330fbSHiten Pandyais a global variable in the kernel that is tunable at boot time using 81*9d2330fbSHiten Pandyathe 82*9d2330fbSHiten Pandya.Xr loader 8 . 83*9d2330fbSHiten Pandya.Sh FUNCTIONS 84*9d2330fbSHiten Pandya.Bl -tag -width compact 85*9d2330fbSHiten Pandya.It Fn bread "*vp" "blkno" "size" "**bpp" 86*9d2330fbSHiten PandyaRetrieve a buffer with specified data. 87*9d2330fbSHiten PandyaAn internal function, 88*9d2330fbSHiten Pandya.Fn getblk 89*9d2330fbSHiten Pandyais called to check whether the data is available in cache or if it 90*9d2330fbSHiten Pandyashould be read from the 91*9d2330fbSHiten Pandya.Fa vp . 92*9d2330fbSHiten PandyaIf the data is available in cache, the 93*9d2330fbSHiten Pandya.Dv B_CACHE 94*9d2330fbSHiten Pandyaflag will be set otherwise 95*9d2330fbSHiten Pandya.Fa size 96*9d2330fbSHiten Pandyabytes will be read starting at block number 97*9d2330fbSHiten Pandya.Fa blkno 98*9d2330fbSHiten Pandyafrom the block special device vnode 99*9d2330fbSHiten Pandya.Fa vp . 100*9d2330fbSHiten Pandya.Pp 101*9d2330fbSHiten PandyaIn case when the buffer is not in cache or not cacheable this 102*9d2330fbSHiten Pandyafunction will put the calling process or thread to sleep, using 103*9d2330fbSHiten Pandya.Fa bp 104*9d2330fbSHiten Pandyaas the wait channel and 105*9d2330fbSHiten Pandya.Ql "biord" 106*9d2330fbSHiten Pandyaas the wait message. 107*9d2330fbSHiten Pandya.Pp 108*9d2330fbSHiten PandyaOn successful return, the 109*9d2330fbSHiten Pandya.Va b_data 110*9d2330fbSHiten Pandyafield of 111*9d2330fbSHiten Pandya.Fa bp 112*9d2330fbSHiten Pandyawill point to valid data address and 113*9d2330fbSHiten Pandya.Va b_count 114*9d2330fbSHiten Pandyawill contain the number of bytes read. 115*9d2330fbSHiten Pandya.It Fn bwrite "*bp" 116*9d2330fbSHiten PandyaWrite a buffer back to the device pointed to by 117*9d2330fbSHiten Pandya.Va b_dev 118*9d2330fbSHiten Pandyafield. 119*9d2330fbSHiten PandyaUntil the write operation is complete, the calling thread or 120*9d2330fbSHiten Pandyaprocess will be put to sleep by the kernel using 121*9d2330fbSHiten Pandya.Fa bp 122*9d2330fbSHiten Pandyaas the wait channel and 123*9d2330fbSHiten Pandya.Ql "biowr" 124*9d2330fbSHiten Pandyaas the wait message. 125*9d2330fbSHiten Pandya.Pp 126*9d2330fbSHiten PandyaBefore calling this function, the following fields are the least 127*9d2330fbSHiten Pandyato be set: 128*9d2330fbSHiten Pandya.Bl -tag -width compact 129*9d2330fbSHiten Pandya.It Va b_data 130*9d2330fbSHiten PandyaThis field should be set to a valid data buffer to be written by 131*9d2330fbSHiten Pandya.Fn bwrite . 132*9d2330fbSHiten Pandya.It Va b_bcount 133*9d2330fbSHiten PandyaSize of buffer to be written, analogous to the 134*9d2330fbSHiten Pandya.Fa size 135*9d2330fbSHiten Pandyaargument of 136*9d2330fbSHiten Pandya.Fn bread . 137*9d2330fbSHiten Pandya.It Va b_blkno 138*9d2330fbSHiten PandyaLogical block number at which the buffer should be written. 139*9d2330fbSHiten Pandya.It Va b_dev 140*9d2330fbSHiten PandyaThis can be set by using the 141*9d2330fbSHiten Pandya.Xr vn_todev 142*9d2330fbSHiten Pandyafunction on the device vnode. 143*9d2330fbSHiten Pandya.It Va b_vp 144*9d2330fbSHiten PandyaThis should be set to the vnode of the device to which the buffer 145*9d2330fbSHiten Pandyawill be written. 146*9d2330fbSHiten Pandya.El 147*9d2330fbSHiten Pandya.Pp 148*9d2330fbSHiten PandyaThis function will put the calling process or thread to sleep if the 149*9d2330fbSHiten Pandyadata cannot be written when operating synchronously, using 150*9d2330fbSHiten Pandya.Fa bp 151*9d2330fbSHiten Pandyaas the wait channel and 152*9d2330fbSHiten Pandya.Ql "biowr" 153*9d2330fbSHiten Pandyaas the wait message. 154*9d2330fbSHiten PandyaOn successful return the 155*9d2330fbSHiten Pandya.Va b_resid 156*9d2330fbSHiten Pandyafield of 157*9d2330fbSHiten Pandya.Fa bp 158*9d2330fbSHiten Pandyawill be set to the value zero, thus indicating a succesful write. 159*9d2330fbSHiten Pandya.El 160*9d2330fbSHiten Pandya.Sh CODE REFERENCES 161*9d2330fbSHiten PandyaThe file system code, located under 162*9d2330fbSHiten Pandya.Pa sys/vfs 163*9d2330fbSHiten Pandyadirectory are the main source of reference. 164*9d2330fbSHiten Pandya.Sh SEE ALSO 165*9d2330fbSHiten Pandya.Xr buf 9 , 166*9d2330fbSHiten Pandya.Xr namei 9 , 167*9d2330fbSHiten Pandya.Xr VFS 9 168*9d2330fbSHiten Pandya.Sh AUTHORS 169*9d2330fbSHiten PandyaThis manual page was written by 170*9d2330fbSHiten Pandya.An Hiten Pandya Aq hmp@freebsd.org . 171