vnode_pager.c (ad5dd2341c0ff5e5a092ae21b2c275a0608fc701) vnode_pager.c (aa8de40ae504c80301d07b7a4cfa74359792cc72)
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 * $Id: vnode_pager.c,v 1.58 1996/01/19 04:00:31 dyson Exp $
41 * $Id: vnode_pager.c,v 1.59 1996/03/19 05:13:22 dyson Exp $
42 */
43
44/*
45 * Page to/from files (vnodes).
46 */
47
48/*
49 * TODO:

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

290 if (nsize == object->un_pager.vnp.vnp_size)
291 return;
292
293 /*
294 * File has shrunk. Toss any cached pages beyond the new EOF.
295 */
296 if (nsize < object->un_pager.vnp.vnp_size) {
297 vm_ooffset_t nsizerounded;
42 */
43
44/*
45 * Page to/from files (vnodes).
46 */
47
48/*
49 * TODO:

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

290 if (nsize == object->un_pager.vnp.vnp_size)
291 return;
292
293 /*
294 * File has shrunk. Toss any cached pages beyond the new EOF.
295 */
296 if (nsize < object->un_pager.vnp.vnp_size) {
297 vm_ooffset_t nsizerounded;
298 nsizerounded = IDX_TO_OFF(OFF_TO_IDX(nsize + PAGE_SIZE - 1));
298 nsizerounded = IDX_TO_OFF(OFF_TO_IDX(nsize + PAGE_MASK));
299 if (nsizerounded < object->un_pager.vnp.vnp_size) {
300 vm_object_page_remove(object,
299 if (nsizerounded < object->un_pager.vnp.vnp_size) {
300 vm_object_page_remove(object,
301 OFF_TO_IDX(nsize + PAGE_SIZE - 1),
301 OFF_TO_IDX(nsize + PAGE_MASK),
302 OFF_TO_IDX(object->un_pager.vnp.vnp_size),
303 FALSE);
304 }
305 /*
306 * this gets rid of garbage at the end of a page that is now
307 * only partially backed by the vnode...
308 */
309 if (nsize & PAGE_MASK) {

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

315 kva = vm_pager_map_page(m);
316 bzero((caddr_t) kva + (nsize & PAGE_MASK),
317 (int) (round_page(nsize) - nsize));
318 vm_pager_unmap_page(kva);
319 }
320 }
321 }
322 object->un_pager.vnp.vnp_size = nsize;
302 OFF_TO_IDX(object->un_pager.vnp.vnp_size),
303 FALSE);
304 }
305 /*
306 * this gets rid of garbage at the end of a page that is now
307 * only partially backed by the vnode...
308 */
309 if (nsize & PAGE_MASK) {

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

315 kva = vm_pager_map_page(m);
316 bzero((caddr_t) kva + (nsize & PAGE_MASK),
317 (int) (round_page(nsize) - nsize));
318 vm_pager_unmap_page(kva);
319 }
320 }
321 }
322 object->un_pager.vnp.vnp_size = nsize;
323 object->size = OFF_TO_IDX(nsize + PAGE_SIZE - 1);
323 object->size = OFF_TO_IDX(nsize + PAGE_MASK);
324}
325
326void
327vnode_pager_umount(mp)
328 register struct mount *mp;
329{
330 struct vnode *vp, *nvp;
331

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

513
514 /*
515 * free the buffer header back to the swap buffer pool
516 */
517 relpbuf(bp);
518 if (error)
519 break;
520
324}
325
326void
327vnode_pager_umount(mp)
328 register struct mount *mp;
329{
330 struct vnode *vp, *nvp;
331

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

513
514 /*
515 * free the buffer header back to the swap buffer pool
516 */
517 relpbuf(bp);
518 if (error)
519 break;
520
521 vm_page_set_validclean(m, (i * bsize) & (PAGE_SIZE-1), bsize);
521 vm_page_set_validclean(m, (i * bsize) & PAGE_MASK, bsize);
522 } else {
522 } else {
523 vm_page_set_validclean(m, (i * bsize) & (PAGE_SIZE-1), bsize);
523 vm_page_set_validclean(m, (i * bsize) & PAGE_MASK, bsize);
524 bzero((caddr_t) kva + i * bsize, bsize);
525 }
526 }
527 vm_pager_unmap_page(kva);
528 pmap_clear_modify(VM_PAGE_TO_PHYS(m));
529 m->flags &= ~PG_ZERO;
530 if (error) {
531 return VM_PAGER_ERROR;

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

892 ncount = count;
893
894 poffset = IDX_TO_OFF(m[0]->pindex);
895 if (maxsize + poffset > object->un_pager.vnp.vnp_size) {
896 if (object->un_pager.vnp.vnp_size > poffset)
897 maxsize = object->un_pager.vnp.vnp_size - poffset;
898 else
899 maxsize = 0;
524 bzero((caddr_t) kva + i * bsize, bsize);
525 }
526 }
527 vm_pager_unmap_page(kva);
528 pmap_clear_modify(VM_PAGE_TO_PHYS(m));
529 m->flags &= ~PG_ZERO;
530 if (error) {
531 return VM_PAGER_ERROR;

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

892 ncount = count;
893
894 poffset = IDX_TO_OFF(m[0]->pindex);
895 if (maxsize + poffset > object->un_pager.vnp.vnp_size) {
896 if (object->un_pager.vnp.vnp_size > poffset)
897 maxsize = object->un_pager.vnp.vnp_size - poffset;
898 else
899 maxsize = 0;
900 ncount = (maxsize + PAGE_SIZE - 1) / PAGE_SIZE;
900 ncount = btoc(maxsize);
901 if (ncount < count) {
902 for (i = ncount; i < count; i++) {
903 rtvals[i] = VM_PAGER_BAD;
904 }
905#ifdef BOGUS
906 if (ncount == 0) {
907 printf("vnode_pager_putpages: write past end of file: %d, %lu\n",
908 poffset,

--- 56 unchanged lines hidden ---
901 if (ncount < count) {
902 for (i = ncount; i < count; i++) {
903 rtvals[i] = VM_PAGER_BAD;
904 }
905#ifdef BOGUS
906 if (ncount == 0) {
907 printf("vnode_pager_putpages: write past end of file: %d, %lu\n",
908 poffset,

--- 56 unchanged lines hidden ---