If a spinlock is scribbled on with 0x6b then it becomes "unlocked".  I'd
prefer that a scribbed-on lock be treated as locked, so things get stuck
earlier.

So make sure that all the slab poisoning values are negative.


 include/linux/sched.h |    2 +-
 mm/slab.c             |   12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff -puN mm/slab.c~slab-scribble-negative mm/slab.c
--- 25/mm/slab.c~slab-scribble-negative	2003-05-26 23:03:18.000000000 -0700
+++ 25-akpm/mm/slab.c	2003-05-26 23:08:27.000000000 -0700
@@ -344,8 +344,8 @@ struct kmem_cache_s {
 #define	RED_ACTIVE	0x170FC2A5UL	/* when obj is active */
 
 /* ...and for poisoning */
-#define	POISON_BEFORE	0x5a	/* for use-uninitialised poisoning */
-#define POISON_AFTER	0x6b	/* for use-after-free poisoning */
+#define	POISON_BEFORE	0x8a	/* for use-uninitialised poisoning */
+#define POISON_AFTER	0x9b	/* for use-after-free poisoning */
 #define	POISON_END	0xa5	/* end-byte of poisoning */
 
 #endif
@@ -871,9 +871,9 @@ static void check_poison_obj(kmem_cache_
 		}
 		printk(KERN_ERR "Data: ");
 		for (s = 0; s < size; s++) {
-			if (((char*)addr)[s] == POISON_BEFORE)
+			if (((unsigned char*)addr)[s] == POISON_BEFORE)
 				printk(".");
-			else if (((char*)addr)[s] == POISON_AFTER)
+			else if (((unsigned char*)addr)[s] == POISON_AFTER)
 				printk("*");
 			else
 				printk("%02X ", ((unsigned char*)addr)[s]);
@@ -881,9 +881,9 @@ static void check_poison_obj(kmem_cache_
 		printk("\n");
 		printk(KERN_ERR "Next: ");
 		for (; s < size + 32; s++) {
-			if (((char*)addr)[s] == POISON_BEFORE)
+			if (((unsigned char*)addr)[s] == POISON_BEFORE)
 				printk(".");
-			else if (((char*)addr)[s] == POISON_AFTER)
+			else if (((unsigned char*)addr)[s] == POISON_AFTER)
 				printk("*");
 			else
 				printk("%02X ", ((unsigned char*)addr)[s]);
diff -puN include/linux/sched.h~slab-scribble-negative include/linux/sched.h
--- 25/include/linux/sched.h~slab-scribble-negative	2003-05-26 23:03:18.000000000 -0700
+++ 25-akpm/include/linux/sched.h	2003-05-26 23:07:47.000000000 -0700
@@ -463,7 +463,7 @@ extern void __put_task_struct(struct tas
 #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
 #define put_task_struct(tsk)					\
 	do {							\
-		BUG_ON((tsk)->debug == 0x6b6b6b6b);		\
+		BUG_ON((tsk)->debug == 0x9b9b9b9b);		\
 		if (atomic_dec_and_test(&(tsk)->usage))		\
 			__put_task_struct(tsk);			\
 	} while (0)

_