Chuck Lever wrote:
On Jan 28, 2008, at 9:56 PM, J. Bruce Fields wrote:
On Fri, Jan 25, 2008 at 12:17:30AM -0500, Wendy Cheng wrote:
The logic is implemented on top of linux nfsd procfs with core
functions
residing in lockd kernel module. Entry function is
nlmsvc_resume_ip() where
it stores the requested ip interface into a linked-list
nlm_failover_list.
The list entry count is nlm_failover_cnt and access protection is
done by
nlm_failover_mutex. Entry in nlm_failover_ip_list is a
"nlm_failover_struct",
defined in: include/linux/lockd/lockd.h.
+struct nlm_failover_struct {
+ struct list_head g_list; /* linked list */
+ unsigned long g_expire; /* grace period expire */
+ int g_size; /* g_key type: ipv4 or ipv6 */
+ union {
+ __be32 ipv4; /* ip v4 address */
+ __be32 ipv6[4]; /* ip v6 address */
+ } g_key;
+#define g_ip g_key.ipv6
+};
Only the second member of that union is every used; could we just get
rid of the union?
Also, is that the right choice of types? Maybe we should just use
struct in6_addr?
I agree with Bruce -- just use in_addr, and leave out the unused IPv6
stuff for now.
In some places, we just replace in_addr with in6_addr and simply map
IPv4 to IPv6 addresses, rather than setting up a union.
If the address is used as a hash and never displayed, using a mapped
IPv4 address is sufficient, and keeps things simple.
ok, I have been yo-yoing about whether doing IPv6 support. This sounds
like a good plan. Will do.
-- Wendy