Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Jeff Layton and committed by
J. Bruce Fields
285abdee 98d5c7c5

+53 -122
+6 -45
fs/nfsd/fault_inject.c
··· 17 17 18 18 struct nfsd_fault_inject_op { 19 19 char *file; 20 - u64 (*get)(struct nfsd_fault_inject_op *); 21 - u64 (*set_val)(struct nfsd_fault_inject_op *, u64); 22 - u64 (*set_clnt)(struct nfsd_fault_inject_op *, 23 - struct sockaddr_storage *, size_t); 24 - u64 (*forget)(struct nfs4_client *, u64); 25 - u64 (*print)(struct nfs4_client *, u64); 20 + u64 (*get)(void); 21 + u64 (*set_val)(u64); 22 + u64 (*set_clnt)(struct sockaddr_storage *, size_t); 26 23 }; 27 24 28 25 static struct dentry *debug_dir; 29 - 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 26 66 27 static ssize_t fault_inject_read(struct file *file, char __user *buf, 67 28 size_t len, loff_t *ppos) ··· 34 73 struct nfsd_fault_inject_op *op = file_inode(file)->i_private; 35 74 36 75 if (!pos) 37 - val = op->get(op); 76 + val = op->get(); 38 77 size = scnprintf(read_buf, sizeof(read_buf), "%llu\n", val); 39 78 40 79 return simple_read_from_buffer(buf, len, ppos, read_buf, size); ··· 64 103 65 104 size = rpc_pton(net, write_buf, size, (struct sockaddr *)&sa, sizeof(sa)); 66 105 if (size > 0) { 67 - val = op->set_clnt(op, &sa, size); 106 + val = op->set_clnt(&sa, size); 68 107 if (val) 69 108 pr_info("NFSD [%s]: Client %s had %llu state object(s)\n", 70 109 op->file, write_buf, val); ··· 75 114 else 76 115 pr_info("NFSD Fault Injection: %s (n = %llu)", 77 116 op->file, val); 78 - val = op->set_val(op, val); 117 + val = op->set_val(val); 79 118 pr_info("NFSD: %s: found %llu", op->file, val); 80 119 } 81 120 return len; /* on success, claim we got the whole input */
+33 -54
fs/nfsd/nfs4state.c
··· 5729 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 5749 u64 5733 - nfsd_inject_print_clients(struct nfsd_fault_inject_op *op) 5750 + nfsd_inject_print_clients(void) 5734 5751 { 5735 5752 struct nfs4_client *clp; 5736 5753 u64 count = 0; ··· 5770 5753 } 5771 5754 5772 5755 u64 5773 - nfsd_inject_forget_client(struct nfsd_fault_inject_op *op, 5774 - struct sockaddr_storage *addr, size_t addr_size) 5756 + nfsd_inject_forget_client(struct sockaddr_storage *addr, size_t addr_size) 5775 5757 { 5776 5758 u64 count = 0; 5777 5759 struct nfs4_client *clp; ··· 5797 5781 } 5798 5782 5799 5783 u64 5800 - nfsd_inject_forget_clients(struct nfsd_fault_inject_op *op, u64 max) 5784 + nfsd_inject_forget_clients(u64 max) 5801 5785 { 5802 5786 u64 count = 0; 5803 5787 struct nfs4_client *clp, *next; ··· 5904 5888 } 5905 5889 5906 5890 u64 5907 - nfsd_inject_print_locks(struct nfsd_fault_inject_op *op) 5891 + nfsd_inject_print_locks(void) 5908 5892 { 5909 5893 struct nfs4_client *clp; 5910 5894 u64 count = 0; ··· 5937 5921 } 5938 5922 5939 5923 u64 5940 - nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *op, 5941 - struct sockaddr_storage *addr, size_t addr_size) 5924 + nfsd_inject_forget_client_locks(struct sockaddr_storage *addr, size_t addr_size) 5942 5925 { 5943 5926 unsigned int count = 0; 5944 5927 struct nfs4_client *clp; ··· 5958 5943 } 5959 5944 5960 5945 u64 5961 - nfsd_inject_forget_locks(struct nfsd_fault_inject_op *op, u64 max) 5946 + nfsd_inject_forget_locks(u64 max) 5962 5947 { 5963 5948 u64 count = 0; 5964 5949 struct nfs4_client *clp; ··· 6035 6020 } 6036 6021 6037 6022 u64 6038 - nfsd_inject_print_openowners(struct nfsd_fault_inject_op *op) 6023 + nfsd_inject_print_openowners(void) 6039 6024 { 6040 6025 struct nfs4_client *clp; 6041 6026 u64 count = 0; ··· 6068 6053 } 6069 6054 6070 6055 u64 6071 - nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *op, 6072 - struct sockaddr_storage *addr, size_t addr_size) 6056 + nfsd_inject_forget_client_openowners(struct sockaddr_storage *addr, 6057 + size_t addr_size) 6073 6058 { 6074 6059 unsigned int count = 0; 6075 6060 struct nfs4_client *clp; ··· 6090 6075 } 6091 6076 6092 6077 u64 6093 - nfsd_inject_forget_openowners(struct nfsd_fault_inject_op *op, u64 max) 6078 + nfsd_inject_forget_openowners(u64 max) 6094 6079 { 6095 6080 u64 count = 0; 6096 6081 struct nfs4_client *clp; ··· 6164 6149 } 6165 6150 6166 6151 u64 6167 - nfsd_inject_print_delegations(struct nfsd_fault_inject_op *op) 6152 + nfsd_inject_print_delegations(void) 6168 6153 { 6169 6154 struct nfs4_client *clp; 6170 6155 u64 count = 0; ··· 6197 6182 } 6198 6183 6199 6184 u64 6200 - nfsd_inject_forget_client_delegations(struct nfsd_fault_inject_op *op, 6201 - struct sockaddr_storage *addr, size_t addr_size) 6185 + nfsd_inject_forget_client_delegations(struct sockaddr_storage *addr, 6186 + size_t addr_size) 6202 6187 { 6203 6188 u64 count = 0; 6204 6189 struct nfs4_client *clp; ··· 6220 6205 } 6221 6206 6222 6207 u64 6223 - nfsd_inject_forget_delegations(struct nfsd_fault_inject_op *op, u64 max) 6208 + nfsd_inject_forget_delegations(u64 max) 6224 6209 { 6225 6210 u64 count = 0; 6226 6211 struct nfs4_client *clp; ··· 6266 6251 } 6267 6252 6268 6253 u64 6269 - nfsd_inject_recall_client_delegations(struct nfsd_fault_inject_op *op, 6270 - struct sockaddr_storage *addr, 6254 + nfsd_inject_recall_client_delegations(struct sockaddr_storage *addr, 6271 6255 size_t addr_size) 6272 6256 { 6273 6257 u64 count = 0; ··· 6289 6275 } 6290 6276 6291 6277 u64 6292 - nfsd_inject_recall_delegations(struct nfsd_fault_inject_op *op, u64 max) 6278 + nfsd_inject_recall_delegations(u64 max) 6293 6279 { 6294 6280 u64 count = 0; 6295 6281 struct nfs4_client *clp, *next; ··· 6310 6296 nfsd_recall_delegations(&reaplist); 6311 6297 return count; 6312 6298 } 6313 - 6314 - u64 nfsd_for_n_state(u64 max, u64 (*func)(struct nfs4_client *, u64)) 6315 - { 6316 - struct nfs4_client *clp, *next; 6317 - u64 count = 0; 6318 - struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 6319 - nfsd_net_id); 6320 - 6321 - if (!nfsd_netns_ready(nn)) 6322 - return 0; 6323 - 6324 - list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { 6325 - count += func(clp, max - count); 6326 - if ((max != 0) && (count >= max)) 6327 - break; 6328 - } 6329 - 6330 - return count; 6331 - } 6332 - 6333 - struct nfs4_client *nfsd_find_client(struct sockaddr_storage *addr, size_t addr_size) 6334 - { 6335 - struct nfs4_client *clp; 6336 - struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, nfsd_net_id); 6337 - 6338 - if (!nfsd_netns_ready(nn)) 6339 - return NULL; 6340 - 6341 - list_for_each_entry(clp, &nn->client_lru, cl_lru) { 6342 - if (memcmp(&clp->cl_addr, addr, addr_size) == 0) 6343 - return clp; 6344 - } 6345 - return NULL; 6346 - } 6347 - 6348 6299 #endif /* CONFIG_NFSD_FAULT_INJECTION */ 6349 6300 6350 6301 /*
+14 -23
fs/nfsd/state.h
··· 471 471 472 472 /* nfs fault injection functions */ 473 473 #ifdef CONFIG_NFSD_FAULT_INJECTION 474 - struct nfsd_fault_inject_op; 475 - 476 474 int nfsd_fault_inject_init(void); 477 475 void nfsd_fault_inject_cleanup(void); 478 - u64 nfsd_for_n_state(u64, u64 (*)(struct nfs4_client *, u64)); 479 - struct nfs4_client *nfsd_find_client(struct sockaddr_storage *, size_t); 480 476 481 - u64 nfsd_inject_print_clients(struct nfsd_fault_inject_op *op); 482 - u64 nfsd_inject_forget_client(struct nfsd_fault_inject_op *, 483 - struct sockaddr_storage *, size_t); 484 - u64 nfsd_inject_forget_clients(struct nfsd_fault_inject_op *, u64); 477 + u64 nfsd_inject_print_clients(void); 478 + u64 nfsd_inject_forget_client(struct sockaddr_storage *, size_t); 479 + u64 nfsd_inject_forget_clients(u64); 485 480 486 - u64 nfsd_inject_print_locks(struct nfsd_fault_inject_op *); 487 - u64 nfsd_inject_forget_client_locks(struct nfsd_fault_inject_op *, 488 - struct sockaddr_storage *, size_t); 489 - u64 nfsd_inject_forget_locks(struct nfsd_fault_inject_op *, u64); 481 + u64 nfsd_inject_print_locks(void); 482 + u64 nfsd_inject_forget_client_locks(struct sockaddr_storage *, size_t); 483 + u64 nfsd_inject_forget_locks(u64); 490 484 491 - u64 nfsd_inject_print_openowners(struct nfsd_fault_inject_op *); 492 - u64 nfsd_inject_forget_client_openowners(struct nfsd_fault_inject_op *, 493 - struct sockaddr_storage *, size_t); 494 - u64 nfsd_inject_forget_openowners(struct nfsd_fault_inject_op *, u64); 485 + u64 nfsd_inject_print_openowners(void); 486 + u64 nfsd_inject_forget_client_openowners(struct sockaddr_storage *, size_t); 487 + u64 nfsd_inject_forget_openowners(u64); 495 488 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); 489 + u64 nfsd_inject_print_delegations(void); 490 + u64 nfsd_inject_forget_client_delegations(struct sockaddr_storage *, size_t); 491 + u64 nfsd_inject_forget_delegations(u64); 492 + u64 nfsd_inject_recall_client_delegations(struct sockaddr_storage *, size_t); 493 + u64 nfsd_inject_recall_delegations(u64); 503 494 #else /* CONFIG_NFSD_FAULT_INJECTION */ 504 495 static inline int nfsd_fault_inject_init(void) { return 0; } 505 496 static inline void nfsd_fault_inject_cleanup(void) {}