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