Skip to contentSkip to conversation

xfs: use scalable vmap API

PATCH New Alex Elder 1 participant 1 message Mar 16, 2010 XFS filesystem

lore
Share & tools
lore

Alex Elder

author
#0 lore raw

PATCH 2/2 xfs: use scalable vmap API

Re-apply a commit that had been reverted due to regressions that have since been fixed.

From 95f8e302c04c0b0c6de35ab399a5551605eeb006 Mon Sep 17 00:00:00 2001
From: Nick Piggin <[email protected]>
Date: Tue, 6 Jan 2009 14:43:09 +1100

Implement XFS's large buffer support with the new vmap APIs. See the vmap rewrite (db64fe02) for some numbers. The biggest improvement that comes from using the new APIs is avoiding the global KVA allocation lock on every call.

Only modifications here were a minor reformat, plus making the patch apply given the new use of xfs_buf_is_vmapped().

---
 fs/xfs/linux-2.6/xfs_buf.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
fs/xfs/linux-2.6/xfs_buf.c +4 -3
Index: b/fs/xfs/linux-2.6/xfs_buf.c
===================================================================
@@ -268,7 +268,8 @@ xfs_buf_free(
 		uint		i;
 
 		if (xfs_buf_is_vmapped(bp))
-			vunmap(bp->b_addr - bp->b_offset);
+			vm_unmap_ram(bp->b_addr - bp->b_offset,
+					bp->b_page_count);
 
 		for (i = 0; i < bp->b_page_count; i++) {
 			struct page	*page = bp->b_pages[i];
@@ -388,8 +389,8 @@ _xfs_buf_map_pages(
 		bp->b_addr = page_address(bp->b_pages[0]) + bp->b_offset;
 		bp->b_flags |= XBF_MAPPED;
 	} else if (flags & XBF_MAPPED) {
-		bp->b_addr = vmap(bp->b_pages, bp->b_page_count,
-					VM_MAP, PAGE_KERNEL);
+		bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count,
+					-1, PAGE_KERNEL);
 		if (unlikely(bp->b_addr == NULL))
 			return -ENOMEM;
 		bp->b_addr += bp->b_offset;

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs