Messages in this thread | | | Date | Tue, 27 Jun 2006 03:44:52 +1000 | From | Nick Piggin <> | Subject | Re: [PATCH] Fix kernel BUGs when enable SLOB allocator |
| |
Aubrey wrote: > Hi all, > > When enable the SLOB allocator on a nommu system(uClinux), the > following bug occurs when remove a large file. > ========================================================= > root:~> cp /bin/busybox /busy > root:~> ls -l /bin/busybox /busy > -rwxr-xr-x 1 0 0 423904 /bin/busybox > -rwxr-xr-x 1 0 0 423904 /busy > root:~> md5sum /bin/busybox > 7db253a2259ab71bc854c9e5dac544d6 /bin/busybox > root:~> md5sum /busy > 7db253a2259ab71bc854c9e5dac544d6 /busy > root:~> rm /busy > kernel BUG at mm/nommu.c:124! > Kernel panic - not syncing: BUG! > ========================================================= > > The root cause is the slob allocator get the pages but does not set > the PageSlab bit. > So when kobjsize is called, the bug occurs. > > My patch found a simple way to fix the issue. When SLOB is enabled, we > don't need to set the PageSlab bit, and don't need to check the > PageSlab bit(PageSlab(page)) in the kobjsize routine call. > > Signed-off-by: Aubrey Li <aubrey.adi@gmail.com> > > ------ > diff --git a/mm/nommu.c b/mm/nommu.c > index 029fada..8a54391 100644 > --- a/mm/nommu.c > +++ b/mm/nommu.c > @@ -18,7 +18,9 @@ #include <linux/swap.h> > #include <linux/file.h> > #include <linux/highmem.h> > #include <linux/pagemap.h> > -#include <linux/slab.h> > +#ifdef CONFIG_SLAB > +# include <linux/slab.h> > +#endif > #include <linux/vmalloc.h> > #include <linux/ptrace.h> > #include <linux/blkdev.h> > @@ -112,7 +114,9 @@ unsigned int kobjsize(const void *objp) > if (!objp || !((page = virt_to_page(objp)))) > return 0; > > +#ifdef CONFIG_SLAB > if (PageSlab(page)) > +#endif > return ksize(objp);
Then what if objp isn't a slob object?
I think the better fix would be to make slob set PageSlab.
-- SUSE Labs, Novell Inc. Send instant messages to your online friends http://au.messenger.yahoo.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |