Commit 5e1533c7880bb0df98f71fa683979ec296aa947d
Committed by
J. Bruce Fields
1 parent
08d44a35a9
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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
fs/nfsd/netns.h
fs/nfsd/nfs4state.c
... | ... | @@ -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(); |