[PATCH] fault-injection capability for disk IO

This patch provides fault-injection capability for disk IO.

Boot option:

fail_make_request=<probability>,<interval>,<space>,<times>

	<interval> -- specifies the interval of failures.

	<probability> -- specifies how often it should fail in percent.

	<space> -- specifies the size of free space where disk IO can be issued
		   safely in bytes.

	<times> -- specifies how many times failures may happen at most.

Debugfs:

/debug/fail_make_request/interval
/debug/fail_make_request/probability
/debug/fail_make_request/specifies
/debug/fail_make_request/times

Example:

	fail_make_request=10,100,0,-1
	echo 1 > /sys/blocks/hda/hda1/make-it-fail

generic_make_request() on /dev/hda1 fails once per 10 times.

Cc: Jens Axboe <axboe@suse.de>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Cette révision appartient à :
Akinobu Mita
2006-12-08 02:39:46 -08:00
révisé par Linus Torvalds
Parent 933e312e73
révision c17bb49517
5 fichiers modifiés avec 109 ajouts et 0 suppressions

Voir le fichier

@@ -276,12 +276,39 @@ static struct part_attribute part_attr_stat = {
.show = part_stat_read
};
#ifdef CONFIG_FAIL_MAKE_REQUEST
static ssize_t part_fail_store(struct hd_struct * p,
const char *buf, size_t count)
{
int i;
if (count > 0 && sscanf(buf, "%d", &i) > 0)
p->make_it_fail = (i == 0) ? 0 : 1;
return count;
}
static ssize_t part_fail_read(struct hd_struct * p, char *page)
{
return sprintf(page, "%d\n", p->make_it_fail);
}
static struct part_attribute part_attr_fail = {
.attr = {.name = "make-it-fail", .mode = S_IRUGO | S_IWUSR },
.store = part_fail_store,
.show = part_fail_read
};
#endif
static struct attribute * default_attrs[] = {
&part_attr_uevent.attr,
&part_attr_dev.attr,
&part_attr_start.attr,
&part_attr_size.attr,
&part_attr_stat.attr,
#ifdef CONFIG_FAIL_MAKE_REQUEST
&part_attr_fail.attr,
#endif
NULL,
};