![Marc Eshel](/assets/img/avatar_default.png)
Both lockd and (in the nfsv4 case) nfsd enforce a "grace period" after reboot, during which clients may reclaim locks from the previous server instance, but may not acquire new locks. Currently the lockd and nfsd enforce grace periods of different lengths. This may cause problems when we reboot a server with both v2/v3 and v4 clients. For example, if the lockd grace period is shorter (as is likely the case), then a v3 client might acquire a new lock that conflicts with a lock already held (but not yet reclaimed) by a v4 client. This patch calculates a lease time that lockd and nfsd can both use. Signed-off-by: Marc Eshel <eshel@almaden.ibm.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
/*
|
|
* linux/include/linux/lockd/bind.h
|
|
*
|
|
* This is the part of lockd visible to nfsd and the nfs client.
|
|
*
|
|
* Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
|
|
*/
|
|
|
|
#ifndef LINUX_LOCKD_BIND_H
|
|
#define LINUX_LOCKD_BIND_H
|
|
|
|
#include <linux/lockd/nlm.h>
|
|
/* need xdr-encoded error codes too, so... */
|
|
#include <linux/lockd/xdr.h>
|
|
#ifdef CONFIG_LOCKD_V4
|
|
#include <linux/lockd/xdr4.h>
|
|
#endif
|
|
|
|
/* Dummy declarations */
|
|
struct svc_rqst;
|
|
|
|
/*
|
|
* This is the set of functions for lockd->nfsd communication
|
|
*/
|
|
struct nlmsvc_binding {
|
|
__be32 (*fopen)(struct svc_rqst *,
|
|
struct nfs_fh *,
|
|
struct file **);
|
|
void (*fclose)(struct file *);
|
|
unsigned long (*get_grace_period)(void);
|
|
};
|
|
|
|
extern struct nlmsvc_binding * nlmsvc_ops;
|
|
|
|
/*
|
|
* Functions exported by the lockd module
|
|
*/
|
|
extern int nlmclnt_proc(struct inode *, int, struct file_lock *);
|
|
extern int lockd_up(int proto);
|
|
extern void lockd_down(void);
|
|
|
|
unsigned long get_nfs_grace_period(void);
|
|
|
|
#ifdef CONFIG_NFSD_V4
|
|
unsigned long get_nfs4_grace_period(void);
|
|
#else
|
|
static inline unsigned long get_nfs4_grace_period(void) {return 0;}
|
|
#endif
|
|
|
|
#endif /* LINUX_LOCKD_BIND_H */
|