[PATCH] nommu: fix kobjsize() for SLOB and SLUB

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <dhowells@...>
Cc: <clameter@...>, <mpm@...>, <lethal@...>, <linux-kernel@...>
Date: Thursday, May 22, 2008 - 12:09 pm

From: Christoph Lameter <clameter@sgi.com>

As reported by Paul Mundt, kobjsize() does not work properly with SLOB and SLUB
that re-use parts of struct page for their own purposes. Fix it up by using
compound_order() for compound pages that don't have PageSlab set.

Reported-by: Paul Mundt <lethal@linux-sh.org>
Cc: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
---
I kept the original object size calculation for non-compound pages in this 
version. It looks like the nommu code uses kobjsize() for all sorts of 
interesting things.

 mm/nommu.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

Index: slab-2.6/mm/nommu.c
===================================================================
--- slab-2.6.orig/mm/nommu.c	2008-05-22 18:59:01.000000000 +0300
+++ slab-2.6/mm/nommu.c	2008-05-22 19:00:36.000000000 +0300
@@ -109,12 +109,22 @@
 	 * If the object we have should not have ksize performed on it,
 	 * return size of 0
 	 */
-	if (!objp || (unsigned long)objp >= memory_end || !((page = virt_to_page(objp))))
+	if (!objp)
+		return 0;
+
+	if ((unsigned long) objp >= memory_end)
+		return 0;
+
+	page = virt_to_head_page(objp);
+	if (!page)
 		return 0;
 
 	if (PageSlab(page))
 		return ksize(objp);
 
+	if (PageCompound(page))
+		return PAGE_SIZE << compound_order(page);
+
 	BUG_ON(page->index < 0);
 	BUG_ON(page->index >= MAX_ORDER);
 
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] nommu: fix kobjsize() for SLOB and SLUB, Pekka J Enberg, (Thu May 22, 12:09 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, David Howells, (Wed May 28, 9:12 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, David Howells, (Wed May 28, 10:27 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, David Howells, (Wed May 28, 10:09 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Christoph Lameter, (Wed May 28, 1:26 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, David Howells, (Wed May 28, 1:38 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Mike Frysinger, (Wed May 28, 4:35 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, David Howells, (Thu May 29, 9:03 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Mike Frysinger, (Thu May 29, 4:25 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Christoph Lameter, (Thu May 29, 4:30 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Mike Frysinger, (Thu May 29, 4:51 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Christoph Lameter, (Thu May 29, 5:29 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Mike Frysinger, (Fri May 30, 12:18 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Pekka J Enberg, (Wed May 28, 9:17 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, David Howells, (Wed May 28, 9:40 am)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Paul Mundt, (Thu May 22, 7:40 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Christoph Lameter, (Thu May 22, 7:45 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Paul Mundt, (Thu May 22, 7:50 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Christoph Lameter, (Thu May 22, 8:04 pm)
Re: [PATCH] nommu: fix kobjsize() for SLOB and SLUB, Christoph Lameter, (Thu May 22, 12:48 pm)