mirror_zfs/module/spl
Brian Behlendorf 043f9b5724 Disable FS reclaim when allocating new slabs
Allowing the spl_cache_grow_work() function to reclaim inodes
allows for two unlikely deadlocks.  Therefore, we clear __GFP_FS
for these allocations.  The two deadlocks are:

* While holding the ZFS_OBJ_HOLD_ENTER(zsb, obj1) lock a function
  calls kmem_cache_alloc() which happens to need to allocate a
  new slab.  To allocate the new slab we enter FS level reclaim
  and attempt to evict several inodes.  To evict these inodes we
  need to take the ZFS_OBJ_HOLD_ENTER(zsb, obj2) lock and it
  just happens that obj1 and obj2 use the same hashed lock.

* Similar to the first case however instead of getting blocked
  on the hash lock we block in txg_wait_open() which is waiting
  for the next txg which isn't coming because the txg_sync
  thread is blocked in kmem_cache_alloc().

Note this isn't a 100% fix because vmalloc() won't strictly
honor __GFP_FS.  However, it practice this is sufficient because
several very unlikely things must all occur concurrently.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue zfsonlinux/zfs#1101
2012-11-27 13:43:27 -08:00
..
Makefile.in Add script for builtin module building. 2012-07-26 15:13:09 -07:00
spl-atomic.c Linux 2.6.39 compat, DEFINE_SPINLOCK() 2011-04-20 12:01:11 -07:00
spl-condvar.c Condition variable reference counts 2012-11-06 14:48:55 -08:00
spl-cred.c Add crgetfsuid()/crgetfsgid() helpers 2011-03-22 12:18:44 -07:00
spl-debug.c Wrap trace_set_debug_header in trace_[get|put]_tcd 2012-08-23 10:01:20 -07:00
spl-err.c Add --enable-debug-log configure option 2012-02-02 11:27:54 -08:00
spl-generic.c Determine the hostid on demand. 2012-07-26 15:14:02 -07:00
spl-kmem.c Disable FS reclaim when allocating new slabs 2012-11-27 13:43:27 -08:00
spl-kobj.c Remove VN_HOLD/VN_RELE/VOP_PUTPAGE 2011-01-12 11:38:05 -08:00
spl-kstat.c Add KSTAT_TYPE_TXG type 2012-11-02 15:17:40 -07:00
spl-mutex.c Fix undefined reference on spl_mutex_spin_max(). 2012-07-26 14:54:53 -07:00
spl-proc.c Improved vmem cached deadlock detection 2012-11-06 14:54:15 -08:00
spl-rwlock.c Public Release Prep 2010-05-17 15:18:00 -07:00
spl-taskq.c Remove TQ_SLEEP -> KM_SLEEP mapping 2012-09-12 11:41:42 -07:00
spl-thread.c Switch KM_SLEEP to KM_PUSHPAGE 2012-09-12 12:27:09 -07:00
spl-time.c Minor 32-bit fix cast to hrtime_t before the mutliply. 2010-05-23 09:51:17 -07:00
spl-tsd.c Switch KM_SLEEP to KM_PUSHPAGE 2012-10-11 16:22:29 -07:00
spl-vnode.c Linux 3.6 compat, kern_path_locked() added 2012-10-14 16:26:21 -07:00
spl-xdr.c Prefix all SPL debug macros with 'S' 2010-07-20 13:30:40 -07:00
spl-zlib.c Set KMC_NOEMERGENCY for zlib workspaces 2012-09-07 14:36:26 -07:00