diff options
author | Jeff Layton <jlayton@primarydata.com> | 2014-07-30 08:27:24 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2014-08-05 10:55:10 -0400 |
commit | 285abdee5335921b6a41f9719c1fc56c478ac561 (patch) | |
tree | 000ad5303805250f7b9b2a0c5744a6d71099a7ec | |
parent | 98d5c7c5bd378aa1a22549200f49de3ed79d4d0a (diff) |
nfsd: remove old fault injection infrastructure
Remove the old nfsd_for_n_state function and move nfsd_find_client
higher up into the file to get rid of forward declaration. Remove
the struct nfsd_fault_inject_op arguments from the operations as
they are no longer needed by any of them.
Finally, remove the old "standard" get and set routines, which
also eliminates the client_mutex from this code.
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r-- | fs/nfsd/fault_inject.c | 51 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 87 | ||||
-rw-r--r-- | fs/nfsd/state.h | 45 |
3 files changed, 57 insertions, 126 deletions
diff --git a/fs/nfsd/fault_inject.c b/fs/nfsd/fault_inject.c index 2479dba71c3c..c16bf5af6831 100644 --- a/fs/nfsd/fault_inject.c +++ b/fs/nfsd/fault_inject.c | |||
@@ -17,52 +17,13 @@ | |||
17 | 17 | ||
18 | struct nfsd_fault_inject_op { | 18 | struct nfsd_fault_inject_op { |
19 | char *file; | 19 | char *file; |
20 | u64 (*get)(struct nfsd_fault_inject_op *); | 20 | u64 (*get)(void); |
21 | u64 (*set_val)(struct nfsd_fault_inject_op *, u64); | 21 | u64 (*set_val)(u64); |
22 | u64 (*set_clnt)(struct nfsd_fault_inject_op *, | 22 | u64 (*set_clnt)(struct sockaddr_storage *, size_t); |
23 | struct sockaddr_storage *, size_t); | ||
24 | u64 (*forget)(struct nfs4_client *, u64); | ||
25 | u64 (*print)(struct nfs4_client *, u64); | ||
26 | }; | 23 | }; |
27 | 24 | ||
28 | static struct dentry *debug_dir; | 25 | static struct dentry *debug_dir; |
29 | 26 | ||
30 | static u64 nfsd_inject_set(struct nfsd_fault_inject_op *op, u64 val) | ||
31 | { | ||
32 | u64 count; | ||
33 | |||
34 | nfs4_lock_state(); | ||
35 | count = nfsd_for_n_state(val, op->forget); | ||
36 | nfs4_unlock_state(); | ||
37 | return count; | ||
38 | } | ||
39 | |||
40 | static u64 nfsd_inject_set_client(struct nfsd_fault_inject_op *op, | ||
41 | struct sockaddr_storage *addr, | ||
42 | size_t addr_size) | ||
43 | { | ||
44 | struct nfs4_client *clp; | ||
45 | u64 count = 0; | ||
46 | |||
47 | nfs4_lock_state(); | ||
48 | clp = nfsd_find_client(addr, addr_size); | ||
49 | if (clp) | ||
50 | count = op->forget(clp, 0); | ||
51 | nfs4_unlock_state(); | ||
52 | return count; | ||
53 | } | ||
54 | |||
55 | static u64 nfsd_inject_get(struct nfsd_fault_inject_op *op) | ||
56 | { | ||
57 | u64 count; | ||
58 | |||
59 | nfs4_lock_state(); | ||
60 | count = nfsd_for_n_state(0, op->print); | ||
61 | nfs4_unlock_state(); | ||
62 | |||
63 | return count; | ||
64 | } | ||
65 | |||
66 | static ssize_t fault_inject_read(struct file *file, char __user *buf, | 27 | static ssize_t fault_inject_read(struct file *file, char __user *buf, |
67 | size_t len, loff_t *ppos) | 28 | size_t len, loff_t *ppos) |
68 | { | 29 | { |
@@ -73,7 +34,7 @@ static ssize_t fault_inject_read(struct file *file, char __user *buf, | |||
73 | struct nfsd_fault_inject_op *op = file_inode(file)->i_private; | 34 | struct nfsd_fault_inject_op *op = file_inode(file)->i_private; |
74 | 35 | ||
75 | if (!pos) | 36 | if (!pos) |
76 | val = op->get(op); | 37 | val = op->get(); |
77 | size = scnprintf(read_buf, sizeof(read_buf), "%llu\n", val); | 38 | size = scnprintf(read_buf, sizeof(read_buf), "%llu\n", val); |
78 | 39 | ||
79 | return simple_read_from_buffer(buf, len, ppos, read_buf, size); | 40 | return simple_read_from_buffer(buf, len, ppos, read_buf, size); |
@@ -103,7 +64,7 @@ static ssize_t fault_inject_write(struct file *file, const char __user *buf, | |||
103 | 64 | ||
104 | size = rpc_pton(net, write_buf, size, (struct sockaddr *)&sa, sizeof(sa)); | 65 | size = rpc_pton(net, write_buf, size, (struct sockaddr *)&sa, sizeof(sa)); |
105 | if (size > 0) { | 66 | if (size > 0) { |
106 | val = op->set_clnt(op, &sa, size); | 67 | val = op->set_clnt(&sa, size); |
107 | if (val) | 68 | if (val) |
108 | pr_info("NFSD [%s]: Client %s had %llu state object(s)\n", | 69 | pr_info("NFSD [%s]: Client %s had %llu state object(s)\n", |
109 | op->file, write_buf, val); | 70 | op->file, write_buf, val); |
@@ -114,7 +75,7 @@ static ssize_t fault_inject_write(struct file *file, const char __user *buf, | |||
114 | else | 75 | else |
115 | pr_info("NFSD Fault Injection: %s (n = %llu)", | 76 | pr_info("NFSD Fault Injection: %s (n = %llu)", |
116 | op->file, val); | 77 | op->file, val); |
117 | val = op->set_val(op, val); | 78 | val = op->set_val(val); |
118 | pr_info("NFSD: %s: found %llu", op->file, val); | 79 | pr_info("NFSD: %s: found %llu", op->file, val); |
119 | } | 80 | } |
120 | return len; /* on success, claim we got the whole input */ | 81 | return len; /* on success, claim we got the whole input */ |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index d18bbb1e334d..90aa953420b6 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -5729,8 +5729,25 @@ put_client(struct nfs4_client *clp) | |||
5729 | atomic_dec(&clp->cl_refcount); | 5729 | atomic_dec(&clp->cl_refcount); |
5730 | } | 5730 | } |
5731 | 5731 | ||
5732 | static struct nfs4_client * | ||
5733 | nfsd_find_client(struct sockaddr_storage *addr, size_t addr_size) | ||
5734 | { | ||
5735 | struct nfs4_client *clp; | ||
5736 | struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, | ||
5737 | nfsd_net_id); | ||
5738 | |||
5739 | if (!nfsd_netns_ready(nn)) | ||
5740 | return NULL; | ||
5741 | |||
5742 | list_for_each_entry(clp, &nn->client_lru, cl_lru) { | ||
5743 | if (memcmp(&clp->cl_addr, addr, addr_size) == 0) | ||
5744 | return clp; | ||
5745 | } | ||
5746 | return NULL; | ||
5747 | } | ||
5748 | |||
5732 | u64 | 5749 | u64 |
5733 | nfsd_inject_print_clients(struct nfsd_fault_inject_op *op) | 5750 | nfsd_inject_print_clients(void) |
5734 | { | 5751 | { |
5735 | struct nfs4_client *clp; | 5752 | struct nfs4_client *clp; |
5736 | u64 count = 0; | 5753 | u64 count = 0; |
@@ -5753,8 +5770,7 @@ nfsd_inject_print_clients(struct nfsd_fault_inject_op *op) | |||
5753 | } | 5770 | } |
5754 | 5771 | ||
5755 | u64 | 5772 | u64 |
5756 | nfsd_inject_forget_client(struct nfsd_fault_inject_op *op, | 5773 | nfsd_inject_forget_client(struct sockaddr_storage *addr, size_t addr_size) |
5757 | struct sockaddr_storage *addr, size_t addr_size) | ||
5758 | { | 5774 | { |
5759 | u64 count = 0; | 5775 | u64 count = 0; |
5760 | struct nfs4_client *clp; | 5776 | struct nfs4_client *clp; |
@@ -5781,7 +5797,7 @@ nfsd_inject_forget_client(struct nfsd_fault_inject_op *op, | |||
5781 | } | 5797 | } |
5782 | 5798 | ||
5783 | u64 | 5799 | u64 |
5784 | nfsd_inject_forget_clients(struct nfsd_fault_inject_op *op, u64 max) | 5800 | nfsd_inject_forget_clients(u64 max) |
5785 | { | 5801 | { |
5786 | u64 count = 0; | 5802 | u64 count = 0; |
5787 | struct nfs4_client *clp, *next; | 5803 | struct nfs4_client *clp, *next; |
@@ -5888,7 +5904,7 @@ nfsd_print_client_locks(struct nfs4_client *clp) | |||
5888 | } | 5904 | } |
5889 | 5905 | ||
5890 | u64 | 5906 | u64 |
5891 | nfsd_inject_print_locks(struct nfsd_fault_inject_op *op) | 5907 | nfsd_inject_print_locks(void) |
5892 | { | 5908 | { |
5893 | struct nfs4_client *clp; | 5909 | struct nfs4_client *clp; |
5894 | u64 count = 0; | 5910 | u64 count = 0; |
@@ -5921,8 +5937,7 @@ nfsd_reap_locks(struct list_head *reaplist) | |||
5921 | } | 5937 | } |
5922 | 5938 | ||
5923 | u64 | 5939 | u64 |
5924 | nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *op, | 5940 | nfsd_inject_forget_client_locks(struct sockaddr_storage *addr, size_t addr_size) |
5925 | struct sockaddr_storage *addr, size_t addr_size) | ||
5926 | { | 5941 | { |
5927 | unsigned int count = 0; | 5942 | unsigned int count = 0; |
5928 | struct nfs4_client *clp; | 5943 | struct nfs4_client *clp; |
@@ -5943,7 +5958,7 @@ nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *op, | |||
5943 | } | 5958 | } |
5944 | 5959 | ||
5945 | u64 | 5960 | u64 |
5946 | nfsd_inject_forget_locks(struct nfsd_fault_inject_op *op, u64 max) | 5961 | nfsd_inject_forget_locks(u64 max) |
5947 | { | 5962 | { |
5948 | u64 count = 0; | 5963 | u64 count = 0; |
5949 | struct nfs4_client *clp; | 5964 | struct nfs4_client *clp; |
@@ -6020,7 +6035,7 @@ nfsd_collect_client_openowners(struct nfs4_client *clp, | |||
6020 | } | 6035 | } |
6021 | 6036 | ||
6022 | u64 | 6037 | u64 |
6023 | nfsd_inject_print_openowners(struct nfsd_fault_inject_op *op) | 6038 | nfsd_inject_print_openowners(void) |
6024 | { | 6039 | { |
6025 | struct nfs4_client *clp; | 6040 | struct nfs4_client *clp; |
6026 | u64 count = 0; | 6041 | u64 count = 0; |
@@ -6053,8 +6068,8 @@ nfsd_reap_openowners(struct list_head *reaplist) | |||
6053 | } | 6068 | } |
6054 | 6069 | ||
6055 | u64 | 6070 | u64 |
6056 | nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *op, | 6071 | nfsd_inject_forget_client_openowners(struct sockaddr_storage *addr, |
6057 | struct sockaddr_storage *addr, size_t addr_size) | 6072 | size_t addr_size) |
6058 | { | 6073 | { |
6059 | unsigned int count = 0; | 6074 | unsigned int count = 0; |
6060 | struct nfs4_client *clp; | 6075 | struct nfs4_client *clp; |
@@ -6075,7 +6090,7 @@ nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *op, | |||
6075 | } | 6090 | } |
6076 | 6091 | ||
6077 | u64 | 6092 | u64 |
6078 | nfsd_inject_forget_openowners(struct nfsd_fault_inject_op *op, u64 max) | 6093 | nfsd_inject_forget_openowners(u64 max) |
6079 | { | 6094 | { |
6080 | u64 count = 0; | 6095 | u64 count = 0; |
6081 | struct nfs4_client *clp; | 6096 | struct nfs4_client *clp; |
@@ -6149,7 +6164,7 @@ nfsd_print_client_delegations(struct nfs4_client *clp) | |||
6149 | } | 6164 | } |
6150 | 6165 | ||
6151 | u64 | 6166 | u64 |
6152 | nfsd_inject_print_delegations(struct nfsd_fault_inject_op *op) | 6167 | nfsd_inject_print_delegations(void) |
6153 | { | 6168 | { |
6154 | struct nfs4_client *clp; | 6169 | struct nfs4_client *clp; |
6155 | u64 count = 0; | 6170 | u64 count = 0; |
@@ -6182,8 +6197,8 @@ nfsd_forget_delegations(struct list_head *reaplist) | |||
6182 | } | 6197 | } |
6183 | 6198 | ||
6184 | u64 | 6199 | u64 |
6185 | nfsd_inject_forget_client_delegations(struct nfsd_fault_inject_op *op, | 6200 | nfsd_inject_forget_client_delegations(struct sockaddr_storage *addr, |
6186 | struct sockaddr_storage *addr, size_t addr_size) | 6201 | size_t addr_size) |
6187 | { | 6202 | { |
6188 | u64 count = 0; | 6203 | u64 count = 0; |
6189 | struct nfs4_client *clp; | 6204 | struct nfs4_client *clp; |
@@ -6205,7 +6220,7 @@ nfsd_inject_forget_client_delegations(struct nfsd_fault_inject_op *op, | |||
6205 | } | 6220 | } |
6206 | 6221 | ||
6207 | u64 | 6222 | u64 |
6208 | nfsd_inject_forget_delegations(struct nfsd_fault_inject_op *op, u64 max) | 6223 | nfsd_inject_forget_delegations(u64 max) |
6209 | { | 6224 | { |
6210 | u64 count = 0; | 6225 | u64 count = 0; |
6211 | struct nfs4_client *clp; | 6226 | struct nfs4_client *clp; |
@@ -6251,8 +6266,7 @@ nfsd_recall_delegations(struct list_head *reaplist) | |||
6251 | } | 6266 | } |
6252 | 6267 | ||
6253 | u64 | 6268 | u64 |
6254 | nfsd_inject_recall_client_delegations(struct nfsd_fault_inject_op *op, | 6269 | nfsd_inject_recall_client_delegations(struct sockaddr_storage *addr, |
6255 | struct sockaddr_storage *addr, | ||
6256 | size_t addr_size) | 6270 | size_t addr_size) |
6257 | { | 6271 | { |
6258 | u64 count = 0; | 6272 | u64 count = 0; |
@@ -6275,7 +6289,7 @@ nfsd_inject_recall_client_delegations(struct nfsd_fault_inject_op *op, | |||
6275 | } | 6289 | } |
6276 | 6290 | ||
6277 | u64 | 6291 | u64 |
6278 | nfsd_inject_recall_delegations(struct nfsd_fault_inject_op *op, u64 max) | 6292 | nfsd_inject_recall_delegations(u64 max) |
6279 | { | 6293 | { |
6280 | u64 count = 0; | 6294 | u64 count = 0; |
6281 | struct nfs4_client *clp, *next; | 6295 | struct nfs4_client *clp, *next; |
@@ -6296,41 +6310,6 @@ nfsd_inject_recall_delegations(struct nfsd_fault_inject_op *op, u64 max) | |||
6296 | nfsd_recall_delegations(&reaplist); | 6310 | nfsd_recall_delegations(&reaplist); |
6297 | return count; | 6311 | return count; |
6298 | } | 6312 | } |
6299 | |||
6300 | u64 nfsd_for_n_state(u64 max, u64 (*func)(struct nfs4_client *, u64)) | ||
6301 | { | ||
6302 | struct nfs4_client *clp, *next; | ||
6303 | u64 count = 0; | ||
6304 | struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, | ||
6305 | nfsd_net_id); | ||
6306 | |||
6307 | if (!nfsd_netns_ready(nn)) | ||
6308 | return 0; | ||
6309 | |||
6310 | list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { | ||
6311 | count += func(clp, max - count); | ||
6312 | if ((max != 0) && (count >= max)) | ||
6313 | break; | ||
6314 | } | ||
6315 | |||
6316 | return count; | ||
6317 | } | ||
6318 | |||
6319 | struct nfs4_client *nfsd_find_client(struct sockaddr_storage *addr, size_t addr_size) | ||
6320 | { | ||
6321 | struct nfs4_client *clp; | ||
6322 | struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, nfsd_net_id); | ||
6323 | |||
6324 | if (!nfsd_netns_ready(nn)) | ||
6325 | return NULL; | ||
6326 | |||
6327 | list_for_each_entry(clp, &nn->client_lru, cl_lru) { | ||
6328 | if (memcmp(&clp->cl_addr, addr, addr_size) == 0) | ||
6329 | return clp; | ||
6330 | } | ||
6331 | return NULL; | ||
6332 | } | ||
6333 | |||
6334 | #endif /* CONFIG_NFSD_FAULT_INJECTION */ | 6313 | #endif /* CONFIG_NFSD_FAULT_INJECTION */ |
6335 | 6314 | ||
6336 | /* | 6315 | /* |
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index 0a35e7bea5f7..a02358f2442c 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h | |||
@@ -471,35 +471,26 @@ extern void nfsd4_record_grace_done(struct nfsd_net *nn, time_t boot_time); | |||
471 | 471 | ||
472 | /* nfs fault injection functions */ | 472 | /* nfs fault injection functions */ |
473 | #ifdef CONFIG_NFSD_FAULT_INJECTION | 473 | #ifdef CONFIG_NFSD_FAULT_INJECTION |
474 | struct nfsd_fault_inject_op; | ||
475 | |||
476 | int nfsd_fault_inject_init(void); | 474 | int nfsd_fault_inject_init(void); |
477 | void nfsd_fault_inject_cleanup(void); | 475 | void nfsd_fault_inject_cleanup(void); |
478 | u64 nfsd_for_n_state(u64, u64 (*)(struct nfs4_client *, u64)); | 476 | |
479 | struct nfs4_client *nfsd_find_client(struct sockaddr_storage *, size_t); | 477 | u64 nfsd_inject_print_clients(void); |
480 | 478 | u64 nfsd_inject_forget_client(struct sockaddr_storage *, size_t); | |
481 | u64 nfsd_inject_print_clients(struct nfsd_fault_inject_op *op); | 479 | u64 nfsd_inject_forget_clients(u64); |
482 | u64 nfsd_inject_forget_client(struct nfsd_fault_inject_op *, | 480 | |
483 | struct sockaddr_storage *, size_t); | 481 | u64 nfsd_inject_print_locks(void); |
484 | u64 nfsd_inject_forget_clients(struct nfsd_fault_inject_op *, u64); | 482 | u64 nfsd_inject_forget_client_locks(struct sockaddr_storage *, size_t); |
485 | 483 | u64 nfsd_inject_forget_locks(u64); | |
486 | u64 nfsd_inject_print_locks(struct nfsd_fault_inject_op *); | 484 | |
487 | u64 nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *, | 485 | u64 nfsd_inject_print_openowners(void); |
488 | struct sockaddr_storage *, size_t); | 486 | u64 nfsd_inject_forget_client_openowners(struct sockaddr_storage *, size_t); |
489 | u64 nfsd_inject_forget_locks(struct nfsd_fault_inject_op *, u64); | 487 | u64 nfsd_inject_forget_openowners(u64); |
490 | 488 | ||
491 | u64 nfsd_inject_print_openowners(struct nfsd_fault_inject_op *); | 489 | u64 nfsd_inject_print_delegations(void); |
492 | u64 nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *, | 490 | u64 nfsd_inject_forget_client_delegations(struct sockaddr_storage *, size_t); |
493 | struct sockaddr_storage *, size_t); | 491 | u64 nfsd_inject_forget_delegations(u64); |
494 | u64 nfsd_inject_forget_openowners(struct nfsd_fault_inject_op *, u64); | 492 | u64 nfsd_inject_recall_client_delegations(struct sockaddr_storage *, size_t); |
495 | 493 | u64 nfsd_inject_recall_delegations(u64); | |
496 | u64 nfsd_inject_print_delegations(struct nfsd_fault_inject_op *); | ||
497 | u64 nfsd_inject_forget_client_delegations(struct nfsd_fault_inject_op *, | ||
498 | struct sockaddr_storage *, size_t); | ||
499 | u64 nfsd_inject_forget_delegations(struct nfsd_fault_inject_op *, u64); | ||
500 | u64 nfsd_inject_recall_client_delegations(struct nfsd_fault_inject_op *, | ||
501 | struct sockaddr_storage *, size_t); | ||
502 | u64 nfsd_inject_recall_delegations(struct nfsd_fault_inject_op *, u64); | ||
503 | #else /* CONFIG_NFSD_FAULT_INJECTION */ | 494 | #else /* CONFIG_NFSD_FAULT_INJECTION */ |
504 | static inline int nfsd_fault_inject_init(void) { return 0; } | 495 | static inline int nfsd_fault_inject_init(void) { return 0; } |
505 | static inline void nfsd_fault_inject_cleanup(void) {} | 496 | static inline void nfsd_fault_inject_cleanup(void) {} |