Re: [patch 00/12] Slab defragmentation V3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Christoph Lameter pisze:
On Fri, 8 Jun 2007, Christoph Lameter wrote:

On Fri, 8 Jun 2007, Michal Piotrowski wrote:

Yes, it does. Thanks!
Ahhh... That leds to the discovery more sysfs problems. I need to make sure not to be holding locks while calling into sysfs. More cleanup...

Could you remove the trylock patch and see how this one fares? We may need both but this should avoid taking the slub_lock around any possible alloc of sysfs.



It's a bit tricky

cat ../sd2.patch | patch -p1
patching file mm/slub.c
Hunk #1 succeeded at 2194 (offset 15 lines).
Hunk #2 FAILED at 2653.
1 out of 2 hunks FAILED -- saving rejects to file mm/slub.c.rej
[michal@bitis-gabonica linux-work3]$ cat mm/slub.c.rej
***************
*** 2652,2677 ****
                */
               s->objsize = max(s->objsize, (int)size);
               s->inuse = max_t(int, s->inuse, ALIGN(size, sizeof(void *)));
               if (sysfs_slab_alias(s, name))
                       goto err;
-       } else {
-               s = kmalloc(kmem_size, GFP_KERNEL);
-               if (s && kmem_cache_open(s, GFP_KERNEL, name,
                               size, align, flags, ctor)) {
-                       if (sysfs_slab_add(s)) {
-                               kfree(s);
-                               goto err;
-                       }
                       list_add(&s->list, &slab_caches);
                       raise_kswapd_order(s->order);
-               } else
-                       kfree(s);
       }
       up_write(&slub_lock);
-       return s;

 err:
-       up_write(&slub_lock);
       if (flags & SLAB_PANIC)
               panic("Cannot create slabcache %s\n", name);
       else
--- 2653,2685 ----
                */
               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))
                       goto err;
+
+               return s;
+       }
+
+       s = kmalloc(kmem_size, GFP_KERNEL);
+       if (s) {
+               if (kmem_cache_open(s, GFP_KERNEL, name,
                               size, align, flags, ctor)) {
                       list_add(&s->list, &slab_caches);
+                       up_write(&slub_lock);
                       raise_kswapd_order(s->order);
+
+                       if (sysfs_slab_add(s))
+                               goto err;
+
+                       return s;
+
+               }
+               kfree(s);
       }
       up_write(&slub_lock);

 err:
       if (flags & SLAB_PANIC)
               panic("Cannot create slabcache %s\n", name);
       else

Regards,
Michal

--
"Najbardziej brakowało mi twojego milczenia."
-- Andrzej Sapkowski "Coś więcej"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux