Diff for /src/sys/vm/vnode_pager.c between versions 1.13 and 1.14

version 1.13, 2004/05/08 04:11:45 version 1.14, 2004/05/13 17:40:19
Line 60 Line 60
 #include <sys/buf.h>  #include <sys/buf.h>
 #include <sys/vmmeter.h>  #include <sys/vmmeter.h>
 #include <sys/conf.h>  #include <sys/conf.h>
   #include <sys/sfbuf.h>
   
 #include <vm/vm.h>  #include <vm/vm.h>
 #include <vm/vm_object.h>  #include <vm/vm_object.h>
Line 299  vnode_pager_setsize(struct vnode *vp, vm Line 300  vnode_pager_setsize(struct vnode *vp, vm
                         if (m && m->valid) {                          if (m && m->valid) {
                                 int base = (int)nsize & PAGE_MASK;                                  int base = (int)nsize & PAGE_MASK;
                                 int size = PAGE_SIZE - base;                                  int size = PAGE_SIZE - base;
                                   struct sf_buf *sf;
   
                                 /*                                  /*
                                  * Clear out partial-page garbage in case                                   * Clear out partial-page garbage in case
                                  * the page has been mapped.                                   * the page has been mapped.
                                  */                                   */
                                kva = vm_pager_map_page(m);                                sf = sf_buf_alloc(m, SFBA_QUICK);
                                 kva = sf_buf_kva(sf);
                                 bzero((caddr_t)kva + base, size);                                  bzero((caddr_t)kva + base, size);
                                vm_pager_unmap_page(kva);                                sf_buf_free(sf);
   
                                 /*                                  /*
                                  * XXX work around SMP data integrity race                                   * XXX work around SMP data integrity race
Line 413  vnode_pager_input_smlfs(vm_object_t obje Line 416  vnode_pager_input_smlfs(vm_object_t obje
         struct vnode *dp, *vp;          struct vnode *dp, *vp;
         struct buf *bp;          struct buf *bp;
         vm_offset_t kva;          vm_offset_t kva;
           struct sf_buf *sf;
         int fileaddr;          int fileaddr;
         vm_offset_t bsize;          vm_offset_t bsize;
         int error = 0;          int error = 0;
Line 426  vnode_pager_input_smlfs(vm_object_t obje Line 430  vnode_pager_input_smlfs(vm_object_t obje
   
         VOP_BMAP(vp, 0, &dp, 0, NULL, NULL);          VOP_BMAP(vp, 0, &dp, 0, NULL, NULL);
   
        kva = vm_pager_map_page(m);        sf = sf_buf_alloc(m, 0);
         kva = sf_buf_kva(sf);
   
         for (i = 0; i < PAGE_SIZE / bsize; i++) {          for (i = 0; i < PAGE_SIZE / bsize; i++) {
                 vm_ooffset_t address;                  vm_ooffset_t address;
Line 480  vnode_pager_input_smlfs(vm_object_t obje Line 485  vnode_pager_input_smlfs(vm_object_t obje
                         bzero((caddr_t) kva + i * bsize, bsize);                          bzero((caddr_t) kva + i * bsize, bsize);
                 }                  }
         }          }
        vm_pager_unmap_page(kva);        sf_buf_free(sf);
         pmap_clear_modify(m);          pmap_clear_modify(m);
         vm_page_flag_clear(m, PG_ZERO);          vm_page_flag_clear(m, PG_ZERO);
         if (error) {          if (error) {
Line 502  vnode_pager_input_old(vm_object_t object Line 507  vnode_pager_input_old(vm_object_t object
         int error;          int error;
         int size;          int size;
         vm_offset_t kva;          vm_offset_t kva;
           struct sf_buf *sf;
   
         error = 0;          error = 0;
   
Line 519  vnode_pager_input_old(vm_object_t object Line 525  vnode_pager_input_old(vm_object_t object
                  * Allocate a kernel virtual address and initialize so that                   * Allocate a kernel virtual address and initialize so that
                  * we can use VOP_READ/WRITE routines.                   * we can use VOP_READ/WRITE routines.
                  */                   */
                kva = vm_pager_map_page(m);                sf = sf_buf_alloc(m, 0);
                 kva = sf_buf_kva(sf);
   
                 aiov.iov_base = (caddr_t) kva;                  aiov.iov_base = (caddr_t) kva;
                 aiov.iov_len = size;                  aiov.iov_len = size;
Line 540  vnode_pager_input_old(vm_object_t object Line 547  vnode_pager_input_old(vm_object_t object
                         else if (count != PAGE_SIZE)                          else if (count != PAGE_SIZE)
                                 bzero((caddr_t) kva + count, PAGE_SIZE - count);                                  bzero((caddr_t) kva + count, PAGE_SIZE - count);
                 }                  }
                vm_pager_unmap_page(kva);                sf_buf_free(sf);
         }          }
         pmap_clear_modify(m);          pmap_clear_modify(m);
         vm_page_undirty(m);          vm_page_undirty(m);

Removed from v.1.13  
changed lines
  Added in v.1.14