mm: slub: Panic instead of restoring corrupted bytes

Resiliency of slub was added for production systems in an
attempt to restore corruptions and allow production environments
to continue to run.

In debug setups, this may no be desirable. Thus rather than
attempting to restore corrupted bytes in poisoned zones, panic
to attempt to catch more context of what was going on in the
system at the time.

Add the CONFIG_SLUB_DEBUG_PANIC_ON defconfig option to allow
debug builds to turn on this panic option.

Change-Id: I01763e8eea40a4544e9b7e48c4e4d40840b6c82d
Signed-off-by: David Keitel <dkeitel@codeaurora.org>
This commit is contained in:
David Keitel 2014-09-25 15:18:55 -07:00
parent c3b06b925c
commit ffc273b07f
2 changed files with 8 additions and 0 deletions

View File

@ -252,6 +252,10 @@ After reporting the details of the issue encountered the FIX SLUB message
tells us that SLUB has restored the Redzone to its proper value and then
system operations continue.
If it is required to only report the details of the issue and panic immediately
after in order to possibly catch any scribblers one can set the
CONFIG_DEBUG_SLUB_PANIC_ON option.
Emergency operations:
---------------------

View File

@ -649,8 +649,12 @@ static void init_object(struct kmem_cache *s, void *object, u8 val)
static void restore_bytes(struct kmem_cache *s, char *message, u8 data,
void *from, void *to)
{
#ifdef CONFIG_SLUB_DEBUG_PANIC_ON
panic("Found corruption 0x%p-0x%p=0x%x\n", from, to - 1, data);
#else
slab_fix(s, "Restoring 0x%p-0x%p=0x%x\n", from, to - 1, data);
memset(from, data, to - from);
#endif
}
static int check_bytes_and_report(struct kmem_cache *s, struct page *page,