19d2330fbSHiten Pandya.\" Copyright (c) 2005 The DragonFly Project. All rights reserved. 29d2330fbSHiten Pandya.\" 39d2330fbSHiten Pandya.\" This code is derived from software contributed to The DragonFly Project 49d2330fbSHiten Pandya.\" by Hiten Pandya <hmp@dragonflybsd.org>. 59d2330fbSHiten Pandya.\" 69d2330fbSHiten Pandya.\" Redistribution and use in source and binary forms, with or without 79d2330fbSHiten Pandya.\" modification, are permitted provided that the following conditions 89d2330fbSHiten Pandya.\" are met: 99d2330fbSHiten Pandya.\" 109d2330fbSHiten Pandya.\" 1. Redistributions of source code must retain the above copyright 119d2330fbSHiten Pandya.\" notice, this list of conditions and the following disclaimer. 129d2330fbSHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright 139d2330fbSHiten Pandya.\" notice, this list of conditions and the following disclaimer in 149d2330fbSHiten Pandya.\" the documentation and/or other materials provided with the 159d2330fbSHiten Pandya.\" distribution. 169d2330fbSHiten Pandya.\" 3. Neither the name of The DragonFly Project nor the names of its 179d2330fbSHiten Pandya.\" contributors may be used to endorse or promote products derived 189d2330fbSHiten Pandya.\" from this software without specific, prior written permission. 199d2330fbSHiten Pandya.\" 209d2330fbSHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 219d2330fbSHiten Pandya.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 229d2330fbSHiten Pandya.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 239d2330fbSHiten Pandya.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 249d2330fbSHiten Pandya.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 259d2330fbSHiten Pandya.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 269d2330fbSHiten Pandya.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 279d2330fbSHiten Pandya.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 289d2330fbSHiten Pandya.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 299d2330fbSHiten Pandya.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 309d2330fbSHiten Pandya.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 319d2330fbSHiten Pandya.\" SUCH DAMAGE. 329d2330fbSHiten Pandya.\" 33*9d835656SSascha Wildner.Dd December 27, 2018 349d2330fbSHiten Pandya.Dt BUFCACHE 9 35fb5b3747SSascha Wildner.Os 369d2330fbSHiten Pandya.Sh NAME 379d2330fbSHiten Pandya.Nm bufinit , 389d2330fbSHiten Pandya.Nm bread , 399d2330fbSHiten Pandya.Nm bwrite 409d2330fbSHiten Pandya.Nd Buffer Cache Functions 419d2330fbSHiten Pandya.Sh SYNOPSIS 429d2330fbSHiten Pandya.In sys/param.h 439d2330fbSHiten Pandya.In sys/systm.h 449d2330fbSHiten Pandya.In sys/buf.h 459d2330fbSHiten Pandya.In sys/buf2.h 469d2330fbSHiten Pandya.Ft int 479d2330fbSHiten Pandya.Fo bread 489d2330fbSHiten Pandya.Fa "struct vnode *vp" 49*9d835656SSascha Wildner.Fa "off_t loffset" 509d2330fbSHiten Pandya.Fa "int size" 519d2330fbSHiten Pandya.Fa "struct buf **bpp" 529d2330fbSHiten Pandya.Fc 539d2330fbSHiten Pandya.Ft int 549d2330fbSHiten Pandya.Fo bwrite 559d2330fbSHiten Pandya.Fa "struct buf *bp" 569d2330fbSHiten Pandya.Fc 579d2330fbSHiten Pandya.Sh DESCRIPTION 589d2330fbSHiten PandyaThe buffer cache functions are at the heart of all storage file systems; 599d2330fbSHiten Pandyathey are used for reading from and writing to the underlying storage. 609d2330fbSHiten PandyaThe 619d2330fbSHiten Pandya.Fn bread 629d2330fbSHiten Pandyaand 639d2330fbSHiten Pandya.Fn bwrite 649d2330fbSHiten Pandyafunctions observe most activity in the kernel from file systems, but other 659d2330fbSHiten Pandyafunctions such as 669d2330fbSHiten Pandya.Fn breadn 679d2330fbSHiten Pandyaare also used. 689d2330fbSHiten Pandya.Pp 699d2330fbSHiten PandyaAt boot time, the 709d2330fbSHiten Pandya.Fn bufinit 719d2330fbSHiten Pandyafunction is invoked to initialize various accounting code. 729d2330fbSHiten PandyaIt also initializes 739d2330fbSHiten Pandya.Va nbuf 749d2330fbSHiten Pandyanumber of buffers and inserts them into the empty queue 75de1a0a27SSascha Wildner.Dv BQUEUE_EMPTY . 769d2330fbSHiten PandyaThe variable 779d2330fbSHiten Pandya.Va nbuf 789d2330fbSHiten Pandyais a global variable in the kernel that is tunable at boot time using 799d2330fbSHiten Pandyathe 809d2330fbSHiten Pandya.Xr loader 8 . 819d2330fbSHiten Pandya.Sh FUNCTIONS 829d2330fbSHiten Pandya.Bl -tag -width compact 83*9d835656SSascha Wildner.It Fn bread "*vp" "loffset" "size" "**bpp" 849d2330fbSHiten PandyaRetrieve a buffer with specified data. 859d2330fbSHiten PandyaAn internal function, 869d2330fbSHiten Pandya.Fn getblk 879d2330fbSHiten Pandyais called to check whether the data is available in cache or if it 889d2330fbSHiten Pandyashould be read from the 899d2330fbSHiten Pandya.Fa vp . 909d2330fbSHiten PandyaIf the data is available in cache, the 919d2330fbSHiten Pandya.Dv B_CACHE 929d2330fbSHiten Pandyaflag will be set otherwise 939d2330fbSHiten Pandya.Fa size 949d2330fbSHiten Pandyabytes will be read starting at block number 95*9d835656SSascha Wildner.Fa loffset 969d2330fbSHiten Pandyafrom the block special device vnode 979d2330fbSHiten Pandya.Fa vp . 989d2330fbSHiten Pandya.Pp 999d2330fbSHiten PandyaIn case when the buffer is not in cache or not cacheable this 1009d2330fbSHiten Pandyafunction will put the calling process or thread to sleep, using 1019d2330fbSHiten Pandya.Fa bp 1029d2330fbSHiten Pandyaas the wait channel and 1039d2330fbSHiten Pandya.Ql "biord" 1049d2330fbSHiten Pandyaas the wait message. 1059d2330fbSHiten Pandya.Pp 1069d2330fbSHiten PandyaOn successful return, the 1079d2330fbSHiten Pandya.Va b_data 1089d2330fbSHiten Pandyafield of 1099d2330fbSHiten Pandya.Fa bp 1109d2330fbSHiten Pandyawill point to valid data address and 1119d2330fbSHiten Pandya.Va b_count 1129d2330fbSHiten Pandyawill contain the number of bytes read. 1139d2330fbSHiten Pandya.It Fn bwrite "*bp" 1149d2330fbSHiten PandyaWrite a buffer back to the device pointed to by 1159d2330fbSHiten Pandya.Va b_dev 1169d2330fbSHiten Pandyafield. 1179d2330fbSHiten PandyaUntil the write operation is complete, the calling thread or 1189d2330fbSHiten Pandyaprocess will be put to sleep by the kernel using 1199d2330fbSHiten Pandya.Fa bp 1209d2330fbSHiten Pandyaas the wait channel and 1219d2330fbSHiten Pandya.Ql "biowr" 1229d2330fbSHiten Pandyaas the wait message. 1239d2330fbSHiten Pandya.Pp 1249d2330fbSHiten PandyaBefore calling this function, the following fields are the least 1259d2330fbSHiten Pandyato be set: 1269d2330fbSHiten Pandya.Bl -tag -width compact 1279d2330fbSHiten Pandya.It Va b_data 1289d2330fbSHiten PandyaThis field should be set to a valid data buffer to be written by 1299d2330fbSHiten Pandya.Fn bwrite . 1309d2330fbSHiten Pandya.It Va b_bcount 1319d2330fbSHiten PandyaSize of buffer to be written, analogous to the 1329d2330fbSHiten Pandya.Fa size 1339d2330fbSHiten Pandyaargument of 1349d2330fbSHiten Pandya.Fn bread . 1359d2330fbSHiten Pandya.It Va b_blkno 1369d2330fbSHiten PandyaLogical block number at which the buffer should be written. 1379d2330fbSHiten Pandya.It Va b_dev 1389d2330fbSHiten PandyaThis can be set by using the 13965e81aa0SSascha Wildner.Fn vn_todev 1409d2330fbSHiten Pandyafunction on the device vnode. 1419d2330fbSHiten Pandya.It Va b_vp 1429d2330fbSHiten PandyaThis should be set to the vnode of the device to which the buffer 1439d2330fbSHiten Pandyawill be written. 1449d2330fbSHiten Pandya.El 1459d2330fbSHiten Pandya.Pp 1469d2330fbSHiten PandyaThis function will put the calling process or thread to sleep if the 1479d2330fbSHiten Pandyadata cannot be written when operating synchronously, using 1489d2330fbSHiten Pandya.Fa bp 1499d2330fbSHiten Pandyaas the wait channel and 1509d2330fbSHiten Pandya.Ql "biowr" 1519d2330fbSHiten Pandyaas the wait message. 1529d2330fbSHiten PandyaOn successful return the 1539d2330fbSHiten Pandya.Va b_resid 1549d2330fbSHiten Pandyafield of 1559d2330fbSHiten Pandya.Fa bp 1563221afbeSHasso Tepperwill be set to the value zero, thus indicating a successful write. 1579d2330fbSHiten Pandya.El 1589d2330fbSHiten Pandya.Sh CODE REFERENCES 1599d2330fbSHiten PandyaThe file system code, located under 1609d2330fbSHiten Pandya.Pa sys/vfs 1619d2330fbSHiten Pandyadirectory are the main source of reference. 1629d2330fbSHiten Pandya.Sh SEE ALSO 1639d2330fbSHiten Pandya.Xr buf 9 , 1649d2330fbSHiten Pandya.Xr VFS 9 1659d2330fbSHiten Pandya.Sh AUTHORS 1669d2330fbSHiten PandyaThis manual page was written by 167c616d378SFranco Fichtner.An Hiten Pandya Aq Mt hmp@freebsd.org . 168