Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src/sys/uvm



Module Name:    src
Committed By:   thorpej
Date:           Tue Mar  4 06:18:55 UTC 2003

Modified Files:
        src/sys/uvm: uvm_init.c uvm_loan.c uvm_loan.h

Log Message:
Fix the following pathological scanario:
* User allocates ZFOD region, but does not actually touch the buffer
  to fault in the pages.
* In a loop, user writes this buffer to a network socket, triggering
  sosend_loan().
* uvm_loan() calls uvm_loanzero() once for each page in the loaned
  region (since the pages have not yet faulted in).  This causes a
  page to be allocated and zero'd.  The result is the kernel spends
  a lot of time allocating and zero'ing pages.

This fixes creates a special object which owns a single zero'd page.
This single zero'd page is used to satisfy all loans of non-resident
ZFOD mappings.

Thanks to Allen Briggs for discovering the problem and for providing
an initial patch.


To generate a diff of this commit:
cvs rdiff -r1.15 -r1.16 src/sys/uvm/uvm_init.c
cvs rdiff -r1.39 -r1.40 src/sys/uvm/uvm_loan.c
cvs rdiff -r1.9 -r1.10 src/sys/uvm/uvm_loan.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.




Home | Main Index | Thread Index | Old Index