Commit 5e1533c7880bb0df98f71fa683979ec296aa947d

Authored by Stanislav Kinsbursky
Committed by J. Bruce Fields
1 parent 08d44a35a9

NFSd: make nfsd4_manager allocated per network namespace context.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>

Showing 2 changed files with 21 additions and 13 deletions Side-by-side Diff

... ... @@ -34,6 +34,8 @@
34 34  
35 35 struct cache_detail *idtoname_cache;
36 36 struct cache_detail *nametoid_cache;
  37 +
  38 + struct lock_manager nfsd4_manager;
37 39 };
38 40  
39 41 extern int nfsd_net_id;
... ... @@ -46,6 +46,8 @@
46 46 #include "current_stateid.h"
47 47 #include "fault_inject.h"
48 48  
  49 +#include "netns.h"
  50 +
49 51 #define NFSDDBG_FACILITY NFSDDBG_PROC
50 52  
51 53 /* Globals */
52 54  
53 55  
54 56  
... ... @@ -3116,22 +3118,21 @@
3116 3118 return status;
3117 3119 }
3118 3120  
3119   -static struct lock_manager nfsd4_manager = {
3120   -};
3121   -
3122 3121 static bool grace_ended;
3123 3122  
3124 3123 static void
3125   -nfsd4_end_grace(void)
  3124 +nfsd4_end_grace(struct net *net)
3126 3125 {
  3126 + struct nfsd_net *nn = net_generic(net, nfsd_net_id);
  3127 +
3127 3128 /* do nothing if grace period already ended */
3128 3129 if (grace_ended)
3129 3130 return;
3130 3131  
3131 3132 dprintk("NFSD: end of grace period\n");
3132 3133 grace_ended = true;
3133   - nfsd4_record_grace_done(&init_net, boot_time);
3134   - locks_end_grace(&nfsd4_manager);
  3134 + nfsd4_record_grace_done(net, boot_time);
  3135 + locks_end_grace(&nn->nfsd4_manager);
3135 3136 /*
3136 3137 * Now that every NFSv4 client has had the chance to recover and
3137 3138 * to see the (possibly new, possibly shorter) lease time, we
... ... @@ -3154,7 +3155,7 @@
3154 3155 nfs4_lock_state();
3155 3156  
3156 3157 dprintk("NFSD: laundromat service - starting\n");
3157   - nfsd4_end_grace();
  3158 + nfsd4_end_grace(&init_net);
3158 3159 INIT_LIST_HEAD(&reaplist);
3159 3160 spin_lock(&client_lock);
3160 3161 list_for_each_safe(pos, next, &client_lru) {
... ... @@ -4688,6 +4689,8 @@
4688 4689 int
4689 4690 nfs4_state_start(void)
4690 4691 {
  4692 + struct net *net = &init_net;
  4693 + struct nfsd_net *nn = net_generic(net, nfsd_net_id);
4691 4694 int ret;
4692 4695  
4693 4696 /*
4694 4697  
... ... @@ -4697,10 +4700,10 @@
4697 4700 * to that instead and then do most of the rest of this on a per-net
4698 4701 * basis.
4699 4702 */
4700   - get_net(&init_net);
4701   - nfsd4_client_tracking_init(&init_net);
  4703 + get_net(net);
  4704 + nfsd4_client_tracking_init(net);
4702 4705 boot_time = get_seconds();
4703   - locks_start_grace(&nfsd4_manager);
  4706 + locks_start_grace(&nn->nfsd4_manager);
4704 4707 grace_ended = false;
4705 4708 printk(KERN_INFO "NFSD: starting %ld-second grace period\n",
4706 4709 nfsd4_grace);
... ... @@ -4723,8 +4726,8 @@
4723 4726 out_free_laundry:
4724 4727 destroy_workqueue(laundry_wq);
4725 4728 out_recovery:
4726   - nfsd4_client_tracking_exit(&init_net);
4727   - put_net(&init_net);
  4729 + nfsd4_client_tracking_exit(net);
  4730 + put_net(net);
4728 4731 return ret;
4729 4732 }
4730 4733  
4731 4734  
... ... @@ -4765,9 +4768,12 @@
4765 4768 void
4766 4769 nfs4_state_shutdown(void)
4767 4770 {
  4771 + struct net *net = &init_net;
  4772 + struct nfsd_net *nn = net_generic(net, nfsd_net_id);
  4773 +
4768 4774 cancel_delayed_work_sync(&laundromat_work);
4769 4775 destroy_workqueue(laundry_wq);
4770   - locks_end_grace(&nfsd4_manager);
  4776 + locks_end_grace(&nn->nfsd4_manager);
4771 4777 nfs4_lock_state();
4772 4778 __nfs4_state_shutdown();
4773 4779 nfs4_unlock_state();