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*de1a0a27SSascha Wildner.\" $DragonFly: src/share/man/man9/bufcache.9,v 1.5 2007/11/23 23:03:57 swildner Exp $ 349d2330fbSHiten Pandya.\" 359d2330fbSHiten Pandya.Dd July 29, 2005 369d2330fbSHiten Pandya.Os 379d2330fbSHiten Pandya.Dt BUFCACHE 9 389d2330fbSHiten Pandya.Sh NAME 399d2330fbSHiten Pandya.Nm bufinit , 409d2330fbSHiten Pandya.Nm bread , 419d2330fbSHiten Pandya.Nm bwrite 429d2330fbSHiten Pandya.Nd Buffer Cache Functions 439d2330fbSHiten Pandya.Sh SYNOPSIS 449d2330fbSHiten Pandya.In sys/param.h 459d2330fbSHiten Pandya.In sys/systm.h 469d2330fbSHiten Pandya.In sys/buf.h 479d2330fbSHiten Pandya.In sys/buf2.h 489d2330fbSHiten Pandya.Ft int 499d2330fbSHiten Pandya.Fo bread 509d2330fbSHiten Pandya.Fa "struct vnode *vp" 519d2330fbSHiten Pandya.Fa "daddr_t blkno" 529d2330fbSHiten Pandya.Fa "int size" 539d2330fbSHiten Pandya.Fa "struct buf **bpp" 549d2330fbSHiten Pandya.Fc 559d2330fbSHiten Pandya.Ft int 569d2330fbSHiten Pandya.Fo bwrite 579d2330fbSHiten Pandya.Fa "struct buf *bp" 589d2330fbSHiten Pandya.Fc 599d2330fbSHiten Pandya.Sh DESCRIPTION 609d2330fbSHiten PandyaThe buffer cache functions are at the heart of all storage file systems; 619d2330fbSHiten Pandyathey are used for reading from and writing to the underlying storage. 629d2330fbSHiten PandyaThe 639d2330fbSHiten Pandya.Fn bread 649d2330fbSHiten Pandyaand 659d2330fbSHiten Pandya.Fn bwrite 669d2330fbSHiten Pandyafunctions observe most activity in the kernel from file systems, but other 679d2330fbSHiten Pandyafunctions such as 689d2330fbSHiten Pandya.Fn breadn 699d2330fbSHiten Pandyaare also used. 709d2330fbSHiten Pandya.Pp 719d2330fbSHiten PandyaAt boot time, the 729d2330fbSHiten Pandya.Fn bufinit 739d2330fbSHiten Pandyafunction is invoked to initialize various accounting code. 749d2330fbSHiten PandyaIt also initializes 759d2330fbSHiten Pandya.Va nbuf 769d2330fbSHiten Pandyanumber of buffers and inserts them into the empty queue 77*de1a0a27SSascha Wildner.Dv BQUEUE_EMPTY . 789d2330fbSHiten PandyaThe variable 799d2330fbSHiten Pandya.Va nbuf 809d2330fbSHiten Pandyais a global variable in the kernel that is tunable at boot time using 819d2330fbSHiten Pandyathe 829d2330fbSHiten Pandya.Xr loader 8 . 839d2330fbSHiten Pandya.Sh FUNCTIONS 849d2330fbSHiten Pandya.Bl -tag -width compact 859d2330fbSHiten Pandya.It Fn bread "*vp" "blkno" "size" "**bpp" 869d2330fbSHiten PandyaRetrieve a buffer with specified data. 879d2330fbSHiten PandyaAn internal function, 889d2330fbSHiten Pandya.Fn getblk 899d2330fbSHiten Pandyais called to check whether the data is available in cache or if it 909d2330fbSHiten Pandyashould be read from the 919d2330fbSHiten Pandya.Fa vp . 929d2330fbSHiten PandyaIf the data is available in cache, the 939d2330fbSHiten Pandya.Dv B_CACHE 949d2330fbSHiten Pandyaflag will be set otherwise 959d2330fbSHiten Pandya.Fa size 969d2330fbSHiten Pandyabytes will be read starting at block number 979d2330fbSHiten Pandya.Fa blkno 989d2330fbSHiten Pandyafrom the block special device vnode 999d2330fbSHiten Pandya.Fa vp . 1009d2330fbSHiten Pandya.Pp 1019d2330fbSHiten PandyaIn case when the buffer is not in cache or not cacheable this 1029d2330fbSHiten Pandyafunction will put the calling process or thread to sleep, using 1039d2330fbSHiten Pandya.Fa bp 1049d2330fbSHiten Pandyaas the wait channel and 1059d2330fbSHiten Pandya.Ql "biord" 1069d2330fbSHiten Pandyaas the wait message. 1079d2330fbSHiten Pandya.Pp 1089d2330fbSHiten PandyaOn successful return, the 1099d2330fbSHiten Pandya.Va b_data 1109d2330fbSHiten Pandyafield of 1119d2330fbSHiten Pandya.Fa bp 1129d2330fbSHiten Pandyawill point to valid data address and 1139d2330fbSHiten Pandya.Va b_count 1149d2330fbSHiten Pandyawill contain the number of bytes read. 1159d2330fbSHiten Pandya.It Fn bwrite "*bp" 1169d2330fbSHiten PandyaWrite a buffer back to the device pointed to by 1179d2330fbSHiten Pandya.Va b_dev 1189d2330fbSHiten Pandyafield. 1199d2330fbSHiten PandyaUntil the write operation is complete, the calling thread or 1209d2330fbSHiten Pandyaprocess will be put to sleep by the kernel using 1219d2330fbSHiten Pandya.Fa bp 1229d2330fbSHiten Pandyaas the wait channel and 1239d2330fbSHiten Pandya.Ql "biowr" 1249d2330fbSHiten Pandyaas the wait message. 1259d2330fbSHiten Pandya.Pp 1269d2330fbSHiten PandyaBefore calling this function, the following fields are the least 1279d2330fbSHiten Pandyato be set: 1289d2330fbSHiten Pandya.Bl -tag -width compact 1299d2330fbSHiten Pandya.It Va b_data 1309d2330fbSHiten PandyaThis field should be set to a valid data buffer to be written by 1319d2330fbSHiten Pandya.Fn bwrite . 1329d2330fbSHiten Pandya.It Va b_bcount 1339d2330fbSHiten PandyaSize of buffer to be written, analogous to the 1349d2330fbSHiten Pandya.Fa size 1359d2330fbSHiten Pandyaargument of 1369d2330fbSHiten Pandya.Fn bread . 1379d2330fbSHiten Pandya.It Va b_blkno 1389d2330fbSHiten PandyaLogical block number at which the buffer should be written. 1399d2330fbSHiten Pandya.It Va b_dev 1409d2330fbSHiten PandyaThis can be set by using the 14165e81aa0SSascha Wildner.Fn vn_todev 1429d2330fbSHiten Pandyafunction on the device vnode. 1439d2330fbSHiten Pandya.It Va b_vp 1449d2330fbSHiten PandyaThis should be set to the vnode of the device to which the buffer 1459d2330fbSHiten Pandyawill be written. 1469d2330fbSHiten Pandya.El 1479d2330fbSHiten Pandya.Pp 1489d2330fbSHiten PandyaThis function will put the calling process or thread to sleep if the 1499d2330fbSHiten Pandyadata cannot be written when operating synchronously, using 1509d2330fbSHiten Pandya.Fa bp 1519d2330fbSHiten Pandyaas the wait channel and 1529d2330fbSHiten Pandya.Ql "biowr" 1539d2330fbSHiten Pandyaas the wait message. 1549d2330fbSHiten PandyaOn successful return the 1559d2330fbSHiten Pandya.Va b_resid 1569d2330fbSHiten Pandyafield of 1579d2330fbSHiten Pandya.Fa bp 1583221afbeSHasso Tepperwill be set to the value zero, thus indicating a successful write. 1599d2330fbSHiten Pandya.El 1609d2330fbSHiten Pandya.Sh CODE REFERENCES 1619d2330fbSHiten PandyaThe file system code, located under 1629d2330fbSHiten Pandya.Pa sys/vfs 1639d2330fbSHiten Pandyadirectory are the main source of reference. 1649d2330fbSHiten Pandya.Sh SEE ALSO 1659d2330fbSHiten Pandya.Xr buf 9 , 1669d2330fbSHiten Pandya.Xr namei 9 , 1679d2330fbSHiten Pandya.Xr VFS 9 1689d2330fbSHiten Pandya.Sh AUTHORS 1699d2330fbSHiten PandyaThis manual page was written by 1709d2330fbSHiten Pandya.An Hiten Pandya Aq hmp@freebsd.org . 171