[Dovecot] Re: Dovecot inotify problem

Reuben Farrelly reuben-dovecot at reub.net
Mon Aug 22 10:20:42 EEST 2005


Hi again Johannes,

On 22/08/2005 7:04 p.m., Johannes Berg wrote:
> Hi Reuben,
> 
> I hope you don't mind me copying the dovecot list again.

Nope that's fine...

>> dovecot: Aug 21 04:08:22 Error: IMAP(reuben): inotify_rm_watch() failed: 
>> Invalid argument
> 
> Odd.
> 
>> This is with a 2.6.13-rc6-mm1 release.  I've posted to LKML because there is 
>> also a kernel stack produced at one point which looks inotify related (but the 
>> messages above are contant).
>> See http://www.ussg.iu.edu/hypermail/linux/kernel/0508.2/1180.html and the 
>> followup from akpm.
> 
> Thanks for the link. I don't think akpm is right, unless something is
> really odd here. Could you add debugging output for me please?
> 
> Maybe something like (this is not a patch you can apply, look at line
> 164 in src/lib/ioloop-notify-inotify.c)
> 
>         ctx->inotify_fd = inotify_init();
> +	i_warning("inotify_init returned fd %d", ctx->inotify_fd);
>         if (ctx->inotify_fd == -1) {
> 
> and line 106:
>                                             IN_CLOSE | IN_MODIFY);
> +	i_warning("inotify_add_watch returned %d", watchdescriptor);
>         if (watchdescriptor < 0) {
> and line 145:
>         }
> +	inotify_rm_watch("removing wd %d from inotify fd %d", io->notify_context, ctx->inotify_fd);
>         if (inotify_rm_watch(ctx->inotify_fd, io->notify_context) < 0)

So it looks like this?

         for (io_p = &ioloop->notifys; *io_p != NULL; io_p = &(*io_p)->next) {
                 if (*io_p == io) {
                         *io_p = io->next;
                         break;
                 }
         }

         inotify_rm_watch("removing wd %d from inotify fd %d", 
io->notify_context, ctx->inotify_fd);
         if (inotify_rm_watch(ctx->inotify_fd, io->notify_context) < 0)
                 i_error("inotify_rm_watch() failed: %m");

         p_free(ioloop->pool, io);


It barfs with gcc:

[root at tornado dovecot]# make
make  all-recursive
make[1]: Entering directory `/usr/src/dovecot/dovecot'
Making all in src
make[2]: Entering directory `/usr/src/dovecot/dovecot/src'
Making all in lib
make[3]: Entering directory `/usr/src/dovecot/dovecot/src/lib'
if gcc -DHAVE_CONFIG_H -I. -I. -I../..     -std=gnu99 -g -O2 -Wall -W 
-Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts 
-Wformat=2 -Wbad-function-cast -I/usr/kerberos/include    -MT 
ioloop-notify-inotify.o -MD -MP -MF ".deps/ioloop-notify-inotify.Tpo" -c -o 
ioloop-notify-inotify.o ioloop-notify-inotify.c; \
then mv -f ".deps/ioloop-notify-inotify.Tpo" ".deps/ioloop-notify-inotify.Po"; 
else rm -f ".deps/ioloop-notify-inotify.Tpo"; exit 1; fi
ioloop-notify-inotify.c: In function 'io_loop_notify_remove':
ioloop-notify-inotify.c:146: warning: passing argument 1 of 'inotify_rm_watch' 
makes integer from pointer without a cast
ioloop-notify-inotify.c:146: error: too many arguments to function 
'inotify_rm_watch'
make[3]: *** [ioloop-notify-inotify.o] Error 1
make[3]: Leaving directory `/usr/src/dovecot/dovecot/src/lib'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/src/dovecot/dovecot/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/src/dovecot/dovecot'
make: *** [all] Error 2
[root at tornado dovecot]


reuben


More information about the dovecot mailing list