[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[dm-devel] [patch] fix allocator for exception cache
- From: Dave Olien <dmo osdl org>
- To: kevcorry us ibm com, agk redhat com
- Cc: dm-devel redhat com
- Subject: [dm-devel] [patch] fix allocator for exception cache
- Date: Wed, 2 Jun 2004 14:58:07 -0700
Here's a trivial patch to the allocator for the exception_cache.
I've been playing with creating a 100gigabyte logical volume,
creating a snapshot, then, runing mkfs.ext2 on the origin volume.
This creates approximately 1,316,000 exceptions.
With the original code, My system hangs completely, as all of the
NOIO memory gets consumed (this is a 16-gigabyte 8 processor system).
The system is unuseable.
Changing the allocator makes things better. The original allocator
doesn't really make sense. The GFP_NOIO allocation should never fail.
It'll just block forever. So the original code that looked for failure
and then calls kmem_cache_alloc(GFP_ATOMIC) seems backwards.
I think some other scheme is needed for allocationg exceptions
I don't know yet what that new scheme would be.
diff -ur linux-2.6.7-rc2-udm1-original/drivers/md/dm-snap.c linux-2.6.7-rc2-udm1-patched/drivers/md/dm-snap.c
--- linux-2.6.7-rc2-udm1-original/drivers/md/dm-snap.c 2004-06-02 14:08:05.000000000 -0700
+++ linux-2.6.7-rc2-udm1-patched/drivers/md/dm-snap.c 2004-06-02 14:16:58.000000000 -0700
@@ -264,9 +264,9 @@
{
struct exception *e;
- e = kmem_cache_alloc(exception_cache, GFP_NOIO);
+ e = kmem_cache_alloc(exception_cache, GFP_ATOMIC);
if (!e)
- e = kmem_cache_alloc(exception_cache, GFP_ATOMIC);
+ e = kmem_cache_alloc(exception_cache, GFP_NOIO);
return e;
}
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]