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); --
| Greg Kroah-Hartman | [PATCH 004/196] Chinese: add translation of SubmittingPatches |
| Jeff Garzik | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Paul E. McKenney | [PATCH RFC 3/9] RCU: Preemptible RCU |
| James Bottomley | Re: Integration of SCST in the mainstream Linux kernel |
git: | |
| Gerrit Renker | [PATCH 13/37] dccp: Deprecate Ack Ratio sysctl |
| Patrick McHardy | Re: [GIT]: Networking |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
