All of lore.kernel.org
 help / color / mirror / Atom feed
From: Akinobu Mita <akinobu.mita@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: ak@suse.de, akpm@osdl.org, Don Mullis <dwm@meer.net>
Subject: [patch 4/7] fault-injection capability for alloc_pages()
Date: Thu, 12 Oct 2006 16:43:09 +0900	[thread overview]
Message-ID: <452df22a.6ff794a4.60eb.4092@mx.google.com> (raw)
In-Reply-To: 20061012074305.047696736@gmail.com

[-- Attachment #1: fail_alloc_pages.patch --]
[-- Type: text/plain, Size: 3286 bytes --]

From: Akinobu Mita <akinobu.mita@gmail.com>

This patch provides fault-injection capability for alloc_pages()

Boot option:

fail_page_alloc=<interval>,<probability>,<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 memory can be
		   allocated safely in pages.

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

Debugfs:

/debug/fail_page_alloc/interval
/debug/fail_page_alloc/probability
/debug/fail_page_alloc/specifies
/debug/fail_page_alloc/times

Example:

	fail_page_alloc=10,100,0,-1

The page allocation (alloc_pages(), ...) fails once per 10 times.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>

 lib/Kconfig.debug |    7 +++++++
 mm/page_alloc.c   |   42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)

Index: work-fault-inject/lib/Kconfig.debug
===================================================================
--- work-fault-inject.orig/lib/Kconfig.debug
+++ work-fault-inject/lib/Kconfig.debug
@@ -480,6 +480,13 @@ config FAILSLAB
 	help
 	  This option provides fault-injection capabilitiy for kmalloc.
 
+config FAIL_PAGE_ALLOC
+	bool "fault-injection capabilitiy for alloc_pages()"
+	depends on DEBUG_KERNEL
+	select FAULT_INJECTION
+	help
+	  This option provides fault-injection capabilitiy for alloc_pages().
+
 config FAULT_INJECTION_DEBUG_FS
 	bool "debugfs entries for fault-injection capabilities"
 	depends on FAULT_INJECTION && SYSFS
Index: work-fault-inject/mm/page_alloc.c
===================================================================
--- work-fault-inject.orig/mm/page_alloc.c
+++ work-fault-inject/mm/page_alloc.c
@@ -39,6 +39,7 @@
 #include <linux/stop_machine.h>
 #include <linux/sort.h>
 #include <linux/pfn.h>
+#include <linux/fault-inject.h>
 
 #include <asm/tlbflush.h>
 #include <asm/div64.h>
@@ -906,6 +907,44 @@ failed:
 #define ALLOC_HIGH		0x20 /* __GFP_HIGH set */
 #define ALLOC_CPUSET		0x40 /* check for correct cpuset */
 
+#ifdef CONFIG_FAIL_PAGE_ALLOC
+
+static DEFINE_FAULT_ATTR(fail_page_alloc);
+
+static int __init setup_fail_page_alloc(char *str)
+{
+	should_fail_srandom(jiffies);
+
+	return setup_fault_attr(&fail_page_alloc, str);
+}
+__setup("fail_page_alloc=", setup_fail_page_alloc);
+
+static int should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
+{
+	if (gfp_mask & __GFP_NOFAIL)
+		return 0;
+
+	return should_fail(&fail_page_alloc, 1 << order);
+}
+
+static int __init fail_page_alloc_debugfs(void)
+{
+	should_fail_srandom(jiffies);
+
+	return init_fault_attr_entries(&fail_page_alloc, "fail_page_alloc");
+}
+
+late_initcall(fail_page_alloc_debugfs);
+
+#else /* CONFIG_FAIL_PAGE_ALLOC */
+
+static inline int should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
+{
+	return 0;
+}
+
+#endif /* CONFIG_FAIL_PAGE_ALLOC */
+
 /*
  * Return 1 if free pages are above 'mark'. This takes into account the order
  * of the allocation.
@@ -1058,6 +1097,9 @@ __alloc_pages(gfp_t gfp_mask, unsigned i
 
 	might_sleep_if(wait);
 
+	if (should_fail_alloc_page(gfp_mask, order))
+		return NULL;
+
 restart:
 	page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, order,
 				zonelist, ALLOC_WMARK_LOW|ALLOC_CPUSET);

--

  parent reply	other threads:[~2006-10-12  7:45 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20061012074305.047696736@gmail.com>
2006-10-12  7:43 ` [patch 1/7] documentation and scripts Akinobu Mita
2006-10-12 21:37   ` Andrew Morton
2006-10-13 17:47     ` Akinobu Mita
2006-10-13 19:01       ` Andrew Morton
2006-10-12  7:43 ` [patch 2/7] fault-injection capabilities infrastructure Akinobu Mita
2006-10-12 21:03   ` Andrew Morton
2006-10-12  7:43 ` [patch 3/7] fault-injection capability for kmalloc Akinobu Mita
2006-10-12  8:08   ` Pekka Enberg
2006-10-12  7:43 ` Akinobu Mita [this message]
2006-10-12 21:40   ` [patch 4/7] fault-injection capability for alloc_pages() Andrew Morton
2006-10-13 17:51     ` Akinobu Mita
2006-10-12  7:43 ` [patch 5/7] fault-injection capability for disk IO Akinobu Mita
2006-10-12 21:08   ` Andrew Morton
2006-10-13  7:03     ` Jens Axboe
2006-10-12  7:43 ` [patch 6/7] process filtering for fault-injection capabilities Akinobu Mita
2006-10-13 17:28   ` Don Mullis
2006-10-13 18:52     ` Andrew Morton
2006-10-12  7:43 ` [patch 7/7] stacktrace " Akinobu Mita
2006-10-12 21:20   ` Andrew Morton
2006-10-13 18:00     ` Akinobu Mita
2006-10-13 18:12       ` Akinobu Mita
2006-10-13 19:06         ` Andrew Morton
2006-10-13 19:03       ` Andrew Morton
     [not found] <20061108174540.976625689@gmail.com>
2006-11-08 17:45 ` [patch 4/7] fault-injection capability for alloc_pages() Akinobu Mita

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=452df22a.6ff794a4.60eb.4092@mx.google.com \
    --to=akinobu.mita@gmail.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=dwm@meer.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.