diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Kconfig.debug | 20 | ||||
| -rw-r--r-- | lib/btree.c | 5 | ||||
| -rw-r--r-- | lib/radix-tree.c | 3 | ||||
| -rw-r--r-- | lib/raid6/recov.c | 7 | ||||
| -rw-r--r-- | lib/raid6/recov_ssse3.c | 7 | ||||
| -rw-r--r-- | lib/spinlock_debug.c | 2 |
6 files changed, 35 insertions, 9 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index a42d3ae39648..ff5bdee4716d 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -241,6 +241,26 @@ config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE | |||
| 241 | default 0 if !BOOTPARAM_SOFTLOCKUP_PANIC | 241 | default 0 if !BOOTPARAM_SOFTLOCKUP_PANIC |
| 242 | default 1 if BOOTPARAM_SOFTLOCKUP_PANIC | 242 | default 1 if BOOTPARAM_SOFTLOCKUP_PANIC |
| 243 | 243 | ||
| 244 | config PANIC_ON_OOPS | ||
| 245 | bool "Panic on Oops" if EXPERT | ||
| 246 | default n | ||
| 247 | help | ||
| 248 | Say Y here to enable the kernel to panic when it oopses. This | ||
| 249 | has the same effect as setting oops=panic on the kernel command | ||
| 250 | line. | ||
| 251 | |||
| 252 | This feature is useful to ensure that the kernel does not do | ||
| 253 | anything erroneous after an oops which could result in data | ||
| 254 | corruption or other issues. | ||
| 255 | |||
| 256 | Say N if unsure. | ||
| 257 | |||
| 258 | config PANIC_ON_OOPS_VALUE | ||
| 259 | int | ||
| 260 | range 0 1 | ||
| 261 | default 0 if !PANIC_ON_OOPS | ||
| 262 | default 1 if PANIC_ON_OOPS | ||
| 263 | |||
| 244 | config DETECT_HUNG_TASK | 264 | config DETECT_HUNG_TASK |
| 245 | bool "Detect Hung Tasks" | 265 | bool "Detect Hung Tasks" |
| 246 | depends on DEBUG_KERNEL | 266 | depends on DEBUG_KERNEL |
diff --git a/lib/btree.c b/lib/btree.c index e5ec1e9c1aa5..f9a484676cb6 100644 --- a/lib/btree.c +++ b/lib/btree.c | |||
| @@ -319,8 +319,8 @@ void *btree_get_prev(struct btree_head *head, struct btree_geo *geo, | |||
| 319 | 319 | ||
| 320 | if (head->height == 0) | 320 | if (head->height == 0) |
| 321 | return NULL; | 321 | return NULL; |
| 322 | retry: | ||
| 323 | longcpy(key, __key, geo->keylen); | 322 | longcpy(key, __key, geo->keylen); |
| 323 | retry: | ||
| 324 | dec_key(geo, key); | 324 | dec_key(geo, key); |
| 325 | 325 | ||
| 326 | node = head->node; | 326 | node = head->node; |
| @@ -351,7 +351,7 @@ retry: | |||
| 351 | } | 351 | } |
| 352 | miss: | 352 | miss: |
| 353 | if (retry_key) { | 353 | if (retry_key) { |
| 354 | __key = retry_key; | 354 | longcpy(key, retry_key, geo->keylen); |
| 355 | retry_key = NULL; | 355 | retry_key = NULL; |
| 356 | goto retry; | 356 | goto retry; |
| 357 | } | 357 | } |
| @@ -509,6 +509,7 @@ retry: | |||
| 509 | int btree_insert(struct btree_head *head, struct btree_geo *geo, | 509 | int btree_insert(struct btree_head *head, struct btree_geo *geo, |
| 510 | unsigned long *key, void *val, gfp_t gfp) | 510 | unsigned long *key, void *val, gfp_t gfp) |
| 511 | { | 511 | { |
| 512 | BUG_ON(!val); | ||
| 512 | return btree_insert_level(head, geo, key, val, 1, gfp); | 513 | return btree_insert_level(head, geo, key, val, 1, gfp); |
| 513 | } | 514 | } |
| 514 | EXPORT_SYMBOL_GPL(btree_insert); | 515 | EXPORT_SYMBOL_GPL(btree_insert); |
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index d7c878cc006c..e7964296fd50 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c | |||
| @@ -686,6 +686,9 @@ void **radix_tree_next_chunk(struct radix_tree_root *root, | |||
| 686 | * during iterating; it can be zero only at the beginning. | 686 | * during iterating; it can be zero only at the beginning. |
| 687 | * And we cannot overflow iter->next_index in a single step, | 687 | * And we cannot overflow iter->next_index in a single step, |
| 688 | * because RADIX_TREE_MAP_SHIFT < BITS_PER_LONG. | 688 | * because RADIX_TREE_MAP_SHIFT < BITS_PER_LONG. |
| 689 | * | ||
| 690 | * This condition also used by radix_tree_next_slot() to stop | ||
| 691 | * contiguous iterating, and forbid swithing to the next chunk. | ||
| 689 | */ | 692 | */ |
| 690 | index = iter->next_index; | 693 | index = iter->next_index; |
| 691 | if (!index && iter->index) | 694 | if (!index && iter->index) |
diff --git a/lib/raid6/recov.c b/lib/raid6/recov.c index 1805a5cc5daa..a95bccb8497d 100644 --- a/lib/raid6/recov.c +++ b/lib/raid6/recov.c | |||
| @@ -22,8 +22,8 @@ | |||
| 22 | #include <linux/raid/pq.h> | 22 | #include <linux/raid/pq.h> |
| 23 | 23 | ||
| 24 | /* Recover two failed data blocks. */ | 24 | /* Recover two failed data blocks. */ |
| 25 | void raid6_2data_recov_intx1(int disks, size_t bytes, int faila, int failb, | 25 | static void raid6_2data_recov_intx1(int disks, size_t bytes, int faila, |
| 26 | void **ptrs) | 26 | int failb, void **ptrs) |
| 27 | { | 27 | { |
| 28 | u8 *p, *q, *dp, *dq; | 28 | u8 *p, *q, *dp, *dq; |
| 29 | u8 px, qx, db; | 29 | u8 px, qx, db; |
| @@ -66,7 +66,8 @@ void raid6_2data_recov_intx1(int disks, size_t bytes, int faila, int failb, | |||
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | /* Recover failure of one data block plus the P block */ | 68 | /* Recover failure of one data block plus the P block */ |
| 69 | void raid6_datap_recov_intx1(int disks, size_t bytes, int faila, void **ptrs) | 69 | static void raid6_datap_recov_intx1(int disks, size_t bytes, int faila, |
| 70 | void **ptrs) | ||
| 70 | { | 71 | { |
| 71 | u8 *p, *q, *dq; | 72 | u8 *p, *q, *dq; |
| 72 | const u8 *qmul; /* Q multiplier table */ | 73 | const u8 *qmul; /* Q multiplier table */ |
diff --git a/lib/raid6/recov_ssse3.c b/lib/raid6/recov_ssse3.c index 37ae61930559..ecb710c0b4d9 100644 --- a/lib/raid6/recov_ssse3.c +++ b/lib/raid6/recov_ssse3.c | |||
| @@ -19,8 +19,8 @@ static int raid6_has_ssse3(void) | |||
| 19 | boot_cpu_has(X86_FEATURE_SSSE3); | 19 | boot_cpu_has(X86_FEATURE_SSSE3); |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | void raid6_2data_recov_ssse3(int disks, size_t bytes, int faila, int failb, | 22 | static void raid6_2data_recov_ssse3(int disks, size_t bytes, int faila, |
| 23 | void **ptrs) | 23 | int failb, void **ptrs) |
| 24 | { | 24 | { |
| 25 | u8 *p, *q, *dp, *dq; | 25 | u8 *p, *q, *dp, *dq; |
| 26 | const u8 *pbmul; /* P multiplier table for B data */ | 26 | const u8 *pbmul; /* P multiplier table for B data */ |
| @@ -194,7 +194,8 @@ void raid6_2data_recov_ssse3(int disks, size_t bytes, int faila, int failb, | |||
| 194 | } | 194 | } |
| 195 | 195 | ||
| 196 | 196 | ||
| 197 | void raid6_datap_recov_ssse3(int disks, size_t bytes, int faila, void **ptrs) | 197 | static void raid6_datap_recov_ssse3(int disks, size_t bytes, int faila, |
| 198 | void **ptrs) | ||
| 198 | { | 199 | { |
| 199 | u8 *p, *q, *dq; | 200 | u8 *p, *q, *dq; |
| 200 | const u8 *qmul; /* Q multiplier table */ | 201 | const u8 *qmul; /* Q multiplier table */ |
diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c index d0ec4f3d1593..e91fbc23fff1 100644 --- a/lib/spinlock_debug.c +++ b/lib/spinlock_debug.c | |||
| @@ -118,7 +118,7 @@ static void __spin_lock_debug(raw_spinlock_t *lock) | |||
| 118 | /* lockup suspected: */ | 118 | /* lockup suspected: */ |
| 119 | if (print_once) { | 119 | if (print_once) { |
| 120 | print_once = 0; | 120 | print_once = 0; |
| 121 | spin_dump(lock, "lockup"); | 121 | spin_dump(lock, "lockup suspected"); |
| 122 | #ifdef CONFIG_SMP | 122 | #ifdef CONFIG_SMP |
| 123 | trigger_all_cpu_backtrace(); | 123 | trigger_all_cpu_backtrace(); |
| 124 | #endif | 124 | #endif |
