login
Login
/
Register
Search
Search this site:
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2010
»
July
»
31
Re: [S+Q2 07/19] slub: Allow removal of slab caches during boot
view
thread
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
[view in full thread]
From: Pekka Enberg
Subject:
Re: [S+Q2 07/19] slub: Allow removal of slab caches during boot
Date: Saturday, July 31, 2010 - 2:41 am
Christoph Lameter wrote:
quoted text
>> Ok so I may be a bit sleepy or something but I still fail to see how >> this whole thing isn't totally racy... >> >> AFAIK. By the time we switch the slab state, we -do- have all CPUs up >> and can race happily between creating slab caches and creating the sysfs >> files... > > If kmem_cache_init_late() is called after all other processors are up then > we need to serialize the activities. But we cannot do that since the > slub_lock is taken during kmalloc() for dynamic dma creation (lockdep > will complain although we never use dma caches for sysfs....). > > After removal of dynamic dma creation we can take the lock for all of slab > creation and removal. > > Like in the following patch: > > Subject: slub: Allow removal of slab caches during boot > > Serialize kmem_cache_create and kmem_cache_destroy using the slub_lock. Only > possible after the use of the slub_lock during dynamic dma creation has been > removed. > > Then make sure that the setup of the slab sysfs entries does not race > with kmem_cache_create and kmem_cache destroy. > > If a slab cache is removed before we have setup sysfs then simply skip over > the sysfs handling. > > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Roland Dreier <rdreier@cisco.com> > Signed-off-by: Christoph Lameter <cl@linux-foundation.org>
Christoph, Ben, should I queue this up for 2.6.36?
quoted text
> > --- > mm/slub.c | 24 +++++++++++++++--------- > 1 file changed, 15 insertions(+), 9 deletions(-) > > Index: linux-2.6/mm/slub.c > =================================================================== > --- linux-2.6.orig/mm/slub.c 2010-07-19 11:02:15.000000000 -0500 > +++ linux-2.6/mm/slub.c 2010-07-19 11:33:32.000000000 -0500 > @@ -2490,7 +2490,6 @@ void kmem_cache_destroy(struct kmem_cach > s->refcount--; > if (!s->refcount) { > list_del(&s->list); > - up_write(&slub_lock); > if (kmem_cache_close(s)) { > printk(KERN_ERR "SLUB %s: %s called for cache that " > "still has objects.\n", s->name, __func__); > @@ -2499,8 +2498,8 @@ void kmem_cache_destroy(struct kmem_cach > if (s->flags & SLAB_DESTROY_BY_RCU) > rcu_barrier(); > sysfs_slab_remove(s); > - } else > - up_write(&slub_lock); > + } > + up_write(&slub_lock); > } > EXPORT_SYMBOL(kmem_cache_destroy); > > @@ -3226,14 +3225,12 @@ struct kmem_cache *kmem_cache_create(con > */ > s->objsize = max(s->objsize, (int)size); > s->inuse = max_t(int, s->inuse, ALIGN(size, sizeof(void *))); > - up_write(&slub_lock); > > if (sysfs_slab_alias(s, name)) { > - down_write(&slub_lock); > s->refcount--; > - up_write(&slub_lock); > goto err; > } > + up_write(&slub_lock); > return s; > } > > @@ -3242,14 +3239,12 @@ struct kmem_cache *kmem_cache_create(con > if (kmem_cache_open(s, GFP_KERNEL, name, > size, align, flags, ctor)) { > list_add(&s->list, &slab_caches); > - up_write(&slub_lock); > if (sysfs_slab_add(s)) { > - down_write(&slub_lock); > list_del(&s->list); > - up_write(&slub_lock); > kfree(s); > goto err; > } > + up_write(&slub_lock); > return s; > } > kfree(s); > @@ -4507,6 +4502,13 @@ static int sysfs_slab_add(struct kmem_ca > > static void sysfs_slab_remove(struct kmem_cache *s) > { > + if (slab_state < SYSFS) > + /* > + * Sysfs has not been setup yet so no need to remove the > + * cache from sysfs. > + */ > + return; > + > kobject_uevent(&s->kobj, KOBJ_REMOVE); > kobject_del(&s->kobj); > kobject_put(&s->kobj); > @@ -4552,8 +4554,11 @@ static int __init slab_sysfs_init(void) > struct kmem_cache *s; > int err; > > + down_write(&slub_lock); > + > slab_kset = kset_create_and_add("slab", &slab_uevent_ops, kernel_kobj); > if (!slab_kset) { > + up_write(&slub_lock); > printk(KERN_ERR "Cannot register slab subsystem.\n"); > return -ENOSYS; > } > @@ -4578,6 +4583,7 @@ static int __init slab_sysfs_init(void) > kfree(al); > } > > + up_write(&slub_lock); > resiliency_test(); > return 0; > } > >
--
unsubscribe notice
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/
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
Messages in current thread:
[S+Q2 07/19] slub: Allow removal of slab caches during boot
, Christoph Lameter
, (Fri Jul 9, 12:07 pm)
Re: [S+Q2 07/19] slub: Allow removal of slab caches during ...
, David Rientjes
, (Wed Jul 14, 4:48 pm)
Re: [S+Q2 07/19] slub: Allow removal of slab caches during ...
, Benjamin Herrenschmidt
, (Sun Jul 18, 5:07 pm)
Re: [S+Q2 07/19] slub: Allow removal of slab caches during ...
, Christoph Lameter
, (Mon Jul 19, 9:39 am)
Re: [S+Q2 07/19] slub: Allow removal of slab caches during ...
, Pekka Enberg
, (Sat Jul 31, 2:41 am)
Re: [S+Q2 07/19] slub: Allow removal of slab caches during ...
, Christoph Lameter
, (Mon Aug 2, 8:36 am)
Re: [S+Q2 07/19] slub: Allow removal of slab caches during ...
, Pekka Enberg
, (Mon Aug 2, 9:32 pm)
Navigation
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Rusty Russell
Re: 2.6.22-rc3-mm1
Eric Sandeen
Re: [PATCH] xfs: do not pass unused params to xfs_flush_pages
Bill Fink
Re: [PATCH] net: add ability to clear stats via ethtool - e1000/pcnet32
David Miller
Re: NO_HZ: timer interrupt stuck
Jeffrey V. Merkey
Re: Versioning file system
git
:
Johannes Schindelin
[PATCH] fetch: refuse to fetch into the current branch in a non-bare repository
Junio C Hamano
Re: [PATCH] http-push: making HTTP push more robust and more user-friendly
Oliver Kullmann
Re: how to move with history?
Junio C Hamano
Re: [PATCH 2/3] git-add--interactive: remove hunk coalescing
Shawn O. Pearce
Re: Bugs in Gitosis
linux-netdev
:
Patrick McHardy
Re: [rfc 02/13] [RFC 02/13] netfilter: nf_conntrack_sip: Add callid parser
webmaster Maintenance
&#32852;&#31995;&#31995;&#32479;&#31649;&#29702;&#21592;
Krzysztof Oledzki
Re: Error: an inet prefix is expected rather than "0/0".
Paul Gortmaker
[PATCH net-next 09/16] tipc: Relocate trivial link status functions to header file
David Miller
Re: [2.6.30-rc3] powerpc: compilation error of mace module
git-commits-head
:
Linux Kernel Mailing List
V4L/DVB: tm6000: add special usb request to quit i2c tuner transfer
Linux Kernel Mailing List
OMAP: DSS2: SDI driver
Linux Kernel Mailing List
PCI: introduce pci_pcie_cap()
Linux Kernel Mailing List
drivers/acpi: use kasprintf
Linux Kernel Mailing List
Staging: et131x: prune all the debug code
openbsd-misc
:
Ted Bullock
Re: Proliant DL380 G3 cannot get on network
Úlfar M. E. Johnson
installing openbsd in xen
Eric Furman
Re: Defending OpenBSD Performance
Damien Miller
Re: Patching a SSH 'Weakness'
Brian
CARP multicast and ADSL bridge
Colocation donated by:
Syndicate