Deleted Added
full compact
vnode_pager.c (91406) vnode_pager.c (92029)
1/*
2 * Copyright (c) 1990 University of Utah.
3 * Copyright (c) 1991 The Regents of the University of California.
4 * All rights reserved.
5 * Copyright (c) 1993, 1994 John S. Dyson
6 * Copyright (c) 1995, David Greenman
7 *
8 * This code is derived from software contributed to Berkeley by

--- 24 unchanged lines hidden (view full) ---

33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 *
40 * from: @(#)vnode_pager.c 7.5 (Berkeley) 4/20/91
1/*
2 * Copyright (c) 1990 University of Utah.
3 * Copyright (c) 1991 The Regents of the University of California.
4 * All rights reserved.
5 * Copyright (c) 1993, 1994 John S. Dyson
6 * Copyright (c) 1995, David Greenman
7 *
8 * This code is derived from software contributed to Berkeley by

--- 24 unchanged lines hidden (view full) ---

33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 *
40 * from: @(#)vnode_pager.c 7.5 (Berkeley) 4/20/91
41 * $FreeBSD: head/sys/vm/vnode_pager.c 91406 2002-02-27 18:32:23Z jhb $
41 * $FreeBSD: head/sys/vm/vnode_pager.c 92029 2002-03-10 21:52:48Z eivind $
42 */
43
44/*
45 * Page to/from files (vnodes).
46 */
47
48/*
49 * TODO:

--- 174 unchanged lines hidden (view full) ---

224 } else {
225 blocksperpage = (PAGE_SIZE / bsize);
226 reqblock = pindex * blocksperpage;
227 }
228 err = VOP_BMAP(vp, reqblock, (struct vnode **) 0, &bn,
229 after, before);
230 if (err)
231 return TRUE;
42 */
43
44/*
45 * Page to/from files (vnodes).
46 */
47
48/*
49 * TODO:

--- 174 unchanged lines hidden (view full) ---

224 } else {
225 blocksperpage = (PAGE_SIZE / bsize);
226 reqblock = pindex * blocksperpage;
227 }
228 err = VOP_BMAP(vp, reqblock, (struct vnode **) 0, &bn,
229 after, before);
230 if (err)
231 return TRUE;
232 if ( bn == -1)
232 if (bn == -1)
233 return FALSE;
234 if (pagesperblock > 0) {
235 poff = pindex - (reqblock * pagesperblock);
236 if (before) {
237 *before *= pagesperblock;
238 *before += poff;
239 }
240 if (after) {

--- 147 unchanged lines hidden (view full) ---

388 voffset = address % bsize;
389
390 err = VOP_BMAP(vp, vblock, &rtvp, &block, run, NULL);
391
392 if (err || (block == -1))
393 rtaddress = -1;
394 else {
395 rtaddress = block + voffset / DEV_BSIZE;
233 return FALSE;
234 if (pagesperblock > 0) {
235 poff = pindex - (reqblock * pagesperblock);
236 if (before) {
237 *before *= pagesperblock;
238 *before += poff;
239 }
240 if (after) {

--- 147 unchanged lines hidden (view full) ---

388 voffset = address % bsize;
389
390 err = VOP_BMAP(vp, vblock, &rtvp, &block, run, NULL);
391
392 if (err || (block == -1))
393 rtaddress = -1;
394 else {
395 rtaddress = block + voffset / DEV_BSIZE;
396 if( run) {
396 if (run) {
397 *run += 1;
398 *run *= bsize/PAGE_SIZE;
399 *run -= voffset/PAGE_SIZE;
400 }
401 }
402
403 return rtaddress;
404}

--- 271 unchanged lines hidden (view full) ---

676 return vnode_pager_input_smlfs(object, m[reqpage]);
677 }
678
679 /*
680 * If we have a completely valid page available to us, we can
681 * clean up and return. Otherwise we have to re-read the
682 * media.
683 */
397 *run += 1;
398 *run *= bsize/PAGE_SIZE;
399 *run -= voffset/PAGE_SIZE;
400 }
401 }
402
403 return rtaddress;
404}

