]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r318995
authoralc <alc@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Thu, 15 Jun 2017 03:58:23 +0000 (03:58 +0000)
committeralc <alc@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Thu, 15 Jun 2017 03:58:23 +0000 (03:58 +0000)
commitd187b12185ae6fd397b2fee861590ce2e5f1b2ba
treee2aec413b8ade3912b3f3c07525c5035a179ed9f
parenta3f1e5e331f689a5061cb7bacfad456481050c38
MFC r318995
  In r118390, the swap pager's approach to striping swap allocation over
  multiple devices was changed.  However, swapoff_one() was not fully and
  correctly converted.  In particular, with r118390's introduction of a per-
  device blist, the maximum swap block size, "dmmax", became irrelevant to
  swapoff_one()'s operation.  Moreover, swapoff_one() was performing out-of-
  range operations on the per-device blist that were silently ignored by
  blist_fill().

  This change corrects both of these problems with swapoff_one(), which will
  allow us to potentially increase MAX_PAGEOUT_CLUSTER.  Previously,
  swapoff_one() would panic inside of blist_fill() if you increased
  MAX_PAGEOUT_CLUSTER.

MFC r319001
  After r118390, the variable "dmmax" was neither the correct strip size
  nor the correct maximum block size.  Moreover, after r318995, it serves
  no purpose except to provide information to user space through a read-
  sysctl.

  This change eliminates the variable "dmmax" but retains the sysctl.  It
  also corrects the value returned by the sysctl.

MFC r319604
  Halve the memory being internally allocated by the blist allocator.  In
  short, half of the memory that is allocated to implement the radix tree is
  wasted because we did not change "u_daddr_t" to be a 64-bit unsigned int
  when we changed "daddr_t" to be a 64-bit (signed) int.  (See r96849 and
  r96851.)

MFC r319612
  When the function blist_fill() was added to the kernel in r107913, the swap
  pager used a different scheme for striping the allocation of swap space
  across multiple devices.  And, although blist_fill() was intended to support
  fill operations with large counts, the old striping scheme never performed a
  fill larger than the stripe size.  Consequently, the misplacement of a
  sanity check in blst_meta_fill() went undetected.  Now, moving forward in
  time to r118390, a new scheme for striping was introduced that maintained a
  blist allocator per device, but as noted in r318995, swapoff_one() was not
  fully and correctly converted to the new scheme.  This change completes what
  was started in r318995 by fixing the underlying bug in blst_meta_fill() that
  stops swapoff_one() from simply performing a single blist_fill() operation.

MFC r319627
  Starting in r118390, swaponsomething() began to reserve the blocks at the
  beginning of a swap area for a disk label.  However, neither r118390 nor
  r118544, which increased the reservation from one to two blocks, correctly
  accounted for these blocks when updating the variable "swap_pager_avail".
  This change corrects that error.

MFC r319655
  Originally, this file could be compiled as a user-space application for
  testing purposes.  However, over the years, various changes to the kernel
  have broken this feature.  This revision applies some fixes to get user-
  space compilation working again.  There are no changes in this revision
  to code that is used by the kernel.

git-svn-id: svn://svn.freebsd.org/base/stable/10@319965 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/kern/subr_blist.c
sys/sys/blist.h
sys/vm/swap_pager.c