Thanks very much for the quick fix. I'll build a new image and also samba, then report back after testing.
-Youzhong On Fri, Aug 1, 2014 at 4:56 AM, Bryan Cantrill <bryancantr...@gmail.com> wrote: > > Perfect -- thank you! As it turns out, this was -- as you surmised -- a > bug in our epoll implementation. I have pushed the fix: > > > https://github.com/joyent/illumos-joyent/commit/471f1f3ef02e25a84d7c36c857ed260ae2b7ac99 > > Thanks for taking the time for the clean test case -- and apologies for > the bug! > > - Bryan > > > On Thu, Jul 31, 2014 at 7:28 AM, Youzhong Yang <youzh...@gmail.com> wrote: > >> Thanks Bryan. >> >> I take back what I said. epoll_* does not ignore epoll_event.data passed >> in. >> >> I managed to reproduce the issue with a program rewritten from yours: >> >> # gcc myepoll.c >> # ./a.out >> EPOLL_CTL_ADD: fd = 4, ptr = fffffd7fffdffba0 >> writing to pipe fd 5 >> written 6 bytes to fd 5 >> Got an event on fd 4, events = 1, ptr = fffffd7fffdffba0 >> got 6 bytes from fd 5 >> EPOLL_CTL_DEL: fd = 4, ptr = fffffd7fffdffba0 >> EPOLL_CTL_ADD: fd = 4, ptr = fffffd7fffdffb80 >> writing to pipe fd 5 >> written 6 bytes to fd 5 >> Got an event on fd 4, events = 1, ptr = fffffd7fffdffba0 >> got 6 bytes from fd 5 >> >> As it indicates, the issue here is that after EPOLL_CTL_DEL, and then >> EPOLL_CTL_ADD of the same file descriptor with a new data.ptr, epoll_wait >> still returns an old pointer. >> >> C code is attached for your reference. >> >> Thanks very much, >> >> -Youzhong >> >> >> On Wed, Jul 30, 2014 at 5:38 PM, Bryan Cantrill <bryancantr...@gmail.com> >> wrote: >> >>> >>> Seems like a bug, but not sure I entirely understand: there may be some >>> edge conditions where data specified in the "data" field of the epoll_event >>> structure via epoll_ctl() is not properly returned, but it's not true that >>> SmartOS simply ignores it. Take, for example, the following program: >>> >>> https://us-east.manta.joyent.com/bcantrill/public/epoll_add.c >>> >>> (It's essentially the most basic possible use of epoll(5).) Compiling >>> that program and running it yields (for me, anyway) the same result on >>> SmartOS as it does on Linux: >>> >>> $ ./epoll_add >>> writing to pipe >>> adding event... >>> parent: got an event on fd 4 >>> >>> I certainly don't doubt that there's a bug here -- I just don't think >>> it's quite as broad as you're implying; could you point me to the core file >>> for Samba and/or instructions as to how to reproduce the issue? >>> >>> - Bryan >>> >>> >>> >>> On Wed, Jul 30, 2014 at 2:08 PM, Youzhong Yang via smartos-discuss < >>> smartos-discuss@lists.smartos.org> wrote: >>> >>>> Hi All, >>>> >>>> The man page of epoll_ctl says: >>>> >>>> The data field specifies the datum to be associated with the >>>> event and will be returned via epoll_wait(3C). The events field >>>> denotes both the desired events (when specified via epoll_ctl()) >>>> and the events that have occurred (when returned via >>>> epoll_wait(3C)). >>>> >>>> This does not seem to be the case and is not compatible with Linux's >>>> implementation. Recently I tried to compile Samba 4.1.10 on smartos and >>>> 'net ads join' just crashes. Samba uses epoll_event.data.ptr to keep track >>>> of its tevent_fd data but epoll_ctl() on smartos simply ignores it and does >>>> not keep a copy of the 'data' structure and returns it when epoll_wait is >>>> called. >>>> >>>> Can I assume this is an implementation specific bug? >>>> >>>> Thanks, >>>> >>>> -Youzhong >>>> *smartos-discuss* | Archives >>>> <https://www.listbox.com/member/archive/184463/=now> >>>> <https://www.listbox.com/member/archive/rss/184463/21493597-819305a5> >>>> | Modify >>>> <https://www.listbox.com/member/?&> >>>> Your Subscription <http://www.listbox.com> >>>> >>> >>> >> > ------------------------------------------- smartos-discuss Archives: https://www.listbox.com/member/archive/184463/=now RSS Feed: https://www.listbox.com/member/archive/rss/184463/25769125-55cfbc00 Modify Your Subscription: https://www.listbox.com/member/?member_id=25769125&id_secret=25769125-7688e9fb Powered by Listbox: http://www.listbox.com