xref: /dflybsd-src/share/man/man9/bufcache.9 (revision 9d835656908d66f619bd14af2cabde55cf2bf450)
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