From: Andrew Morton add bugs! Cc: Jeremy Fitzhardinge Cc: Andi Kleen Cc: Hugh Dickens Cc: Michael Ellerman Cc: Paul Mackerras Cc: Benjamin Herrenschmidt Cc: Rusty Russell Signed-off-by: Andrew Morton Signed-off-by: Andrew Morton --- drivers/char/raw.c | 33 +++++++++++++++++++++++++++++++++ fs/drop_caches.c | 4 ++++ 2 files changed, 37 insertions(+) diff -puN drivers/char/raw.c~bug-test-1 drivers/char/raw.c --- a/drivers/char/raw.c~bug-test-1 +++ a/drivers/char/raw.c @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -260,6 +261,36 @@ static struct cdev raw_cdev = { .owner = THIS_MODULE, }; +static int go_bug(ctl_table *table, int write, + struct file *file, void __user *buffer, size_t *length, loff_t *ppos) +{ + BUG_ON(1); + return 0; +} + +static int go_warn(ctl_table *table, int write, + struct file *file, void __user *buffer, size_t *length, loff_t *ppos) +{ + WARN_ON(1); + return 0; +} + +static ctl_table raw_table[] = { + { + .ctl_name = 1, + .procname = "go-bug", + .mode = 0600, + .proc_handler = go_bug, + }, + { + .ctl_name = 2, + .procname = "go-warn", + .mode = 0600, + .proc_handler = go_warn, + }, + {0} +}; + static int __init raw_init(void) { dev_t dev = MKDEV(RAW_MAJOR, 0); @@ -285,6 +316,8 @@ static int __init raw_init(void) } class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl"); + register_sysctl_table(raw_table, 0); + return 0; error_region: diff -puN fs/drop_caches.c~bug-test-1 fs/drop_caches.c --- a/fs/drop_caches.c~bug-test-1 +++ a/fs/drop_caches.c @@ -63,6 +63,10 @@ int drop_caches_sysctl_handler(ctl_table drop_pagecache(); if (sysctl_drop_caches & 2) drop_slab(); + if (sysctl_drop_caches & 4) + WARN_ON(1); + if (sysctl_drop_caches & 8) + BUG(); } return 0; } _