aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c87
1 files changed, 33 insertions, 54 deletions
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/*