diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig.debug | 20 | ||||
-rw-r--r-- | lib/btree.c | 5 | ||||
-rw-r--r-- | lib/fault-inject.c | 4 | ||||
-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 |
7 files changed, 39 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/fault-inject.c b/lib/fault-inject.c index 6805453c18e7..f7210ad6cffd 100644 --- a/lib/fault-inject.c +++ b/lib/fault-inject.c | |||
@@ -101,6 +101,10 @@ static inline bool fail_stacktrace(struct fault_attr *attr) | |||
101 | 101 | ||
102 | bool should_fail(struct fault_attr *attr, ssize_t size) | 102 | bool should_fail(struct fault_attr *attr, ssize_t size) |
103 | { | 103 | { |
104 | /* No need to check any other properties if the probability is 0 */ | ||
105 | if (attr->probability == 0) | ||
106 | return false; | ||
107 | |||
104 | if (attr->task_filter && !fail_task(attr, current)) | 108 | if (attr->task_filter && !fail_task(attr, current)) |
105 | return false; | 109 | return false; |
106 | 110 | ||
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 |