Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 347683
b: refs/heads/master
c: d85ed44
h: refs/heads/master
i:
  347681: cd762ff
  347679: 78e3cf0
v: v3
  • Loading branch information
Stanislav Kinsbursky authored and J. Bruce Fields committed Nov 28, 2012
1 parent 007fa2b commit 590a203
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4dce0ac9069bbebfd34f890f599ccdb92fa76e9f
refs/heads/master: d85ed443052570b25ea4b5f5fa70c57e0129fbc4
59 changes: 35 additions & 24 deletions trunk/fs/nfsd/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -4770,7 +4770,7 @@ set_max_delegations(void)
max_delegations = nr_free_buffer_pages() >> (20 - 2 - PAGE_SHIFT);
}

static int nfs4_state_start_net(struct net *net)
static int nfs4_state_create_net(struct net *net)
{
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
int i;
Expand Down Expand Up @@ -4813,6 +4813,7 @@ static int nfs4_state_start_net(struct net *net)
spin_lock_init(&nn->client_lock);

INIT_DELAYED_WORK(&nn->laundromat_work, laundromat_main);
get_net(net);

return 0;

Expand Down Expand Up @@ -4860,37 +4861,35 @@ nfs4_state_destroy_net(struct net *net)
put_net(net);
}

/* initialization to perform when the nfsd service is started: */

int
nfs4_state_start(void)
static int
nfs4_state_start_net(struct net *net)
{
struct net *net = &init_net;
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
int ret;

/*
* FIXME: For now, we hang most of the pernet global stuff off of
* init_net until nfsd is fully containerized. Eventually, we'll
* need to pass a net pointer into this function, take a reference
* to that instead and then do most of the rest of this on a per-net
* basis.
*/
get_net(net);
ret = nfs4_state_start_net(net);
ret = nfs4_state_create_net(net);
if (ret)
return ret;
nfsd4_client_tracking_init(net);
nn->boot_time = get_seconds();
locks_start_grace(net, &nn->nfsd4_manager);
nn->grace_ended = false;
printk(KERN_INFO "NFSD: starting %ld-second grace period\n",
nfsd4_grace);
printk(KERN_INFO "NFSD: starting %ld-second grace period (net %p)\n",
nfsd4_grace, net);
queue_delayed_work(laundry_wq, &nn->laundromat_work, nfsd4_grace * HZ);
return 0;
}

/* initialization to perform when the nfsd service is started: */

int
nfs4_state_start(void)
{
int ret;

ret = set_callback_cred();
if (ret) {
ret = -ENOMEM;
goto out_recovery;
}
if (ret)
return -ENOMEM;
laundry_wq = create_singlethread_workqueue("nfsd4");
if (laundry_wq == NULL) {
ret = -ENOMEM;
Expand All @@ -4900,14 +4899,26 @@ nfs4_state_start(void)
if (ret)
goto out_free_laundry;

queue_delayed_work(laundry_wq, &nn->laundromat_work, nfsd4_grace * HZ);
set_max_delegations();

/*
* FIXME: For now, we hang most of the pernet global stuff off of
* init_net until nfsd is fully containerized. Eventually, we'll
* need to pass a net pointer into this function, take a reference
* to that instead and then do most of the rest of this on a per-net
* basis.
*/
ret = nfs4_state_start_net(&init_net);
if (ret)
goto out_free_callback;

return 0;

out_free_callback:
nfsd4_destroy_callback_queue();
out_free_laundry:
destroy_workqueue(laundry_wq);
out_recovery:
nfsd4_client_tracking_exit(net);
nfs4_state_destroy_net(net);
return ret;
}

Expand Down

0 comments on commit 590a203

Please sign in to comment.