diff options
| author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2011-07-29 12:22:13 -0400 |
|---|---|---|
| committer | Pekka Enberg <penberg@kernel.org> | 2011-07-31 12:16:33 -0400 |
| commit | fdde6abb3e8dd45e4b026fcf32d40aed96ce3944 (patch) | |
| tree | 926dac3ce211abae103ac50c2a56e0e791b9a043 | |
| parent | 250f8e3db646028353a2a737ddb7a894c97a1098 (diff) | |
slab: use print_hex_dump
Less code and the advantage of ascii dump.
before:
| Slab corruption: names_cache start=c5788000, len=4096
| 000: 6b 6b 01 00 00 00 56 00 00 00 24 00 00 00 2a 00
| 010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
| 030: ff ff ff ff e2 b4 17 18 c7 e4 08 06 00 01 08 00
| 040: 06 04 00 01 e2 b4 17 18 c7 e4 0a 00 00 01 00 00
| 050: 00 00 00 00 0a 00 00 02 6b 6b 6b 6b 6b 6b 6b 6b
after:
| Slab corruption: size-4096 start=c38a9000, len=4096
| 000: 6b 6b 01 00 00 00 56 00 00 00 24 00 00 00 2a 00 kk....V...$...*.
| 010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
| 020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ................
| 030: ff ff ff ff d2 56 5f aa db 9c 08 06 00 01 08 00 .....V_.........
| 040: 06 04 00 01 d2 56 5f aa db 9c 0a 00 00 01 00 00 .....V_.........
| 050: 00 00 00 00 0a 00 00 02 6b 6b 6b 6b 6b 6b 6b 6b ........kkkkkkkk
Acked-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
| -rw-r--r-- | mm/slab.c | 17 |
1 files changed, 6 insertions, 11 deletions
| @@ -1811,15 +1811,15 @@ static void dump_line(char *data, int offset, int limit) | |||
| 1811 | unsigned char error = 0; | 1811 | unsigned char error = 0; |
| 1812 | int bad_count = 0; | 1812 | int bad_count = 0; |
| 1813 | 1813 | ||
| 1814 | printk(KERN_ERR "%03x:", offset); | 1814 | printk(KERN_ERR "%03x: ", offset); |
| 1815 | for (i = 0; i < limit; i++) { | 1815 | for (i = 0; i < limit; i++) { |
| 1816 | if (data[offset + i] != POISON_FREE) { | 1816 | if (data[offset + i] != POISON_FREE) { |
| 1817 | error = data[offset + i]; | 1817 | error = data[offset + i]; |
| 1818 | bad_count++; | 1818 | bad_count++; |
| 1819 | } | 1819 | } |
| 1820 | printk(" %02x", (unsigned char)data[offset + i]); | ||
| 1821 | } | 1820 | } |
| 1822 | printk("\n"); | 1821 | print_hex_dump(KERN_CONT, "", 0, 16, 1, |
| 1822 | &data[offset], limit, 1); | ||
| 1823 | 1823 | ||
| 1824 | if (bad_count == 1) { | 1824 | if (bad_count == 1) { |
| 1825 | error ^= POISON_FREE; | 1825 | error ^= POISON_FREE; |
| @@ -2989,14 +2989,9 @@ bad: | |||
| 2989 | printk(KERN_ERR "slab: Internal list corruption detected in " | 2989 | printk(KERN_ERR "slab: Internal list corruption detected in " |
| 2990 | "cache '%s'(%d), slabp %p(%d). Hexdump:\n", | 2990 | "cache '%s'(%d), slabp %p(%d). Hexdump:\n", |
| 2991 | cachep->name, cachep->num, slabp, slabp->inuse); | 2991 | cachep->name, cachep->num, slabp, slabp->inuse); |
| 2992 | for (i = 0; | 2992 | print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 16, 1, slabp, |
| 2993 | i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t); | 2993 | sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t), |
| 2994 | i++) { | 2994 | 1); |
| 2995 | if (i % 16 == 0) | ||
| 2996 | printk("\n%03x:", i); | ||
| 2997 | printk(" %02x", ((unsigned char *)slabp)[i]); | ||
| 2998 | } | ||
| 2999 | printk("\n"); | ||
| 3000 | BUG(); | 2995 | BUG(); |
| 3001 | } | 2996 | } |
| 3002 | } | 2997 | } |
