Merge branch 'master' into for-linus
[pandora-kernel.git] / fs / xfs / linux-2.6 / xfs_aops.c
index 089eaca..a0fa3bf 100644 (file)
@@ -1332,6 +1332,21 @@ xfs_vm_writepage(
 
        trace_xfs_writepage(inode, page, 0);
 
+       /*
+        * Refuse to write the page out if we are called from reclaim context.
+        *
+        * This is primarily to avoid stack overflows when called from deep
+        * used stacks in random callers for direct reclaim, but disabling
+        * reclaim for kswap is a nice side-effect as kswapd causes rather
+        * suboptimal I/O patters, too.
+        *
+        * This should really be done by the core VM, but until that happens
+        * filesystems like XFS, btrfs and ext4 have to take care of this
+        * by themselves.
+        */
+       if (current->flags & PF_MEMALLOC)
+               goto out_fail;
+
        /*
         * We need a transaction if:
         *  1. There are delalloc buffers on the page