[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:

committed by
Linus Torvalds

parent
db4e4c9a9e
commit
8dead0dbd4
@@ -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 *);
|
||||
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user