Evgeniy Polyakov a écrit :
On Fri, Jan 30, 2009 at 06:52:24PM -0800, Stephen Hemminger (shemminger@vyatta.com) wrote:
quoted
My working hypothesis is:
1. Something about Evgeniy's patch makes IPV6 (actually IPV4 in IPV6) be
preferred over plain IPV4.
2. Vino server (VNC) doesn't think ::ffff::127.0.0.1 is really the localhost
3. protocol gets screwed up after that.
It is probably reproducible with other services that support IPV6.
getaddrinfo() returns list of addresses and IPv6 was the first one iirc.
Previously it bailed out, but with my change it will try again without
reason for doing this. With the patch I sent based on Eric's observation
things should be fine.
Problem is your patch is wrong Evgeniy, please think about it litle bit more
and resubmit it.
Take the time to run this $0.02 program, before and after your upcoming fix :
$ cat size.c
#include <net/inet_hashtables.h>
extern int printf(const char *, ...);
int main(int argc, char *argv[])
{
printf("offsetof(struct inet_hashinfo, bsockets)=0x%x\n",
offsetof(struct inet_hashinfo, bsockets));
return 0;
}
$ make size.o ; gcc -o size size.o ; ./size
CHK include/linux/version.h
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-x86
CALL scripts/checksyscalls.sh
CC size.o
offsetof(struct inet_hashinfo, bsockets)=0x18
offset of bsockets being 0x18 or 0x20 is same result : bad because in
same cache line than ehash, ehash_locks, ehash_size, ehash_locks_mask,
bhash, bhash_size, unless your cpu is a Pentium.
Also, I suggest you change bsockets to something more appropriate, eg a
percpu counter.
Thank you.
Eric