aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd
diff options
context:
space:
mode:
authorJeff Layton <jlayton@primarydata.com>2014-07-30 08:27:24 -0400
committerJ. Bruce Fields <bfields@redhat.com>2014-08-05 10:55:10 -0400
commit285abdee5335921b6a41f9719c1fc56c478ac561 (patch)
tree000ad5303805250f7b9b2a0c5744a6d71099a7ec /fs/nfsd
parent98d5c7c5bd378aa1a22549200f49de3ed79d4d0a (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>
Diffstat (limited to 'fs/nfsd')
-rw-r--r--fs/nfsd/fault_inject.c51
-rw-r--r--fs/nfsd/nfs4state.c87
-rw-r--r--fs/nfsd/state.h45
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
18struct nfsd_fault_inject_op { 18struct 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
28static struct dentry *debug_dir; 25static struct dentry *debug_dir;
29 26
30static 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
40static 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
55static 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
66static ssize_t fault_inject_read(struct file *file, char __user *buf, 27static 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
5732static struct nfs4_client *
5733nfsd_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
5732u64 5749u64
5733nfsd_inject_print_clients(struct nfsd_fault_inject_op *op) 5750nfsd_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
5755u64 5772u64
5756nfsd_inject_forget_client(struct nfsd_fault_inject_op *op, 5773nfsd_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
5783u64 5799u64
5784nfsd_inject_forget_clients(struct nfsd_fault_inject_op *op, u64 max) 5800nfsd_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
5890u64 5906u64
5891nfsd_inject_print_locks(struct nfsd_fault_inject_op *op) 5907nfsd_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
5923u64 5939u64
5924nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *op, 5940nfsd_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
5945u64 5960u64
5946nfsd_inject_forget_locks(struct nfsd_fault_inject_op *op, u64 max) 5961nfsd_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
6022u64 6037u64
6023nfsd_inject_print_openowners(struct nfsd_fault_inject_op *op) 6038nfsd_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
6055u64 6070u64
6056nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *op, 6071nfsd_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
6077u64 6092u64
6078nfsd_inject_forget_openowners(struct nfsd_fault_inject_op *op, u64 max) 6093nfsd_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
6151u64 6166u64
6152nfsd_inject_print_delegations(struct nfsd_fault_inject_op *op) 6167nfsd_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
6184u64 6199u64
6185nfsd_inject_forget_client_delegations(struct nfsd_fault_inject_op *op, 6200nfsd_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
6207u64 6222u64
6208nfsd_inject_forget_delegations(struct nfsd_fault_inject_op *op, u64 max) 6223nfsd_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
6253u64 6268u64
6254nfsd_inject_recall_client_delegations(struct nfsd_fault_inject_op *op, 6269nfsd_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
6277u64 6291u64
6278nfsd_inject_recall_delegations(struct nfsd_fault_inject_op *op, u64 max) 6292nfsd_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
6300u64 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
6319struct 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
474struct nfsd_fault_inject_op;
475
476int nfsd_fault_inject_init(void); 474int nfsd_fault_inject_init(void);
477void nfsd_fault_inject_cleanup(void); 475void nfsd_fault_inject_cleanup(void);
478u64 nfsd_for_n_state(u64, u64 (*)(struct nfs4_client *, u64)); 476
479struct nfs4_client *nfsd_find_client(struct sockaddr_storage *, size_t); 477u64 nfsd_inject_print_clients(void);
480 478u64 nfsd_inject_forget_client(struct sockaddr_storage *, size_t);
481u64 nfsd_inject_print_clients(struct nfsd_fault_inject_op *op); 479u64 nfsd_inject_forget_clients(u64);
482u64 nfsd_inject_forget_client(struct nfsd_fault_inject_op *, 480
483 struct sockaddr_storage *, size_t); 481u64 nfsd_inject_print_locks(void);
484u64 nfsd_inject_forget_clients(struct nfsd_fault_inject_op *, u64); 482u64 nfsd_inject_forget_client_locks(struct sockaddr_storage *, size_t);
485 483u64 nfsd_inject_forget_locks(u64);
486u64 nfsd_inject_print_locks(struct nfsd_fault_inject_op *); 484
487u64 nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *, 485u64 nfsd_inject_print_openowners(void);
488 struct sockaddr_storage *, size_t); 486u64 nfsd_inject_forget_client_openowners(struct sockaddr_storage *, size_t);
489u64 nfsd_inject_forget_locks(struct nfsd_fault_inject_op *, u64); 487u64 nfsd_inject_forget_openowners(u64);
490 488
491u64 nfsd_inject_print_openowners(struct nfsd_fault_inject_op *); 489u64 nfsd_inject_print_delegations(void);
492u64 nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *, 490u64 nfsd_inject_forget_client_delegations(struct sockaddr_storage *, size_t);
493 struct sockaddr_storage *, size_t); 491u64 nfsd_inject_forget_delegations(u64);
494u64 nfsd_inject_forget_openowners(struct nfsd_fault_inject_op *, u64); 492u64 nfsd_inject_recall_client_delegations(struct sockaddr_storage *, size_t);
495 493u64 nfsd_inject_recall_delegations(u64);
496u64 nfsd_inject_print_delegations(struct nfsd_fault_inject_op *);
497u64 nfsd_inject_forget_client_delegations(struct nfsd_fault_inject_op *,
498 struct sockaddr_storage *, size_t);
499u64 nfsd_inject_forget_delegations(struct nfsd_fault_inject_op *, u64);
500u64 nfsd_inject_recall_client_delegations(struct nfsd_fault_inject_op *,
501 struct sockaddr_storage *, size_t);
502u64 nfsd_inject_recall_delegations(struct nfsd_fault_inject_op *, u64);
503#else /* CONFIG_NFSD_FAULT_INJECTION */ 494#else /* CONFIG_NFSD_FAULT_INJECTION */
504static inline int nfsd_fault_inject_init(void) { return 0; } 495static inline int nfsd_fault_inject_init(void) { return 0; }
505static inline void nfsd_fault_inject_cleanup(void) {} 496static inline void nfsd_fault_inject_cleanup(void) {}