2007-10-15 21:50:49

by Jeremy Fitzhardinge

[permalink] [raw]
Subject: [PATCH 12/12] xfs: eagerly remove vmap mappings to avoid upsetting Xen

XFS leaves stray mappings around when it vmaps memory to make it
virtually contigious. This upsets Xen if one of those pages is being
recycled into a pagetable, since it finds an extra writable mapping of
the page.

This patch solves the problem in a brute force way, by making XFS
always eagerly unmap its mappings. David Chinner says this shouldn't
have any performance impact on filesystems with default block sizes;
it will only affect filesystems with large block sizes.

Signed-off-by: Jeremy Fitzhardinge <[email protected]>
Cc: David Chinner <[email protected]>
Cc: Nick Piggin <[email protected]>
Cc: XFS masters <[email protected]>
Cc: Stable kernel <[email protected]>
Cc: Morten =?utf-8?q?B=C3=B8geskov?= <[email protected]>
Cc: Mark Williamson <[email protected]>

---
fs/xfs/linux-2.6/xfs_buf.c | 13 +++++++++++++
1 file changed, 13 insertions(+)

===================================================================
--- a/fs/xfs/linux-2.6/xfs_buf.c
+++ b/fs/xfs/linux-2.6/xfs_buf.c
@@ -186,6 +186,19 @@ free_address(
void *addr)
{
a_list_t *aentry;
+
+#ifdef CONFIG_XEN
+ /*
+ * Xen needs to be able to make sure it can get an exclusive
+ * RO mapping of pages it wants to turn into a pagetable. If
+ * a newly allocated page is also still being vmap()ed by xfs,
+ * it will cause pagetable construction to fail. This is a
+ * quick workaround to always eagerly unmap pages so that Xen
+ * is happy.
+ */
+ vunmap(addr);
+ return;
+#endif

aentry = kmalloc(sizeof(a_list_t), GFP_NOWAIT);
if (likely(aentry)) {

--


2007-10-15 23:05:27

by David Chinner

[permalink] [raw]
Subject: Re: [PATCH 12/12] xfs: eagerly remove vmap mappings to avoid upsetting Xen

On Mon, Oct 15, 2007 at 01:48:52PM -0700, Jeremy Fitzhardinge wrote:
> XFS leaves stray mappings around when it vmaps memory to make it
> virtually contigious. This upsets Xen if one of those pages is being
> recycled into a pagetable, since it finds an extra writable mapping of
> the page.
>
> This patch solves the problem in a brute force way, by making XFS
> always eagerly unmap its mappings. David Chinner says this shouldn't
> have any performance impact on filesystems with default block sizes;
> it will only affect filesystems with large block sizes.

Looks fine, Jeremy. I'll pull this into our dev tree and it should
get pushed with the .24 XFS merge (if someone doesn't pull these
patches directly).

Cheers,

Dave.
--
Dave Chinner
Principal Engineer
SGI Australian Software Group