kernel - Hold vm_token() for certain buf/bio/vm_page interactions
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 28 Nov 2010 06:28:52 +0000 (22:28 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 28 Nov 2010 17:32:15 +0000 (09:32 -0800)
commit3730eb0ba85c1be539aa4917aeefaa78f00a8946
treecec2196356b3d2c5f34642bf0ccc5f98e3792715
parent0f5d38540d3b182134603cc711aa164378bd3c2b
kernel - Hold vm_token() for certain buf/bio/vm_page interactions

* Hold the vm_token when messing around with page valid and dirty bits
  in buffer cache operations.  Such race conditions are possible but would
  be very rare.

* Fix inconsistent use of bio2.bio_offset when swapcache intercepts an
  I/O operation.  When this case occurs the normal filesystem VOP_STRATEGY
  function will not be called and any assumption that bio2.bio_offset
  will represent a block device offset will be invalid.

  To deal with this case swapcache will re-set bio_offset to NOOFFSET.
  Filesystems use this value to determine that no block device offset
  has been cached for a logical file block.

Reported-by: Jan Lentfer <Jan.Lentfer@web.de> (bio_offset issue)
sys/kern/vfs_bio.c