Stephen Tweedie:2.1.89pre1
commit717def95558e43233c3eeeb834a0374f50318b17
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:14:45 +0000 (23 15:14 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:14:45 +0000 (23 15:14 -0500)
tree01295a834f68ef7abf1100bebaeaa7d546ad864f
parent3c99713c4830dd6eccf49e74132a3b2add805368
Stephen Tweedie:

* 2.1.88, adds a bunch of new functionality to
  the swapper.  The main changes are:

* All swapping goes through the swap cache (aka. page cache) now.

* There is no longer a swap lock map.  Because we need to atomically
  test and create a new swap-cache page in order to do swap IO, it is
  sufficient just to lock the struct page itself.  Having only one
  layer of locking to deal with removes a number of races concerning
  swapping shared pages.

* We can swap shared pages, and still keep them shared when they are
  swapped back in!!!  Currently, only private shared pages (as in pages
  shared after a fork()) benefit from this, but the basic mechanism will
  be appropriate for MAP_ANONYMOUS | MAP_SHARED pages too
  (implementation to follow).  Pages will remain shared after a swapoff.

* The page cache is now quite happy dealing with swap-cache pages too.
  In particular, write-ahead and read-ahead of swap through the page
  cache will work fine (and in fact, write-ahead does get done already
  under certain circumstances with this patch --- that's essentially how
  the swapping of shared pages gets done).  Support code to perform
  asynchronous readahead of swap is included, but is not actually used
  anywhere yet.

  I've tested with a number of forked processes running with a shared
  working set larger than physical memory, and with SysV shared memory.
  I haven't found any problems with it so far.

Linus: I've also changed the way we consider us to need more memory in kswapd,
       but that was entirely orthogonal and did not impact these patches. ]

[Changelog pieced together by davej]
54 files changed:
CREDITS
Makefile
arch/alpha/config.in
arch/alpha/kernel/Makefile
arch/alpha/kernel/bios32.c
arch/alpha/kernel/irq.c
arch/alpha/kernel/pyxis.c
arch/alpha/kernel/setup.c
arch/alpha/kernel/smc37c669.c [new file with mode: 0644]
arch/alpha/kernel/smc37c93x.c [new file with mode: 0644]
arch/i386/kernel/ldt.c
drivers/acorn/block/fd1772.c
drivers/acorn/scsi/cumana_1.c
drivers/acorn/scsi/ecoscsi.c
drivers/acorn/scsi/oak.c
drivers/block/floppy.c
drivers/char/rtc.c
drivers/scsi/Config.in
drivers/scsi/sr.c
drivers/sound/sound_firmware.c
fs/buffer.c
fs/fat/file.c
fs/inode.c
fs/ioctl.c
fs/isofs/dir.c
fs/isofs/inode.c
fs/locks.c
fs/open.c
fs/read_write.c
fs/readdir.c
fs/stat.c
include/asm-alpha/hwrpb.h
include/asm-alpha/irq.h
include/asm-alpha/pyxis.h
include/asm-i386/floppy.h
include/linux/file.h
include/linux/fs.h
include/linux/iso_fs_i.h
include/linux/kerneld.h
include/linux/mc146818rtc.h
include/linux/mm.h
include/linux/pci.h
include/linux/swap.h
include/net/neighbour.h
ipc/shm.c
kernel/sysctl.c
mm/filemap.c
mm/memory.c
mm/page_alloc.c
mm/page_io.c
mm/swap_state.c
mm/swapfile.c
mm/vmscan.c
scripts/lxdialog/checklist.c