Merge tag 'nfsd-4.4' of git://linux-nfs.org/~bfields/linux
Pull nfsd updates from Bruce Fields: "Apologies for coming a little late in the merge window. Fortunately this is another fairly quiet one: Mainly smaller bugfixes and cleanup. We're still finding some bugs from the breakup of the big NFSv4 state lock in 3.17 -- thanks especially to Andrew Elble and Jeff Layton for tracking down some of the remaining races" * tag 'nfsd-4.4' of git://linux-nfs.org/~bfields/linux: svcrpc: document lack of some memory barriers nfsd: fix race with open / open upgrade stateids nfsd: eliminate sending duplicate and repeated delegations nfsd: remove recurring workqueue job to clean DRC SUNRPC: drop stale comment in svc_setup_socket() nfsd: ensure that seqid morphing operations are atomic wrt to copies nfsd: serialize layout stateid morphing operations nfsd: improve client_has_state to check for unused openowners nfsd: fix clid_inuse on mount with security change sunrpc/cache: make cache flushing more reliable. nfsd: move include of state.h from trace.c to trace.h sunrpc: avoid warning in gss_key_timeout lockd: get rid of reference-counted NSM RPC clients SUNRPC: Use MSG_SENDPAGE_NOTLAST when calling sendpage() lockd: create NSM handles per net namespace nfsd: switch unsigned char flags in svc_fh to bools nfsd: move svc_fh->fh_maxsize to just after fh_handle nfsd: drop null test before destroy functions nfsd: serialize state seqid morphing operations
This commit is contained in:
@@ -68,6 +68,7 @@ struct nlm_host {
|
||||
struct nsm_handle *h_nsmhandle; /* NSM status handle */
|
||||
char *h_addrbuf; /* address eyecatcher */
|
||||
struct net *net; /* host net */
|
||||
char nodename[UNX_MAXNODENAME + 1];
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -235,7 +236,8 @@ void nlm_rebind_host(struct nlm_host *);
|
||||
struct nlm_host * nlm_get_host(struct nlm_host *);
|
||||
void nlm_shutdown_hosts(void);
|
||||
void nlm_shutdown_hosts_net(struct net *net);
|
||||
void nlm_host_rebooted(const struct nlm_reboot *);
|
||||
void nlm_host_rebooted(const struct net *net,
|
||||
const struct nlm_reboot *);
|
||||
|
||||
/*
|
||||
* Host monitoring
|
||||
@@ -243,11 +245,13 @@ void nlm_host_rebooted(const struct nlm_reboot *);
|
||||
int nsm_monitor(const struct nlm_host *host);
|
||||
void nsm_unmonitor(const struct nlm_host *host);
|
||||
|
||||
struct nsm_handle *nsm_get_handle(const struct sockaddr *sap,
|
||||
struct nsm_handle *nsm_get_handle(const struct net *net,
|
||||
const struct sockaddr *sap,
|
||||
const size_t salen,
|
||||
const char *hostname,
|
||||
const size_t hostname_len);
|
||||
struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info);
|
||||
struct nsm_handle *nsm_reboot_lookup(const struct net *net,
|
||||
const struct nlm_reboot *info);
|
||||
void nsm_release(struct nsm_handle *nsm);
|
||||
|
||||
/*
|
||||
|
@@ -48,8 +48,10 @@
|
||||
struct cache_head {
|
||||
struct hlist_node cache_list;
|
||||
time_t expiry_time; /* After time time, don't use the data */
|
||||
time_t last_refresh; /* If CACHE_PENDING, this is when upcall
|
||||
* was sent, else this is when update was received
|
||||
time_t last_refresh; /* If CACHE_PENDING, this is when upcall was
|
||||
* sent, else this is when update was
|
||||
* received, though it is alway set to
|
||||
* be *after* ->flush_time.
|
||||
*/
|
||||
struct kref ref;
|
||||
unsigned long flags;
|
||||
@@ -105,8 +107,12 @@ struct cache_detail {
|
||||
/* fields below this comment are for internal use
|
||||
* and should not be touched by cache owners
|
||||
*/
|
||||
time_t flush_time; /* flush all cache items with last_refresh
|
||||
* earlier than this */
|
||||
time_t flush_time; /* flush all cache items with
|
||||
* last_refresh at or earlier
|
||||
* than this. last_refresh
|
||||
* is never set at or earlier
|
||||
* than this.
|
||||
*/
|
||||
struct list_head others;
|
||||
time_t nextcheck;
|
||||
int entries;
|
||||
@@ -203,7 +209,7 @@ static inline void cache_put(struct cache_head *h, struct cache_detail *cd)
|
||||
static inline int cache_is_expired(struct cache_detail *detail, struct cache_head *h)
|
||||
{
|
||||
return (h->expiry_time < seconds_since_boot()) ||
|
||||
(detail->flush_time > h->last_refresh);
|
||||
(detail->flush_time >= h->last_refresh);
|
||||
}
|
||||
|
||||
extern int cache_check(struct cache_detail *detail,
|
||||
|
Reference in New Issue
Block a user