netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* regression due to "flush SAD/SPD generate false events"
@ 2010-02-17 19:17 Alexey Dobriyan
  2010-02-17 21:42 ` David Miller
  2010-02-17 21:42 ` jamal
  0 siblings, 2 replies; 16+ messages in thread
From: Alexey Dobriyan @ 2010-02-17 19:17 UTC (permalink / raw)
  To: hadi, davem; +Cc: netdev

commit 19f4c7133fc1b94001b997c4843d0a9192ee63e5
xfrm: Flushing empty SAD generates false events

commit 0dca3a843632c2fbb6e358734fb08fc23e800f50
xfrm: Flushing empty SPD generates false events

setkey now takes several seconds to run this simple script
and it spits "recv: Resource temporarily unavailable" messages.

#!/usr/sbin/setkey -f
flush;
spdflush;

add A B ipcomp 44 -m tunnel -C deflate;
add B A ipcomp 45 -m tunnel -C deflate;

spdadd A B any -P in ipsec
        ipcomp/tunnel/192.168.1.2-192.168.1.3/use;
spdadd B A any -P out ipsec
        ipcomp/tunnel/192.168.1.3-192.168.1.2/use;


4909  execve("/root/ipcomp-tunnel.setkey", ["/root/ipcomp-tunnel.setkey"], [/* 22 vars */]) = 0
4909  brk(0)                            = 0x16d0000
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c83000
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c82000
4909  access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
4909  open("/etc/ld.so.cache", O_RDONLY) = 3
4909  fstat(3, {st_mode=S_IFREG|0644, st_size=40409, ...}) = 0
4909  mmap(NULL, 40409, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa171c78000
4909  close(3)                          = 0
4909  open("/lib/libutil.so.1", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \16\0\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=28959, ...}) = 0
4909  mmap(NULL, 2105608, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa171865000
4909  mprotect(0x7fa171867000, 2093056, PROT_NONE) = 0
4909  mmap(0x7fa171a66000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7fa171a66000
4909  close(3)                          = 0
4909  open("/usr/lib/libcrypto.so.0.9.8", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\221\6\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0555, st_size=5981705, ...}) = 0
4909  mmap(NULL, 3707672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1714db000
4909  mprotect(0x7fa17163c000, 2093056, PROT_NONE) = 0
4909  mmap(0x7fa17183b000, 155648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x160000) = 0x7fa17183b000
4909  mmap(0x7fa171861000, 13080, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa171861000
4909  close(3)                          = 0
4909  open("/lib/libresolv.so.2", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3208\0\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=328639, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c77000
4909  mmap(NULL, 2189960, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1712c4000
4909  mprotect(0x7fa1712d7000, 2097152, PROT_NONE) = 0
4909  mmap(0x7fa1714d7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13000) = 0x7fa1714d7000
4909  mmap(0x7fa1714d9000, 6792, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa1714d9000
4909  close(3)                          = 0
4909  open("/lib/libreadline.so.6", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240g\1\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0555, st_size=731087, ...}) = 0
4909  mmap(NULL, 2372136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa171080000
4909  mprotect(0x7fa1710bb000, 2093056, PROT_NONE) = 0
4909  mmap(0x7fa1712ba000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3a000) = 0x7fa1712ba000
4909  mmap(0x7fa1712c2000, 4648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa1712c2000
4909  close(3)                          = 0
4909  open("/lib/libcrypt.so.1", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\n\0\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=125022, ...}) = 0
4909  mmap(NULL, 2322880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa170e48000
4909  mprotect(0x7fa170e50000, 2097152, PROT_NONE) = 0
4909  mmap(0x7fa171050000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8000) = 0x7fa171050000
4909  mmap(0x7fa171052000, 184768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa171052000
4909  close(3)                          = 0
4909  open("/lib/libc.so.6", O_RDONLY)  = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\353\1\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=8673692, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c76000
4909  mmap(NULL, 3508264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa170aef000
4909  mprotect(0x7fa170c3e000, 2097152, PROT_NONE) = 0
4909  mmap(0x7fa170e3e000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14f000) = 0x7fa170e3e000
4909  mmap(0x7fa170e43000, 18472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa170e43000
4909  close(3)                          = 0
4909  open("/lib/libdl.so.2", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\r\0\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=103353, ...}) = 0
4909  mmap(NULL, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1708eb000
4909  mprotect(0x7fa1708ed000, 2097152, PROT_NONE) = 0
4909  mmap(0x7fa170aed000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fa170aed000
4909  close(3)                          = 0
4909  open("/lib/libz.so.1", O_RDONLY)  = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@ \0\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=217286, ...}) = 0
4909  mmap(NULL, 2183664, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1706d5000
4909  mprotect(0x7fa1706ea000, 2093056, PROT_NONE) = 0
4909  mmap(0x7fa1708e9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14000) = 0x7fa1708e9000
4909  close(3)                          = 0
4909  open("/lib/libncurses.so.5", O_RDONLY) = 3
4909  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240M\1\0\0\0\0\0"..., 832) = 832
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=1433703, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c75000
4909  mmap(NULL, 2426760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa170484000
4909  mprotect(0x7fa1704d0000, 2093056, PROT_NONE) = 0
4909  mmap(0x7fa1706cf000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4b000) = 0x7fa1706cf000
4909  mmap(0x7fa1706d4000, 1928, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa1706d4000
4909  close(3)                          = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c74000
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c73000
4909  arch_prctl(ARCH_SET_FS, 0x7fa171c736f0) = 0
4909  mprotect(0x7fa1706cf000, 16384, PROT_READ) = 0
4909  mprotect(0x7fa1708e9000, 4096, PROT_READ) = 0
4909  mprotect(0x7fa170aed000, 4096, PROT_READ) = 0
4909  mprotect(0x7fa170e3e000, 16384, PROT_READ) = 0
4909  mprotect(0x7fa171050000, 4096, PROT_READ) = 0
4909  mprotect(0x7fa1712ba000, 8192, PROT_READ) = 0
4909  mprotect(0x7fa1714d7000, 4096, PROT_READ) = 0
4909  mprotect(0x7fa17183b000, 57344, PROT_READ) = 0
4909  mprotect(0x7fa171a66000, 4096, PROT_READ) = 0
4909  mprotect(0x616000, 4096, PROT_READ) = 0
4909  mprotect(0x7fa171c84000, 4096, PROT_READ) = 0
4909  munmap(0x7fa171c78000, 40409)     = 0
4909  brk(0)                            = 0x16d0000
4909  brk(0x16f1000)                    = 0x16f1000
4909  open("/etc/localtime", O_RDONLY)  = 3
4909  fstat(3, {st_mode=S_IFREG|0644, st_size=2067, ...}) = 0
4909  fstat(3, {st_mode=S_IFREG|0644, st_size=2067, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c81000
4909  read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\v\0\0\0\v\0\0\0\0"..., 4096) = 2067
4909  lseek(3, -1300, SEEK_CUR)         = 767
4909  read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\f\0\0\0\0"..., 4096) = 1300
4909  close(3)                          = 0
4909  munmap(0x7fa171c81000, 4096)      = 0
4909  stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2067, ...}) = 0
4909  open("/root/ipcomp-tunnel.setkey", O_RDONLY) = 3
4909  socket(PF_KEY, SOCK_RAW, 2)       = 4
4909  setsockopt(4, SOL_SOCKET, SO_SNDBUF, [131072], 4) = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVBUF, [131072], 4) = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVBUF, [262144], 4) = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVBUF, [524288], 4) = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
4909  getpid()                          = 4909
4909  sendto(4, "\2\7\0\0\2\0\0\0\0\0\0\0-\23\0\0", 16, 0, NULL, 0) = 16
4909  recvfrom(4, "\2\7\0\0\v\0\0\0\0\0\0\0-\23\0\0", 16, MSG_PEEK, NULL, NULL) = 16
4909  recvfrom(4, "\2\7\0\0\v\0\0\0\0\0\0\0-\23\0\0\3\0\16\0kkkk\373\0\0\0\0\0\0\0"..., 88, 0, NULL, NULL) = 88
4909  ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffa5d10d90) = -1 ENOTTY (Inappropriate ioctl for device)
4909  fstat(3, {st_mode=S_IFREG|0755, st_size=599, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c81000
4909  read(3, "#!/usr/sbin/setkey -f\nflush;\nspd"..., 8192) = 599
4909  read(3, "", 4096)                 = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\t\0\0\2\0\0\0\0\0\0\0-\23\0\0", 16, 0, NULL, 0) = 16
4909  recvfrom(4, 0x7fffa5d08e80, 32768, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
4909  dup(2)                            = 5
4909  fcntl(5, F_GETFL)                 = 0x8002 (flags O_RDWR|O_LARGEFILE)
4909  fstat(5, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  lseek(5, 0, SEEK_CUR)             = -1 ESPIPE (Illegal seek)
4909  write(5, "recv: Resource temporarily unava"..., 39) = 39
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\23\0\0\2\0\0\0\0\0\0\0-\23\0\0", 16, 0, NULL, 0) = 16
4909  recvfrom(4, 0x7fffa5d08e80, 32768, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
4909  dup(2)                            = 5
4909  fcntl(5, F_GETFL)                 = 0x8002 (flags O_RDWR|O_LARGEFILE)
4909  fstat(5, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  lseek(5, 0, SEEK_CUR)             = -1 ESPIPE (Illegal seek)
4909  write(5, "recv: Resource temporarily unava"..., 39) = 39
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
4909  connect(5, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
4909  close(5)                          = 0
4909  socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
4909  connect(5, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
4909  close(5)                          = 0
4909  open("/etc/nsswitch.conf", O_RDONLY) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=508, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "# /etc/nsswitch.conf:\n# $Header:"..., 4096) = 508
4909  read(5, "", 4096)                 = 0
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  open("/etc/host.conf", O_RDONLY)  = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=936, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "# /etc/host.conf:\n# $Header: /va"..., 4096) = 936
4909  read(5, "", 4096)                 = 0
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  open("/etc/resolv.conf", O_RDONLY) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "nameserver 192.168.1.1\n", 4096) = 23
4909  read(5, "", 4096)                 = 0
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  uname({sys="Linux", node="B", ...}) = 0
4909  open("/etc/ld.so.cache", O_RDONLY) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=40409, ...}) = 0
4909  mmap(NULL, 40409, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fa171c69000
4909  close(5)                          = 0
4909  open("/lib/libnss_files.so.2", O_RDONLY) = 5
4909  read(5, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p!\0\0\0\0\0\0"..., 832) = 832
4909  fstat(5, {st_mode=S_IFREG|0755, st_size=218643, ...}) = 0
4909  mmap(NULL, 2143632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 5, 0) = 0x7fa170278000
4909  mprotect(0x7fa170283000, 2093056, PROT_NONE) = 0
4909  mmap(0x7fa170482000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 5, 0xa000) = 0x7fa170482000
4909  close(5)                          = 0
4909  mprotect(0x7fa170482000, 4096, PROT_READ) = 0
4909  munmap(0x7fa171c69000, 40409)     = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fcntl(5, F_GETFD)                 = 0x1 (flags FD_CLOEXEC)
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
4909  open("/etc/resolv.conf", O_RDONLY) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "nameserver 192.168.1.1\n", 4096) = 23
4909  read(5, "", 4096)                 = 0
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  uname({sys="Linux", node="B", ...}) = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\3\0\t\f\0\0\0\0\0\0\0-\23\0\0\2\0\1\0\0\0\0,\0\0\0\2@\0\0\0"..., 96, 0, NULL, 0) = 96
4909  recvfrom(4, "\2\3\0\t\33\0\0\0\0\0\0\0-\23\0\0\2\0\1\0\0\0\0,\0\1\0\2\0\0\0\0"..., 32768, 0, NULL, NULL) = 216
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\3\0\t\f\0\0\0\0\0\0\0-\23\0\0\2\0\1\0\0\0\0-\0\0\0\2@\0\0\0"..., 96, 0, NULL, 0) = 96
4909  recvfrom(4, "\2\3\0\t\33\0\0\0\0\0\0\0-\23\0\0\2\0\1\0\0\0\0-\0\1\0\2\0\0\0\0"..., 32768, 0, NULL, NULL) = 216
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\16\0\0\20\0\0\0\0\0\0\0-\23\0\0\10\0\22\0\2\0\1\0\0\0\0\0\0\0\0\200"..., 128, 0, NULL, 0) = 128
4909  recvfrom(4, "\2\16\0\0\34\0\3\0\0\0\0\0-\23\0\0\3\0\5\0\377 \0\0\2\0\0\0\300\250\1\2"..., 32768, 0, NULL, NULL) = 224
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\16\0\0\20\0\0\0\0\0\0\0-\23\0\0\10\0\22\0\2\0\3\0\0\0\0\0\0\0\0\200"..., 128, 0, NULL, 0) = 128
4909  recvfrom(4, "\2\16\0\0\34\0\3\0\0\0\0\0-\23\0\0\3\0\5\0\377 \0\0\2\0\0\0\300\250\1\2"..., 32768, 0, NULL, NULL) = 224
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  socket(PF_NETLINK, SOCK_RAW, 0)   = 5
4909  bind(5, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
4909  getsockname(5, {sa_family=AF_NETLINK, pid=4909, groups=00000000}, [12]) = 0
4909  sendto(5, "\24\0\0\0\26\0\1\3#7|K\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\2\0#7|K-\23\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 116
4909  recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0#7|K-\23\0\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
4909  close(5)                          = 0
4909  open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
4909  fstat(5, {st_mode=S_IFREG|0644, st_size=131, ...}) = 0
4909  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa171c80000
4909  read(5, "127.0.0.1\tlocalhost\n192.168.1.2\t"..., 4096) = 131
4909  close(5)                          = 0
4909  munmap(0x7fa171c80000, 4096)      = 0
4909  setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
4909  sendto(4, "\2\16\0\0\20\0\0\0\0\0\0\0-\23\0\0\10\0\22\0\2\0\2\0\0\0\0\0\0\0\0\200"..., 128, 0, NULL, 0) = 128
4909  recvfrom(4, "\2\16\0\0\34\0\3\0\0\0\0\0-\23\0\0\3\0\5\0\377 \0\0\2\0\0\0\300\250\1\3"..., 32768, 0, NULL, NULL) = 224
4909  read(3, "", 8192)                 = 0
4909  ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffa5d10d90) = -1 ENOTTY (Inappropriate ioctl for device)
4909  exit_group(0)                     = ?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 19:17 regression due to "flush SAD/SPD generate false events" Alexey Dobriyan
@ 2010-02-17 21:42 ` David Miller
  2010-02-17 23:34   ` jamal
  2010-02-17 21:42 ` jamal
  1 sibling, 1 reply; 16+ messages in thread
From: David Miller @ 2010-02-17 21:42 UTC (permalink / raw)
  To: adobriyan; +Cc: hadi, netdev

From: Alexey Dobriyan <adobriyan@gmail.com>
Date: Wed, 17 Feb 2010 21:17:19 +0200

> commit 19f4c7133fc1b94001b997c4843d0a9192ee63e5
> xfrm: Flushing empty SAD generates false events
> 
> commit 0dca3a843632c2fbb6e358734fb08fc23e800f50
> xfrm: Flushing empty SPD generates false events
> 
> setkey now takes several seconds to run this simple script
> and it spits "recv: Resource temporarily unavailable" messages.
> 
> #!/usr/sbin/setkey -f
> flush;
> spdflush;
> 
> add A B ipcomp 44 -m tunnel -C deflate;
> add B A ipcomp 45 -m tunnel -C deflate;
> 
> spdadd A B any -P in ipsec
>         ipcomp/tunnel/192.168.1.2-192.168.1.3/use;
> spdadd B A any -P out ipsec
>         ipcomp/tunnel/192.168.1.3-192.168.1.2/use;

Thanks for the report Alexey.  I'll revert these changes
for now.

Jamal, if you can find a way to do this without breaking
existing applications feel free to send a new version of
these patches.

Thanks.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 19:17 regression due to "flush SAD/SPD generate false events" Alexey Dobriyan
  2010-02-17 21:42 ` David Miller
@ 2010-02-17 21:42 ` jamal
  2010-02-17 23:07   ` jamal
  1 sibling, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-17 21:42 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: davem, netdev

On Wed, 2010-02-17 at 21:17 +0200, Alexey Dobriyan wrote:
> commit 19f4c7133fc1b94001b997c4843d0a9192ee63e5
> xfrm: Flushing empty SAD generates false events
> 
> commit 0dca3a843632c2fbb6e358734fb08fc23e800f50
> xfrm: Flushing empty SPD generates false events
> 
> setkey now takes several seconds to run this simple script
> and it spits "recv: Resource temporarily unavailable" messages.

I will try to reproduce it in about an hour. Do you have
anything like selinux being used etc?
 
BTW, the script seems a little strange because i think 
the template wont match between the SA/SP.. (doesnt
matter if you are testing insertion/flushing)

Does the following look reasonable for testing?
----
#!/usr/sbin/setkey -f
flush;
spdflush;

add 192.168.1.2 192.168.1.3 ipcomp 44 -m tunnel -C deflate;
add 192.168.1.3 192.168.1.2 ipcomp 45 -m tunnel -C deflate;

spdadd 10.0.1.2 10.1.2.3 any -P in ipsec
        ipcomp/tunnel/192.168.1.2-192.168.1.3/use;
spdadd 10.1.2.3 10.0.1.2 any -P out ipsec
        ipcomp/tunnel/192.168.1.3-192.168.1.2/use;
-----

cheers,
jamal


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 21:42 ` jamal
@ 2010-02-17 23:07   ` jamal
  2010-02-17 23:32     ` jamal
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-17 23:07 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: davem, netdev

On Wed, 2010-02-17 at 16:42 -0500, jamal wrote:

> I will try to reproduce it in about an hour. Do you have
> anything like selinux being used etc?

I have reproduced it - thanks Alexey. When you flush
an empty table, the time goes up from about 1.5s
to 3 secs with pfkey. You also see the EAGAIN for
each flush ...
I am going to dig a little more ..

cheers,
jamal


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 23:07   ` jamal
@ 2010-02-17 23:32     ` jamal
  2010-02-18 18:55       ` Alexey Dobriyan
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-17 23:32 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: davem, netdev

[-- Attachment #1: Type: text/plain, Size: 673 bytes --]

On Wed, 2010-02-17 at 18:07 -0500, jamal wrote:
> When you flush
> an empty table, the time goes up from about 1.5s
> to 3 secs with pfkey. You also see the EAGAIN for
> each flush ...
> I am going to dig a little more ..

Here is a fix. The speed is restored (actually looks a little better
now) - the only thing is if you try to flush an empty table we return
-ESRCH; this seems reasonable, no? So a script like following 

---
#!/usr/sbin/setkey -f
flush;
spdflush;
----

will get:
---
bigismall:~# time setkey -f ./setkey-sample
The result of line 2: No such process.
The result of line 3: No such process.

real	0m0.663s
user	0m0.080s
sys	0m0.128s
----

cheers,
jamal

[-- Attachment #2: incr-flush-pfkey --]
[-- Type: text/x-patch, Size: 759 bytes --]

diff --git a/net/key/af_key.c b/net/key/af_key.c
index 8b8e26a..79d2c0f 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -1751,7 +1751,7 @@ static int pfkey_flush(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hd
 	audit_info.secid = 0;
 	err = xfrm_state_flush(net, proto, &audit_info);
 	if (err)
-		return 0;
+		return err;
 	c.data.proto = proto;
 	c.seq = hdr->sadb_msg_seq;
 	c.pid = hdr->sadb_msg_pid;
@@ -2713,7 +2713,7 @@ static int pfkey_spdflush(struct sock *sk, struct sk_buff *skb, struct sadb_msg
 	audit_info.secid = 0;
 	err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, &audit_info);
 	if (err)
-		return 0;
+		return err;
 	c.data.type = XFRM_POLICY_TYPE_MAIN;
 	c.event = XFRM_MSG_FLUSHPOLICY;
 	c.pid = hdr->sadb_msg_pid;

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 21:42 ` David Miller
@ 2010-02-17 23:34   ` jamal
  2010-02-17 23:40     ` David Miller
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-17 23:34 UTC (permalink / raw)
  To: David Miller; +Cc: adobriyan, netdev

On Wed, 2010-02-17 at 13:42 -0800, David Miller wrote:

> Jamal, if you can find a way to do this without breaking
> existing applications feel free to send a new version of
> these patches.

I sent incremental patch. If you still want me to resend
the whole thing i could after Alexey responds.

cheers,
jamal



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 23:34   ` jamal
@ 2010-02-17 23:40     ` David Miller
  2010-02-17 23:49       ` jamal
  0 siblings, 1 reply; 16+ messages in thread
From: David Miller @ 2010-02-17 23:40 UTC (permalink / raw)
  To: hadi; +Cc: adobriyan, netdev

From: jamal <hadi@cyberus.ca>
Date: Wed, 17 Feb 2010 18:34:38 -0500

> On Wed, 2010-02-17 at 13:42 -0800, David Miller wrote:
> 
>> Jamal, if you can find a way to do this without breaking
>> existing applications feel free to send a new version of
>> these patches.
> 
> I sent incremental patch. If you still want me to resend
> the whole thing i could after Alexey responds.

Please do, your changes are reverted so I need the whole
thing back.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 23:40     ` David Miller
@ 2010-02-17 23:49       ` jamal
  2010-02-17 23:55         ` David Miller
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-17 23:49 UTC (permalink / raw)
  To: David Miller; +Cc: adobriyan, netdev

On Wed, 2010-02-17 at 15:40 -0800, David Miller wrote:

> Please do, your changes are reverted so I need the whole
> thing back.

np.
Q: Something odd i noticed when looking at pfkey (different behavior
from netlink):

pfkey_sendmsg() does at the end:
return err ? : len;

So if err was 0, it will always return the length which is
16 in the flush which was causing the EAGAIN Alexey saw. If i returned
the correct error (ESRCH), it goes unfiltered.
It sounds to me that should just unconditionaly return err, no?

cheers,
jamal


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 23:49       ` jamal
@ 2010-02-17 23:55         ` David Miller
  2010-02-18  0:03           ` jamal
  0 siblings, 1 reply; 16+ messages in thread
From: David Miller @ 2010-02-17 23:55 UTC (permalink / raw)
  To: hadi; +Cc: adobriyan, netdev

From: jamal <hadi@cyberus.ca>
Date: Wed, 17 Feb 2010 18:49:13 -0500

> On Wed, 2010-02-17 at 15:40 -0800, David Miller wrote:
> 
>> Please do, your changes are reverted so I need the whole
>> thing back.
> 
> np.
> Q: Something odd i noticed when looking at pfkey (different behavior
> from netlink):
> 
> pfkey_sendmsg() does at the end:
> return err ? : len;
> 
> So if err was 0, it will always return the length which is
> 16 in the flush which was causing the EAGAIN Alexey saw. If i returned
> the correct error (ESRCH), it goes unfiltered.
> It sounds to me that should just unconditionaly return err, no?

I don't think any sendmsg() method should return 0 when something
was actually sent.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 23:55         ` David Miller
@ 2010-02-18  0:03           ` jamal
  0 siblings, 0 replies; 16+ messages in thread
From: jamal @ 2010-02-18  0:03 UTC (permalink / raw)
  To: David Miller; +Cc: adobriyan, netdev

On Wed, 2010-02-17 at 15:55 -0800, David Miller wrote:

> I don't think any sendmsg() method should return 0 when something
> was actually sent.

;-> Ok, I need to call it a day ;->

cheers,
jamal


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-17 23:32     ` jamal
@ 2010-02-18 18:55       ` Alexey Dobriyan
  2010-02-18 20:53         ` jamal
  0 siblings, 1 reply; 16+ messages in thread
From: Alexey Dobriyan @ 2010-02-18 18:55 UTC (permalink / raw)
  To: jamal; +Cc: davem, netdev

On Wed, Feb 17, 2010 at 06:32:09PM -0500, jamal wrote:
> On Wed, 2010-02-17 at 18:07 -0500, jamal wrote:
> > When you flush
> > an empty table, the time goes up from about 1.5s
> > to 3 secs with pfkey. You also see the EAGAIN for
> > each flush ...
> > I am going to dig a little more ..
> 
> Here is a fix. The speed is restored (actually looks a little better
> now) - the only thing is if you try to flush an empty table we return
> -ESRCH; this seems reasonable, no? So a script like following 
> 
> ---
> #!/usr/sbin/setkey -f
> flush;
> spdflush;
> ----
> 
> will get:
> ---
> bigismall:~# time setkey -f ./setkey-sample
> The result of line 2: No such process.
> The result of line 3: No such process.

I'd expect flushing empty SAD/SPD to be exact nops. :^)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-18 18:55       ` Alexey Dobriyan
@ 2010-02-18 20:53         ` jamal
  2010-02-18 21:45           ` jamal
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-18 20:53 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: davem, netdev

On Thu, 2010-02-18 at 20:55 +0200, Alexey Dobriyan wrote:

> I'd expect flushing empty SAD/SPD to be exact nops. :^)

Agree - that is a better alternative.
I was hoping returning an error code of 0 will do that.
But that triggers the EAGAIN you saw. It doesnt trigger
an EAGAIN for the netlink side (and it is a nop there).
Let me look at it. Clearly the EAGAIN is causing the 
latency.

cheers,
jamal


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-18 20:53         ` jamal
@ 2010-02-18 21:45           ` jamal
  2010-02-18 22:27             ` David Miller
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-18 21:45 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: davem, netdev

On Thu, 2010-02-18 at 15:53 -0500, jamal wrote:

> Agree - that is a better alternative.
> I was hoping returning an error code of 0 will do that.
> But that triggers the EAGAIN you saw. It doesnt trigger
> an EAGAIN for the netlink side (and it is a nop there).
> Let me look at it. Clearly the EAGAIN is causing the 
> latency.

Ok, looking closely at the strace i think ive figured out
what pfkey is doing. It basically sets non-blocking receive
and expects to see the flush event whether real or bogus
(EAGAIN is because it tries to recvmsg and fails the first
time because we dont send the event when table is empty).

The two options are: 1) Restore old behavior just for pfkey
where bogus event is sent always or 2) return -ESRCH as I
have done in the last patch.
I think #2 is more accurate. But if that is going to break
existing scripts then #1 is the way to go.

Thoughts?

cheers,
jamal




^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-18 21:45           ` jamal
@ 2010-02-18 22:27             ` David Miller
  2010-02-18 22:52               ` jamal
  0 siblings, 1 reply; 16+ messages in thread
From: David Miller @ 2010-02-18 22:27 UTC (permalink / raw)
  To: hadi; +Cc: adobriyan, netdev

From: jamal <hadi@cyberus.ca>
Date: Thu, 18 Feb 2010 16:45:58 -0500

> The two options are: 1) Restore old behavior just for pfkey
> where bogus event is sent always or 2) return -ESRCH as I
> have done in the last patch.
> I think #2 is more accurate. But if that is going to break
> existing scripts then #1 is the way to go.
> 
> Thoughts?

Let's see how #2 works out, if we get any more breakage
cases reported then we'll have to revert again and go with
#1.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-18 22:27             ` David Miller
@ 2010-02-18 22:52               ` jamal
  2010-02-18 23:01                 ` David Miller
  0 siblings, 1 reply; 16+ messages in thread
From: jamal @ 2010-02-18 22:52 UTC (permalink / raw)
  To: David Miller; +Cc: adobriyan, netdev

On Thu, 2010-02-18 at 14:27 -0800, David Miller wrote:

> Let's see how #2 works out, if we get any more breakage
> cases reported then we'll have to revert again and go with
> #1.

Actually, i think i found the root cause. The sequence should be:

1) pfkey->kernel: flush
kernel flushes SA/SPD
2)kernel->pfkey: respond to flush message
3)kernel->all user space listeners: i just flushed the SA/SPD

#2 is always needed.
#3 is wrong if SA/SPD is empty.
kernel unfortunately sends a single broadcast which combines
#2 and #3. So the proper fix is to break #2 and #3 into
separate messages. And follow the rules above.

I dont have time to fix it right now - but i will send a patch
tommorow.

cheers,
jamal


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: regression due to "flush SAD/SPD generate false events"
  2010-02-18 22:52               ` jamal
@ 2010-02-18 23:01                 ` David Miller
  0 siblings, 0 replies; 16+ messages in thread
From: David Miller @ 2010-02-18 23:01 UTC (permalink / raw)
  To: hadi; +Cc: adobriyan, netdev

From: jamal <hadi@cyberus.ca>
Date: Thu, 18 Feb 2010 17:52:41 -0500

> I dont have time to fix it right now - but i will send a patch
> tommorow.

Ok, thanks for the update.

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2010-02-18 23:01 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-17 19:17 regression due to "flush SAD/SPD generate false events" Alexey Dobriyan
2010-02-17 21:42 ` David Miller
2010-02-17 23:34   ` jamal
2010-02-17 23:40     ` David Miller
2010-02-17 23:49       ` jamal
2010-02-17 23:55         ` David Miller
2010-02-18  0:03           ` jamal
2010-02-17 21:42 ` jamal
2010-02-17 23:07   ` jamal
2010-02-17 23:32     ` jamal
2010-02-18 18:55       ` Alexey Dobriyan
2010-02-18 20:53         ` jamal
2010-02-18 21:45           ` jamal
2010-02-18 22:27             ` David Miller
2010-02-18 22:52               ` jamal
2010-02-18 23:01                 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).