提交 69fc9edf 编写于 作者: J Jeff Layton 提交者: J. Bruce Fields

nfsd: add nfsd_inject_forget_clients

...which uses the client_lock for protection instead of client_mutex.
Also remove nfsd_forget_client as there are no more callers.
Signed-off-by: NJeff Layton <jlayton@primarydata.com>
Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
上级 a0926d15
...@@ -135,9 +135,8 @@ static struct nfsd_fault_inject_op inject_ops[] = { ...@@ -135,9 +135,8 @@ static struct nfsd_fault_inject_op inject_ops[] = {
{ {
.file = "forget_clients", .file = "forget_clients",
.get = nfsd_inject_print_clients, .get = nfsd_inject_print_clients,
.set_val = nfsd_inject_set, .set_val = nfsd_inject_forget_clients,
.set_clnt = nfsd_inject_forget_client, .set_clnt = nfsd_inject_forget_client,
.forget = nfsd_forget_client,
}, },
{ {
.file = "forget_locks", .file = "forget_locks",
......
...@@ -5746,20 +5746,6 @@ nfsd_inject_print_clients(struct nfsd_fault_inject_op *op) ...@@ -5746,20 +5746,6 @@ nfsd_inject_print_clients(struct nfsd_fault_inject_op *op)
return count; return count;
} }
u64 nfsd_forget_client(struct nfs4_client *clp, u64 max)
{
__be32 ret;
struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
spin_lock(&nn->client_lock);
ret = mark_client_expired_locked(clp);
spin_unlock(&nn->client_lock);
if (ret != nfs_ok)
return 0;
expire_client(clp);
return 1;
}
u64 u64
nfsd_inject_forget_client(struct nfsd_fault_inject_op *op, nfsd_inject_forget_client(struct nfsd_fault_inject_op *op,
struct sockaddr_storage *addr, size_t addr_size) struct sockaddr_storage *addr, size_t addr_size)
...@@ -5788,6 +5774,34 @@ nfsd_inject_forget_client(struct nfsd_fault_inject_op *op, ...@@ -5788,6 +5774,34 @@ nfsd_inject_forget_client(struct nfsd_fault_inject_op *op,
return count; return count;
} }
u64
nfsd_inject_forget_clients(struct nfsd_fault_inject_op *op, u64 max)
{
u64 count = 0;
struct nfs4_client *clp, *next;
struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
nfsd_net_id);
LIST_HEAD(reaplist);
if (!nfsd_netns_ready(nn))
return count;
spin_lock(&nn->client_lock);
list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) {
if (mark_client_expired_locked(clp) == nfs_ok) {
list_add(&clp->cl_lru, &reaplist);
if (max != 0 && ++count >= max)
break;
}
}
spin_unlock(&nn->client_lock);
list_for_each_entry_safe(clp, next, &reaplist, cl_lru)
expire_client(clp);
return count;
}
static void nfsd_print_count(struct nfs4_client *clp, unsigned int count, static void nfsd_print_count(struct nfs4_client *clp, unsigned int count,
const char *type) const char *type)
{ {
......
...@@ -479,9 +479,9 @@ u64 nfsd_for_n_state(u64, u64 (*)(struct nfs4_client *, u64)); ...@@ -479,9 +479,9 @@ u64 nfsd_for_n_state(u64, u64 (*)(struct nfs4_client *, u64));
struct nfs4_client *nfsd_find_client(struct sockaddr_storage *, size_t); struct nfs4_client *nfsd_find_client(struct sockaddr_storage *, size_t);
u64 nfsd_inject_print_clients(struct nfsd_fault_inject_op *op); u64 nfsd_inject_print_clients(struct nfsd_fault_inject_op *op);
u64 nfsd_forget_client(struct nfs4_client *, u64);
u64 nfsd_inject_forget_client(struct nfsd_fault_inject_op *, u64 nfsd_inject_forget_client(struct nfsd_fault_inject_op *,
struct sockaddr_storage *, size_t); struct sockaddr_storage *, size_t);
u64 nfsd_inject_forget_clients(struct nfsd_fault_inject_op *, u64);
u64 nfsd_forget_client_locks(struct nfs4_client*, u64); u64 nfsd_forget_client_locks(struct nfs4_client*, u64);
u64 nfsd_forget_client_openowners(struct nfs4_client *, u64); u64 nfsd_forget_client_openowners(struct nfs4_client *, u64);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册