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