-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 284624 b: refs/heads/master c: 65178db h: refs/heads/master v: v3
- Loading branch information
Bryan Schumaker
authored and
J. Bruce Fields
committed
Nov 8, 2011
1 parent
6433d1c
commit 14968ec
Showing
7 changed files
with
253 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 64a284d07c7d84299a90826950079a8ef11e8204 | ||
refs/heads/master: 65178db42a02c7984f711614546e97e9952d8e01 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
* Copyright (c) 2011 Bryan Schumaker <bjschuma@netapp.com> | ||
* | ||
* Uses debugfs to create fault injection points for client testing | ||
*/ | ||
|
||
#include <linux/types.h> | ||
#include <linux/fs.h> | ||
#include <linux/debugfs.h> | ||
#include <linux/module.h> | ||
|
||
#include "state.h" | ||
#include "fault_inject.h" | ||
|
||
struct nfsd_fault_inject_op { | ||
char *file; | ||
void (*func)(u64); | ||
}; | ||
|
||
static struct nfsd_fault_inject_op inject_ops[] = { | ||
{ | ||
.file = "forget_clients", | ||
.func = nfsd_forget_clients, | ||
}, | ||
{ | ||
.file = "forget_locks", | ||
.func = nfsd_forget_locks, | ||
}, | ||
{ | ||
.file = "forget_openowners", | ||
.func = nfsd_forget_openowners, | ||
}, | ||
{ | ||
.file = "forget_delegations", | ||
.func = nfsd_forget_delegations, | ||
}, | ||
{ | ||
.file = "recall_delegations", | ||
.func = nfsd_recall_delegations, | ||
}, | ||
}; | ||
|
||
static long int NUM_INJECT_OPS = sizeof(inject_ops) / sizeof(struct nfsd_fault_inject_op); | ||
static struct dentry *debug_dir; | ||
|
||
static int nfsd_inject_set(void *op_ptr, u64 val) | ||
{ | ||
struct nfsd_fault_inject_op *op = op_ptr; | ||
|
||
if (val == 0) | ||
printk(KERN_INFO "NFSD Fault Injection: %s (all)", op->file); | ||
else | ||
printk(KERN_INFO "NFSD Fault Injection: %s (n = %llu)", op->file, val); | ||
|
||
op->func(val); | ||
return 0; | ||
} | ||
|
||
static int nfsd_inject_get(void *data, u64 *val) | ||
{ | ||
return 0; | ||
} | ||
|
||
DEFINE_SIMPLE_ATTRIBUTE(fops_nfsd, nfsd_inject_get, nfsd_inject_set, "%llu\n"); | ||
|
||
void nfsd_fault_inject_cleanup(void) | ||
{ | ||
debugfs_remove_recursive(debug_dir); | ||
} | ||
|
||
int nfsd_fault_inject_init(void) | ||
{ | ||
unsigned int i; | ||
struct nfsd_fault_inject_op *op; | ||
mode_t mode = S_IFREG | S_IRUSR | S_IWUSR; | ||
|
||
debug_dir = debugfs_create_dir("nfsd", NULL); | ||
if (!debug_dir) | ||
goto fail; | ||
|
||
for (i = 0; i < NUM_INJECT_OPS; i++) { | ||
op = &inject_ops[i]; | ||
if (!debugfs_create_file(op->file, mode, debug_dir, op, &fops_nfsd)) | ||
goto fail; | ||
} | ||
return 0; | ||
|
||
fail: | ||
nfsd_fault_inject_cleanup(); | ||
return -ENOMEM; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* Copyright (c) 2011 Bryan Schumaker <bjschuma@netapp.com> | ||
* | ||
* Function definitions for fault injection | ||
*/ | ||
|
||
#ifndef LINUX_NFSD_FAULT_INJECT_H | ||
#define LINUX_NFSD_FAULT_INJECT_H | ||
|
||
#ifdef CONFIG_NFSD_FAULT_INJECTION | ||
int nfsd_fault_inject_init(void); | ||
void nfsd_fault_inject_cleanup(void); | ||
void nfsd_forget_clients(u64); | ||
void nfsd_forget_locks(u64); | ||
void nfsd_forget_openowners(u64); | ||
void nfsd_forget_delegations(u64); | ||
void nfsd_recall_delegations(u64); | ||
#else /* CONFIG_NFSD_FAULT_INJECTION */ | ||
static inline int nfsd_fault_inject_init(void) { return 0; } | ||
static inline void nfsd_fault_inject_cleanup(void) {} | ||
static inline void nfsd_forget_clients(u64 num) {} | ||
static inline void nfsd_forget_locks(u64 num) {} | ||
static inline void nfsd_forget_openowners(u64 num) {} | ||
static inline void nfsd_forget_delegations(u64 num) {} | ||
static inline void nfsd_recall_delegations(u64 num) {} | ||
#endif /* CONFIG_NFSD_FAULT_INJECTION */ | ||
|
||
#endif /* LINUX_NFSD_FAULT_INJECT_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters