mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 21:21:09 -04:00
We expect no warnings to be issued when we specify __GFP_NOWARN, but currently in paths like alloc_pages() and kmalloc(), there are still some warnings printed, fix it. But for some warnings that report usage problems, we don't deal with them. If such warnings are printed, then we should fix the usage problems. Such as the following case: WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1)); [[email protected]: v2] Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Qi Zheng <[email protected]> Cc: Akinobu Mita <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Jiri Slaby <[email protected]> Cc: Steven Rostedt (Google) <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
82 lines
2.0 KiB
C
82 lines
2.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_FAULT_INJECT_H
|
|
#define _LINUX_FAULT_INJECT_H
|
|
|
|
#ifdef CONFIG_FAULT_INJECTION
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/debugfs.h>
|
|
#include <linux/ratelimit.h>
|
|
#include <linux/atomic.h>
|
|
|
|
/*
|
|
* For explanation of the elements of this struct, see
|
|
* Documentation/fault-injection/fault-injection.rst
|
|
*/
|
|
struct fault_attr {
|
|
unsigned long probability;
|
|
unsigned long interval;
|
|
atomic_t times;
|
|
atomic_t space;
|
|
unsigned long verbose;
|
|
bool task_filter;
|
|
bool no_warn;
|
|
unsigned long stacktrace_depth;
|
|
unsigned long require_start;
|
|
unsigned long require_end;
|
|
unsigned long reject_start;
|
|
unsigned long reject_end;
|
|
|
|
unsigned long count;
|
|
struct ratelimit_state ratelimit_state;
|
|
struct dentry *dname;
|
|
};
|
|
|
|
#define FAULT_ATTR_INITIALIZER { \
|
|
.interval = 1, \
|
|
.times = ATOMIC_INIT(1), \
|
|
.require_end = ULONG_MAX, \
|
|
.stacktrace_depth = 32, \
|
|
.ratelimit_state = RATELIMIT_STATE_INIT_DISABLED, \
|
|
.verbose = 2, \
|
|
.dname = NULL, \
|
|
.no_warn = false, \
|
|
}
|
|
|
|
#define DECLARE_FAULT_ATTR(name) struct fault_attr name = FAULT_ATTR_INITIALIZER
|
|
int setup_fault_attr(struct fault_attr *attr, char *str);
|
|
bool should_fail(struct fault_attr *attr, ssize_t size);
|
|
|
|
#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
|
|
|
|
struct dentry *fault_create_debugfs_attr(const char *name,
|
|
struct dentry *parent, struct fault_attr *attr);
|
|
|
|
#else /* CONFIG_FAULT_INJECTION_DEBUG_FS */
|
|
|
|
static inline struct dentry *fault_create_debugfs_attr(const char *name,
|
|
struct dentry *parent, struct fault_attr *attr)
|
|
{
|
|
return ERR_PTR(-ENODEV);
|
|
}
|
|
|
|
#endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
|
|
|
|
#endif /* CONFIG_FAULT_INJECTION */
|
|
|
|
struct kmem_cache;
|
|
|
|
bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order);
|
|
|
|
int should_failslab(struct kmem_cache *s, gfp_t gfpflags);
|
|
#ifdef CONFIG_FAILSLAB
|
|
extern bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags);
|
|
#else
|
|
static inline bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags)
|
|
{
|
|
return false;
|
|
}
|
|
#endif /* CONFIG_FAILSLAB */
|
|
|
|
#endif /* _LINUX_FAULT_INJECT_H */
|