|
@@ -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
|