Thanks Bryan for your attentions to these issues and providing fixes so quickly. I really appreciate it.
This morning I built new image with your fix and confirmed that now samba works smoothly providing change notification using inotify in a smartos OS zone. It's the first time we no longer depends on the buggy gam_server. Regarding the IN_CREATE issue, probably we don't care much about it, but for the sake of correctness, it would be nice if it can be fixed in the future. Sincerely, -- Youzhong On Thu, Dec 11, 2014 at 3:26 AM, Bryan Cantrill <bryancantr...@gmail.com> wrote: > > Just wanted to let you know that I fixed this; commit is here: > > > https://github.com/joyent/illumos-joyent/commit/af6c46b5dae7a37d78d71546df5045236cd48994 > > This doesn't address the IN_CREATE issue, which is a much more involved > issue -- but should solve the FIONREAD problems... > > - Bryan > > > On Wed, Dec 10, 2014 at 4:07 PM, Bryan Cantrill <bryancantr...@gmail.com> > wrote: > >> >> Yeah, that's busted, and I see the bug (we're calculating the size >> incorrectly); I'll fix that when I fix FIONREAD -- with my apologies... >> >> - Bryan >> >> >> On Wed, Dec 10, 2014 at 12:37 PM, Youzhong Yang <youzh...@gmail.com> >> wrote: >> >>> Hi Bryan, >>> >>> I saw the bug in the function inotify_ioctl() and tried to fix it. Now >>> with my new image ioctl(FIONREAD) returns state->ins_size as the bytes >>> available to be read. >>> >>> [root@batfs5901 ~]# /var/tmp/inotify >>> ioctl = 0, errno = 0, bufsize = 64 >>> got 48 bytes >>> -> New file yyang created >>> -> yyang ATTRIB >>> >>> this state->ins_size seems larger than the number of bytes read by >>> read() call, i.e. state->ins_size does not tell the exact number of bytes >>> available for read. >>> >>> This can be a problem when the program expects to read that many bytes. >>> I just confirmed it causes issue in Samba. >>> >>> Thanks, >>> >>> -- Youzhong >>> >>> >>> On Wed, Dec 10, 2014 at 1:05 PM, Bryan Cantrill <bryancantr...@gmail.com >>> > wrote: >>> >>>> >>>> The touch differences can be explained by the touch(1) that you're >>>> using: in the global zone, you're using /usr/bin/touch, but in the >>>> non-global, I imagine that you're using /opt/local/bin/touch. These two >>>> implementations differ, so not a huge surprise that their implementation >>>> details differ. >>>> >>>> As for FIONREAD: indeed, that seems screwed up -- it seems to be >>>> returning the number of bytes instead of storing in in the specified >>>> argument. I'll get that fixed today... >>>> >>>> - Bryan >>>> >>>> >>>> >>>> On Wed, Dec 10, 2014 at 8:00 AM, Youzhong Yang via smartos-discuss < >>>> smartos-discuss@lists.smartos.org> wrote: >>>> >>>>> Hello again, >>>>> >>>>> I downloaded smartos latest image (joyent_20141127T173954Z) and tested >>>>> inotify using it. >>>>> >>>>> Two issues were observed: >>>>> >>>>> 1. ioctl(fd, FIONREAD, ...) does not work as expected. It does not >>>>> return the number of bytes that are available to be read on an inotify >>>>> instance. >>>>> >>>>> 2. In an OS zone, touching a file always generates an IN_CREATE event, >>>>> even though the file already exists. This only happens in an OS zone, not >>>>> in global zone. >>>>> >>>>> Attached is the test program I used for testing. Just compile and run >>>>> it, then in another terminal window, 'touch /tmp/file' twice. Please look >>>>> at the details at the end of this e-mail. >>>>> >>>>> Thanks, >>>>> >>>>> -Youzhong >>>>> >>>>> --- In global zone --- >>>>> [root@batfs5999 /var/tmp]# ./inotify >>>>> ioctl = 64, errno = 0, bufsize = 0 >>>>> got 48 bytes >>>>> :: mask 256 >>>>> -> New file file created >>>>> :: mask 4 >>>>> -> file ATTRIB >>>>> ioctl = 32, errno = 0, bufsize = 0 >>>>> got 24 bytes >>>>> :: mask 4 >>>>> -> file ATTRIB >>>>> >>>>> --- In OS zone --- >>>>> [root@batfs5999-cifs0 /var/tmp]# ./inotify >>>>> ioctl = 64, errno = 0, bufsize = 0 >>>>> got 48 bytes >>>>> :: mask 256 >>>>> -> New file file created >>>>> :: mask 4 >>>>> -> file ATTRIB >>>>> ioctl = 64, errno = 0, bufsize = 0 >>>>> got 48 bytes >>>>> :: mask 256 >>>>> -> New file file created >>>>> :: mask 4 >>>>> -> file ATTRIB >>>>> >>>>> --- On Linux --- >>>>> % ./inotify >>>>> ioctl = 0, errno = 0, bufsize = 32 >>>>> got 32 bytes >>>>> :: mask 256 >>>>> -> New file file created >>>>> ioctl = 0, errno = 0, bufsize = 32 >>>>> got 32 bytes >>>>> :: mask 4 >>>>> -> file ATTRIB >>>>> ioctl = 0, errno = 0, bufsize = 32 >>>>> got 32 bytes >>>>> :: mask 4 >>>>> -> file ATTRIB >>>>> >>>>> *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