mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[PATCH] knfsd: lockd: introduce nsm_handle
This patch introduces the nsm_handle, which is shared by all nlm_host objects referring to the same client. With this patch applied, all nlm_hosts from the same address will share the same nsm_handle. A future patch will add sharing by name. Note: this patch changes h_name so that it is no longer guaranteed to be an IP address of the host. When the host represents an NFS server, h_name will be the name passed in the mount call. When the host represents a client, h_name will be the name presented in the lock request received from the client. A h_name is only used for printing informational messages, this change should not be significant. Signed-off-by: Olaf Kirch <okir@suse.de> Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
db4e4c9a9e
commit
8dead0dbd4
4 changed files with 136 additions and 19 deletions
|
@ -40,14 +40,13 @@ struct nlm_host {
|
|||
struct nlm_host * h_next; /* linked list (hash table) */
|
||||
struct sockaddr_in h_addr; /* peer address */
|
||||
struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */
|
||||
char h_name[20]; /* remote hostname */
|
||||
char * h_name; /* remote hostname */
|
||||
u32 h_version; /* interface version */
|
||||
unsigned short h_proto; /* transport proto */
|
||||
unsigned short h_reclaiming : 1,
|
||||
h_server : 1, /* server side, not client side */
|
||||
h_inuse : 1,
|
||||
h_killed : 1,
|
||||
h_monitored : 1;
|
||||
h_killed : 1;
|
||||
wait_queue_head_t h_gracewait; /* wait while reclaiming */
|
||||
struct rw_semaphore h_rwsem; /* Reboot recovery lock */
|
||||
u32 h_state; /* pseudo-state counter */
|
||||
|
@ -61,6 +60,16 @@ struct nlm_host {
|
|||
spinlock_t h_lock;
|
||||
struct list_head h_granted; /* Locks in GRANTED state */
|
||||
struct list_head h_reclaim; /* Locks in RECLAIM state */
|
||||
struct nsm_handle * h_nsmhandle; /* NSM status handle */
|
||||
};
|
||||
|
||||
struct nsm_handle {
|
||||
struct list_head sm_link;
|
||||
atomic_t sm_count;
|
||||
char * sm_name;
|
||||
struct sockaddr_in sm_addr;
|
||||
unsigned int sm_monitored : 1,
|
||||
sm_sticky : 1; /* don't unmonitor */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -171,6 +180,8 @@ void nlm_release_host(struct nlm_host *);
|
|||
void nlm_shutdown_hosts(void);
|
||||
extern struct nlm_host *nlm_find_client(void);
|
||||
extern void nlm_host_rebooted(const struct sockaddr_in *, const struct nlm_reboot *);
|
||||
struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int);
|
||||
void nsm_release(struct nsm_handle *);
|
||||
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue