doc/ja_JP.eucJP/man/man9/VOP_GETPAGES.9
SUZUKI Koichi d100276457 Catch up with 5.3-BETA1 for man9.
Submitted by:   Akira Ikeuchi <a_ikeuchi@mic.mitsumi.co.jp>
Reviewed by:    Watanabe Kazuhiro <CQG00620@nifty.ne.jp>
2004-09-21 21:00:59 +00:00

153 lines
4.8 KiB
Groff

.\" -*- nroff -*-
.\"
.\" Copyright (c) 1996 Doug Rabson
.\" Copyright 2003, Garrett A. Wollman
.\"
.\" All rights reserved.
.\"
.\" This program is free software.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/VOP_GETPAGES.9,v 1.10 2004/06/16 08:33:57 ru Exp %
.\"
.\" $FreeBSD$
.Dd September 27, 2003
.Os
.Dt VOP_GETPAGES 9
.Sh 名称
.Nm VOP_GETPAGES ,
.Nm VOP_PUTPAGES
.Nd ファイルから VM ページへの読み込みまたは書き込み
.Sh 書式
.In sys/param.h
.In sys/vnode.h
.In vm/vm.h
.Ft int
.Fn VOP_GETPAGES "struct vnode *vp" "vm_page_t *m" "int count" "int reqpage" "vm_ooffset_t offset"
.Ft int
.Fn VOP_PUTPAGES "struct vnode *vp" "vm_page_t *m" "int count" "int sync" "int *rtvals" "vm_ooffset_t offset"
.Sh 解説
.Fn VOP_GETPAGES
メソッドは、通常のファイルが背後にある仮想メモリのページの読み込み
のために、呼び出されます。
他の隣接したページの背後に同じファイルの隣接した領域がある場合には、
.Fn VOP_GETPAGES
は同様にそれらのページを読み込ませるために要求されますが、そうすることが
必須なわけではありません。
.Fn VOP_PUTPAGES
メソッドは反対のことを行います。
すなわち、仮想メモリの隣接したダーティなページを書き出させます。
.Pp
入る時に、vnode のロックは保持されますが、ページキューと VM オブジェクトの
ロックはどちらも保持されません。
両方のメソッドは、成功して戻る時とエラーで戻る時と両方とも、
そのままの状態で戻ります。
.Pp
引数は以下の通りです。
.Bl -tag -width reqpage
.It Fa vp
アクセスするファイル。
.It Fa m
読み込まれるまたは書き込まれるべきファイルの連続した領域を表現する
連続したページの配列の最初の要素へのポインタです。
.It Fa count
その配列の中のページ数です。
.It Fa sync
書き込みが同期されるべき場合には
.Dv VM_PAGER_PUT_SYNC
です。
.It Fa rtvals
.Fn VOP_PUTPAGES
によって書き込まれたそれぞれのページの状態を示している VM システムの
結果コードの配列です。
.It Fa reqpage
ページ配列の中の要求されたページのインデックスです。
すなわち、このメソッドの実装が取り扱わなければならない、1 ページです。
.It Fa offset
ファイルの中のそのマップされたページが始まる場所へのオフセットです。
.El
.Pp
.Fn VOP_PUTPAGES
メソッドの状態は、配列
.Fa rtvals[]
の中に、個々のページごとに返されます。
起こり得る状態値は以下の通りです。
.Bl -tag -width VM_PAGER_ERROR
.It Dv VM_PAGER_OK
そのページは成功して書き込まれました。
実装はそのページがクリーンであることを記録するために
.Xr vm_pager_undirty 9
を呼び出さなければなりません。
.It Dv VM_PAGER_PEND
そのページは非同期に書き込まれるようにスケジュールされました。
書き込みが完了した時には、完了コールバックはビジーフラグをクリアし、
このページをウェイトしている他のスレッドを起こすために、
.Xr vm_object_pip_wakeup 9
および
.Xr vm_page_io_finish 9
を呼び出すべきです。
さらに
.Xr vm_page_undirty 9
を呼び出します。
.It Dv VM_PAGER_BAD
このページは完全に背後にあるファイルの終端を越えていました。
その vnode のファイルシステムが正しく実装されている場合には、
この状態は起こり得るべきではありません。
.It Dv VM_PAGER_ERROR
下位の保存メディアまたはプロトコルのエラーのため、
このページは書き込まれることが出来ませんでした。
.It Dv VM_PAGER_FAIL
.Dv VM_PAGER_ERROR
と同様に取り扱われました。
.Dv VM_PAGER_ERROR
.It Dv VM_PAGER_AGAIN
そのページはこの要求によって取り扱われませんでした。
.El
.Pp
.Sh 戻り値
成功して
.Fa m[reqpage]
を読み込んだ場合には
.Fn VOP_GETPAGES
.Dv VM_PAGER_OK
を返し、そうでない場合には
.Dv VM_PAGER_ERROR
を返します。
慣習で、
.Fn VOP_PUTPAGES
の戻り値は
.Fa rtvals[0]
です。
.Sh 関連項目
.Xr vm_object_pip_wakeup 9 ,
.Xr vm_page_free 9 ,
.Xr vm_page_io_finish 9 ,
.Xr vm_page_undirty 9 ,
.Xr vm_page_wakeup 9 ,
.Xr vnode 9
.Sh 作者
このマニュアルページは
.An Doug Rabson
が書き、その後実質上
.An Garrett Wollman
が書き直しました。