--- 271 unchanged lines hidden (view full) ---

676 return vnode_pager_input_smlfs(object, m[reqpage]);
677 }
678
679 /*
680 * If we have a completely valid page available to us, we can
681 * clean up and return. Otherwise we have to re-read the
682 * media.
683 */
684
685 if (m[reqpage]->valid == VM_PAGE_BITS_ALL) {
686 for (i = 0; i < count; i++) {
687 if (i != reqpage)
688 vm_page_free(m[i]);
689 }
690 return VM_PAGER_OK;
691 }
692 m[reqpage]->valid = 0;
693
694 /*
695 * here on direct device I/O
696 */
684 if (m[reqpage]->valid == VM_PAGE_BITS_ALL) {
685 for (i = 0; i < count; i++) {
686 if (i != reqpage)
687 vm_page_free(m[i]);
688 }
689 return VM_PAGER_OK;
690 }
691 m[reqpage]->valid = 0;
692
693 /*
694 * here on direct device I/O
695 */
697
698 firstaddr = -1;
696 firstaddr = -1;
697
699 /*
700 * calculate the run that includes the required page
701 */
698 /*
699 * calculate the run that includes the required page
700 */
702 for(first = 0, i = 0; i < count; i = runend) {
701 for (first = 0, i = 0; i < count; i = runend) {
703 firstaddr = vnode_pager_addr(vp,
704 IDX_TO_OFF(m[i]->pindex), &runpg);
705 if (firstaddr == -1) {
706 if (i == reqpage && foff < object->un_pager.vnp.vnp_size) {
707 /* XXX no %qd in kernel. */
708 panic("vnode_pager_getpages: unexpected missing page: firstaddr: %d, foff: 0x%lx%08lx, vnp_size: 0x%lx%08lx",
709 firstaddr, (u_long)(foff >> 32),
710 (u_long)(u_int32_t)foff,

--- 204 unchanged lines hidden (view full) ---

915 */
916
917 if ((cnt.v_free_count + cnt.v_cache_count) < cnt.v_pageout_free_min)
918 sync |= OBJPC_SYNC;
919
920 /*
921 * Call device-specific putpages function
922 */
702 firstaddr = vnode_pager_addr(vp,
703 IDX_TO_OFF(m[i]->pindex), &runpg);
704 if (firstaddr == -1) {
705 if (i == reqpage && foff < object->un_pager.vnp.vnp_size) {
706 /* XXX no %qd in kernel. */
707 panic("vnode_pager_getpages: unexpected missing page: firstaddr: %d, foff: 0x%lx%08lx, vnp_size: 0x%lx%08lx",
708 firstaddr, (u_long)(foff >> 32),
709 (u_long)(u_int32_t)foff,

--- 204 unchanged lines hidden (view full) ---

914 */
915
916 if ((cnt.v_free_count + cnt.v_cache_count) < cnt.v_pageout_free_min)
917 sync |= OBJPC_SYNC;
918
919 /*
920 * Call device-specific putpages function
921 */
923
924 vp = object->handle;
925 if (vp->v_type != VREG)
926 mp = NULL;
927 (void)vn_start_write(vp, &mp, V_WAIT);
928 rtval = VOP_PUTPAGES(vp, m, bytes, sync, rtvals, 0);
929 KASSERT(rtval != EOPNOTSUPP,
930 ("vnode_pager: stale FS putpages\n"));
931 vn_finished_write(mp);

--- 144 unchanged lines hidden ---
922 vp = object->handle;
923 if (vp->v_type != VREG)
924 mp = NULL;
925 (void)vn_start_write(vp, &mp, V_WAIT);
926 rtval = VOP_PUTPAGES(vp, m, bytes, sync, rtvals, 0);
927 KASSERT(rtval != EOPNOTSUPP,
928 ("vnode_pager: stale FS putpages\n"));
929 vn_finished_write(mp);

--- 144 unchanged lines hidden ---