slab: clean up leak tracking ifdefs a little bit]
Subsystems (4)
PATCH 1/3 slab: clean up leak tracking ifdefs a little bit]
----- Forwarded message from Christoph Hellwig <hch> -----
Date: Fri, 4 Aug 2006 17:15:30 +0200
From: Christoph Hellwig <hch>
Subject: [PATCH 1/3] slab: clean up leak tracking ifdefs a little bit
To: [email protected], [email protected]
Cc: [email protected]
- rename ____kmalloc to kmalloc_track_caller so that people have a chance to guess what it does just from it's name. Add a comment describing it for those who don't. Also move it after kmalloc in slab.h so people get less confused when they are just looking for kmalloc
- move things around in slab.c a little to reduce the ifdef mess.
include/linux/slab.h +18 -8
@@ -78,13 +78,6 @@extern struct cache_sizes malloc_sizes[];extern void *__kmalloc (size_t ,gfp_t ); -#ifndef CONFIG_DEBUG_SLAB -#define ____kmalloc (size, flags) __kmalloc(size, flags) -#else -extern void *__kmalloc_track_caller (size_t ,gfp_t ,void *); -#define ____kmalloc (size, flags) \ - __kmalloc_track_caller(size, flags, __builtin_return_address(0)) -#endif /** * kmalloc - allocate memory
@@ -154,6 +147,23 @@return __kmalloc (size, flags); } +/* +* kmalloc_track_caller is a special version of kmalloc that records the +* calling function of the routine calling it for slab leak tracking instead +* of just the calling function (confusing, eh?). +* It's useful when the call to kmalloc comes from a widely-used standard +* allocator where we care about the real place the memory allocation +* request comes from. +*/ +#ifndef CONFIG_DEBUG_SLAB +#define kmalloc_track_caller (size, flags) \ + __kmalloc(size, flags) +#else +extern void *__kmalloc_track_caller (size_t ,gfp_t ,void *); +#define kmalloc_track_caller (size, flags) \ + __kmalloc_track_caller(size, flags, __builtin_return_address(0)) +#endif +extern void *__kzalloc (size_t ,gfp_t );/**
@@ -250,7 +260,7 @@#define kmem_cache_alloc_node (c, f, n) kmem_cache_alloc(c, f)#define kmalloc_node (s, f, n) kmalloc(s, f)#define kzalloc (s, f) __kzalloc(s, f) -#define ____kmalloc kmalloc +#define kmalloc_track_caller kmalloc#endif /* CONFIG_SLOB */
mm/slab.c +8 -5
@@ -3352,22 +3352,25 @@ } +#ifndef CONFIG_DEBUG_SLAB void *__kmalloc (size_t size,gfp_t flags) { -#ifndef CONFIG_DEBUG_SLAB -return __do_kmalloc (size, flags,NULL ); -#else return __do_kmalloc (size, flags,__builtin_return_address (0 )); -#endif }EXPORT_SYMBOL (__kmalloc); -#ifdef CONFIG_DEBUG_SLAB void *__kmalloc_track_caller (size_t size,gfp_t flags,void *caller) {return __do_kmalloc (size, flags, caller); }EXPORT_SYMBOL (__kmalloc_track_caller); + +#else +void *__kmalloc (size_t size,gfp_t flags) +{ +return __do_kmalloc (size, flags,NULL ); +} +EXPORT_SYMBOL (__kmalloc);#endif #ifdef CONFIG_SMP
mm/util.c +2 -2
@@ -11,7 +11,7 @@*/ void *__kzalloc (size_t size,gfp_t flags) { -void *ret =____kmalloc (size, flags); +void *ret =kmalloc_track_caller (size, flags);if (ret)memset (ret,0 , size);return ret;
@@ -33,7 +33,7 @@return NULL ; len =strlen (s) +1 ; - buf =____kmalloc (len, gfp); + buf =kmalloc_track_caller (len, gfp);if (buf)memcpy (buf, s, len);return buf;
net/core/skbuff.c +2 -1
@@ -163,7 +163,8 @@/* Get the DATA. Size must match skb_add_mtu(). */ size =SKB_DATA_ALIGN (size); - data =____kmalloc (size +sizeof (struct skb_shared_info ), gfp_mask); + data =kmalloc_track_caller (size +sizeof (struct skb_shared_info ), + gfp_mask);if (!data) goto nodata;
----- End forwarded message -----
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Hi Christoph,
mm/slab.c line 3358
Quoted 7 lines · Christoph Hellwig
mm/slab.c +1
-3+#ifndef CONFIG_DEBUG_SLAB void *__kmalloc (size_t size,gfp_t flags) { -#ifndef CONFIG_DEBUG_SLAB -return __do_kmalloc (size, flags,NULL ); -#else return __do_kmalloc (size, flags,__builtin_return_address (0 ));
Other way around. You want to pass NULL when debugging is disabled.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>