NLM enable per-ip base grace period
Subsystems (2)
PATCH 3/3 NLM enable per-ip base grace period
Hooks are added into the existing lockd global grace period checking to enable per-ip base grace period.
-- Wendy
Hooks are added into the existing lockd global grace period checking to enable per-ip base grace period.
fs/lockd/svc.c | 3 ++- fs/lockd/svc4proc.c | 13 ++++++------- fs/lockd/svcproc.c | 12 ++++++------ include/linux/lockd/lockd.h | 20 ++++++++++++++++++++ 4 files changed, 34 insertions(+), 14 deletions(-)
fs/lockd/svc4proc.c +6 -7
@@ -18,7 +18,6 @@#include <linux/lockd/share.h> #include <linux/lockd/sm_inter.h> -#define NLMDBG_FACILITY NLMDBG_CLIENT/*
@@ -89,7 +88,7 @@ nlm4svc_proc_test(struct svc_rqst *rqstp resp->cookie = argp->cookie;/* Don't accept test requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -121,7 +120,7 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -166,7 +165,7 @@ nlm4svc_proc_cancel(struct svc_rqst *rqs resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -199,7 +198,7 @@ nlm4svc_proc_unlock(struct svc_rqst *rqs resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -336,7 +335,7 @@ nlm4svc_proc_share(struct svc_rqst *rqst resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -369,7 +368,7 @@ nlm4svc_proc_unshare(struct svc_rqst *rq resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
fs/lockd/svcproc.c +6 -6
@@ -118,7 +118,7 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, resp->cookie = argp->cookie;/* Don't accept test requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -151,7 +151,7 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -196,7 +196,7 @@ nlmsvc_proc_cancel(struct svc_rqst *rqst resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -229,7 +229,7 @@ nlmsvc_proc_unlock(struct svc_rqst *rqst resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -368,7 +368,7 @@ nlmsvc_proc_share(struct svc_rqst *rqstp resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
@@ -401,7 +401,7 @@ nlmsvc_proc_unshare(struct svc_rqst *rqs resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
fs/lockd/svc.c +2 -1
@@ -97,7 +97,7 @@ unsigned long get_nfs_grace_period(void) }EXPORT_SYMBOL (get_nfs_grace_period); -static unsigned long set_grace_period (void ) +unsigned long set_grace_period (void ) { nlmsvc_grace_period =1 ;return get_nfs_grace_period () + jiffies;
@@ -208,6 +208,7 @@ lockd(struct svc_rqst *rqstp)nlm_shutdown_hosts (); nlmsvc_pid =0 ; nlmsvc_serv =NULL ; +nlmsvc_failover_reset (); }else printk (KERN_DEBUG "lockd: new process, skipping host shutdown\n" );
include/linux/lockd/lockd.h +20 -0
@@ -222,6 +222,7 @@ int nlmsvc_failover_path(strucint nlmsvc_failover_ip (__be32 server_addr);int nlmsvc_failover_setgrace (void *server_ip,int ip_size);void nlmsvc_failover_reset (void ); +int nlmsvc_failover_check (struct svc_rqst *rqstp);#define NLM_FO_MAX_GP_CNT 1024
@@ -236,6 +237,25 @@ struct nlm_failover_struct {#define g_ip g_key.ipv6 }; +extern struct list_head nlm_failover_list; + +/*Check for grace period: return TRUE or FALSE */ +static inline int +nlmsvc_check_grace_period (struct svc_rqst *rqstp,struct nlm_args *argp) +{ +/* check for system wide grace period */ +if (nlmsvc_grace_period) +return 1 ; + +/* check for per exported fsid grace period */ +if (unlikely (!list_empty (&nlm_failover_list))) +return (nlmsvc_failover_check (rqstp)); + +return 0 ; +} + +/* end of cluster failover addition */ +static __inline__struct inode *nlmsvc_file_inode (struct nlm_file *file) {
Thanks for the patches; a few more comments below:
Quoted 142 lines · Wendy Cheng
Hooks are added into the existing lockd global grace period checking to enable per-ip base grace period.
-- Wendy
Hooks are added into the existing lockd global grace period checking to enable per-ip base grace period.
Signed-off-by S. Wendy Cheng <[email protected]>Signed-off-by Lon Hohberger <[email protected]>fs/lockd/svc.c | 3 ++- fs/lockd/svc4proc.c | 13 ++++++------- fs/lockd/svcproc.c | 12 ++++++------ include/linux/lockd/lockd.h | 20 ++++++++++++++++++++ 4 files changed, 34 insertions(+), 14 deletions(-)fs/lockd/svc4proc.c +6
-7@@ -18,7 +18,6 @@#include <linux/lockd/share.h> #include <linux/lockd/sm_inter.h> -#define NLMDBG_FACILITY NLMDBG_CLIENT/* @@ -89,7 +88,7 @@ nlm4svc_proc_test(struct svc_rqst *rqstp resp->cookie = argp->cookie;/* Don't accept test requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -121,7 +120,7 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -166,7 +165,7 @@ nlm4svc_proc_cancel(struct svc_rqst *rqs resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -199,7 +198,7 @@ nlm4svc_proc_unlock(struct svc_rqst *rqs resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -336,7 +335,7 @@ nlm4svc_proc_share(struct svc_rqst *rqst resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -369,7 +368,7 @@ nlm4svc_proc_unshare(struct svc_rqst *rq resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }fs/lockd/svcproc.c +6
-6@@ -118,7 +118,7 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, resp->cookie = argp->cookie;/* Don't accept test requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -151,7 +151,7 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -196,7 +196,7 @@ nlmsvc_proc_cancel(struct svc_rqst *rqst resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -229,7 +229,7 @@ nlmsvc_proc_unlock(struct svc_rqst *rqst resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -368,7 +368,7 @@ nlmsvc_proc_share(struct svc_rqst *rqstp resp->cookie = argp->cookie;/* Don't accept new lock requests during grace period */ -if (nlmsvc_grace_period && !argp->reclaim) { +if (nlmsvc_check_grace_period (rqstp, argp) && !argp->reclaim) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }@@ -401,7 +401,7 @@ nlmsvc_proc_unshare(struct svc_rqst *rqs resp->cookie = argp->cookie;/* Don't accept requests during grace period */ -if (nlmsvc_grace_period) { +if (nlmsvc_check_grace_period (rqstp, argp)) { resp->status = nlm_lck_denied_grace_period;return rpc_success; }
fs/lockd/svc.c unsigned long get_nfs_grace_period(void) · line 100
Quoted 5 lines
fs/lockd/svc.c +1
-1@@ -97,7 +97,7 @@ unsigned long get_nfs_grace_period(void) }EXPORT_SYMBOL (get_nfs_grace_period); -static unsigned long set_grace_period (void ) +unsigned long set_grace_period (void )
If this is needed, then it belongs with the previous patch, doesn't it?
fs/lockd/svc.c lockd(struct svc_rqst *rqstp) · line 211
Quoted 8 lines
fs/lockd/svc.c +1
-0{ nlmsvc_grace_period =1 ;return get_nfs_grace_period () + jiffies;@@ -208,6 +208,7 @@ lockd(struct svc_rqst *rqstp)nlm_shutdown_hosts (); nlmsvc_pid =0 ; nlmsvc_serv =NULL ; +nlmsvc_failover_reset ();
Ditto. But I thought the previous patch already added an nlmsvc_failover_reset() call just a few lines below.
Quoted 18 lines
fs/lockd/svc.c +0
-0}else printk (KERN_DEBUG "lockd: new process, skipping host shutdown\n" );include/linux/lockd/lockd.h +2
-0@@ -222,6 +222,7 @@ int nlmsvc_failover_path(strucint nlmsvc_failover_ip (__be32 server_addr);int nlmsvc_failover_setgrace (void *server_ip,int ip_size);void nlmsvc_failover_reset (void ); +int nlmsvc_failover_check (struct svc_rqst *rqstp);#define NLM_FO_MAX_GP_CNT 1024@@ -236,6 +237,25 @@ struct nlm_failover_struct {#define g_ip g_key.ipv6 }; +extern struct list_head nlm_failover_list;
include/linux/lockd/lockd.h struct nlm_failover_struct { · line 250
Quoted 10 lines
include/linux/lockd/lockd.h +10
-0+ +/*Check for grace period: return TRUE or FALSE */ +static inline int +nlmsvc_check_grace_period (struct svc_rqst *rqstp,struct nlm_args *argp) +{ +/* check for system wide grace period */ +if (nlmsvc_grace_period) +return 1 ; + +/* check for per exported fsid grace period */
The "per exported fsid" comment seems to be out of date.
include/linux/lockd/lockd.h struct nlm_failover_struct { · line 252
Quoted 2 lines
include/linux/lockd/lockd.h +2
-0+if (unlikely (!list_empty (&nlm_failover_list))) +return (nlmsvc_failover_check (rqstp));
Drop the parentheses after "return".
Is the "unlikely" a good idea? I don't know what the rule of thumb is for those.
Quoted 9 lines
include/linux/lockd/lockd.h +6
-0+ +return 0 ; +} + +/* end of cluster failover addition */ +static __inline__struct inode *nlmsvc_file_inode (struct nlm_file *file) {