forked from Minki/linux
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: Jeff Layton <jlayton@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
a0926d1527
commit
69fc9edf98
@ -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)
|
|||||||
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,
|
|||||||
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));
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user