OpenZFS on Linux and FreeBSD
Go to file
Li Wei 4be55565fe Fix stack overflow in vn_rdwr() due to memory reclaim
Unless __GFP_IO and __GFP_FS are removed from the file mapping gfp
mask we may enter memory reclaim during IO.  In this case shrink_slab()
entered another file system which is notoriously hungry for stack.
This additional stack usage may cause a stack overflow.  This patch
removes __GFP_IO and __GFP_FS from the mapping gfp mask of each file
during vn_open() to avoid any reclaim in the vn_rdwr() IO path.  The
original mask is then restored at vn_close() time.  Hats off to the
loop driver which does something similiar for the same reason.

  [...]
  shrink_slab+0xdc/0x153
  try_to_free_pages+0x1da/0x2d7
  __alloc_pages+0x1d7/0x2da
  do_generic_mapping_read+0x2c9/0x36f
  file_read_actor+0x0/0x145
  __generic_file_aio_read+0x14f/0x19b
  generic_file_aio_read+0x34/0x39
  do_sync_read+0xc7/0x104
  vfs_read+0xcb/0x171
  :spl:vn_rdwr+0x2b8/0x402
  :zfs:vdev_file_io_start+0xad/0xe1
  [...]

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-08-12 09:34:33 -07:00
cmd Add Debian and Slackware style packaging via alien 2010-07-27 15:52:34 -07:00
config Correctly handle rwsem_is_locked() behavior 2010-08-10 16:43:00 -07:00
include Fix stack overflow in vn_rdwr() due to memory reclaim 2010-08-12 09:34:33 -07:00
lib Add Debian and Slackware style packaging via alien 2010-07-27 15:52:34 -07:00
module Fix stack overflow in vn_rdwr() due to memory reclaim 2010-08-12 09:34:33 -07:00
patches Reimplement rwlocks for Linux lock profiling/analysis. 2009-09-18 16:09:47 -07:00
scripts Add Debian and Slackware style packaging via alien 2010-07-27 15:52:34 -07:00
.gitignore Ignore unsigned module build products 2010-03-11 14:29:17 -08:00
AUTHORS Public Release Prep 2010-05-17 15:18:00 -07:00
COPYING Public Release Prep 2010-05-17 15:18:00 -07:00
ChangeLog Re-Prep for 0.4.9 tag with a few more fixes and updated ChangeLog 2010-05-21 14:17:44 -07:00
DISCLAIMER Public Release Prep 2010-05-17 15:18:00 -07:00
INSTALL Public Release Prep 2010-05-17 15:18:00 -07:00
META Update META to version 0.5.0 2010-06-11 15:57:25 -07:00
Makefile.am Add uninstall Makefile targets 2010-07-28 14:55:32 -07:00
Makefile.in Add uninstall Makefile targets 2010-07-28 14:55:32 -07:00
README.markdown Add basic README 2010-06-29 14:18:18 -07:00
autogen.sh Public Release Prep 2010-05-17 15:18:00 -07:00
configure Correctly handle rwsem_is_locked() behavior 2010-08-10 16:43:00 -07:00
configure.ac Add Debian and Slackware style packaging via alien 2010-07-27 15:52:34 -07:00
spl-modules.spec.in Minor spec file cleanup for RHEL6 package dependency. 2010-05-21 11:53:49 -07:00
spl.spec.in Remove usage of the __id_u macro for portability. 2009-10-05 12:51:58 -07:00
spl_config.h.in Correctly handle rwsem_is_locked() behavior 2010-08-10 16:43:00 -07:00

README.markdown

The Solaris Porting Layer (SPL) is a Linux kernel module which provides many of the Solaris kernel APIs. This shim layer makes it possible to run Solaris kernel code in the Linux kernel with relatively minimal modification. This can be particularly useful when you want to track upstream Solaris development closely and dont want the overhead of maintaining a large patch which converts Solaris primitives to Linux primitives.

Documentation for building, configuring, and using the SPL can be found at: http://wiki.github.com/behlendorf/spl/