[Gluster-devel] epoll.c bug

Anand Avati avati at zresearch.com
Mon Dec 10 22:30:23 UTC 2007


Thierry,
  thanks for the gdb traces. this looks like the epoll() call in your system
(ARM processor platform) is broken. the epoll in your case has returned 3
but the 2'nd and 3'rd entries are junk. can you also get me the output of "p
*ectx" from frame 2 ?

you might want to use poll which I feel might be more reliable. currently
the only way to 'force' poll is to move away sys/epoll.h during ./configure
(sorry, will add a --disable-epoll soon :D) and recompile.

avati


> Program terminated with signal 11, Segmentation fault.
> #0  0x00000000 in ?? ()
> (gdb) where
> #0  0x00000000 in ?? ()
> #1  0x400368a4 in transport_notify (this=0x1b3d8, event=16) at transport.c
> :154
> #2  0x40037570 in epoll_notify (eevent=462576, data=0x1b3d8) at epoll.c:54
> #3  0x40037b0c in sys_epoll_iteration (ctx=0xbed6d9c8) at epoll.c:182
> #4  0x40036d9c in poll_iteration (ctx=0xbed6d9c8) at transport.c:302
> #5  0x00009c08 in main ()
> (gdb) up
> #1  0x400368a4 in transport_notify (this=0x1b3d8, event=16) at transport.c
> :154
> 154       return this->notify (this->xl, ev, this);
> (gdb) p *this
> $2 = {ops = 0x1b6f0, private = 0x0, xl_private = 0x0, lock = {__data = {
>       __lock = 0, __count = 0, __owner = 33, __kind = 0, __nusers = 12,
>       __spins = 0},
>       __size =
> "\000\000\000\000\000\000\000\000!\000\000\000\000\000\000\000\f\000\000\000\000\000\000",
> __align = 0},
>       refcount = 111408, xl = 0x1,
>       dnscache = 0x0, buf = 0x0, init = 0x59, peerinfo = {sockaddr = {
>       sin_family = 9808, sin_port = 17567, sin_addr = {s_addr = 114040},
>       sin_zero = "\000\000\000\000\000\000\000"}}, fini = 0, notify = 0}
> (gdb) up
> #2  0x40037570 in epoll_notify (eevent=462576, data=0x1b3d8) at epoll.c:54
> 54        ret = transport_notify (trans, event);
> (gdb) up
> #3  0x40037b0c in sys_epoll_iteration (ctx=0xbed6d9c8) at epoll.c:182
> 182         epoll_notify (ectx->evs[i].events,
> (gdb) p *ctx
> $1 = {pool = 0x13008, fin = 0 '\0', foreground = 0 '\0',
>   logfile = 0xa15c
> "/mnt/disk1/share/YYY/var/log/glusterfs/glusterfsd.log",
>   loglevel = 3, poll_type = SYS_POLL_TYPE_EPOLL, poll_ctx = 0x197b8,
>   timer = 0x13058, graph = 0x0, ib = 0x0, node_name = 0x0, lock = {__data
> = {
>       __lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0,
>       __spins = 0}, __size = '\0' <repeats 23 times>, __align = 0}}
> (gdb) p *ectx
> $6 = {epollfd = 5, fds = 4, evs = 0x53da8, ev_count = 4, lock = {__data =
> {
>       __lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0,
>       __spins = 0}, __size = '\0' <repeats 23 times>, __align = 0}, cond =
> {
>     __data = {__lock = 0, __futex = 0, __total_seq = 0, __wakeup_seq = 0,
>       __woken_seq = 0, __mutex = 0x0, __nwaiters = 0, __broadcast_seq =
> 0},
>     __size = '\0' <repeats 47 times>, __align = 0}}
> (gdb) p i
> $7 = 2
> (gdb) p ret
> $9 = 3
> (gdb) p ectx->evs[0]
> $10 = {events = 1, data = {ptr = 0x53820, fd = 342048, u32 = 342048,
>     u64 = 4295309344}}
> (gdb) p ectx->evs[1]
> $11 = {events = 0, data = {ptr = 0x11, fd = 17, u32 = 17, u64 = 17}}
> (gdb) p ectx->evs[2]
> $12 = {events = 462576, data = {ptr = 0x1b3d8, fd = 111576, u32 = 111576,
>     u64 = 475813657031640}}
>
> ====================================================================
>
> # The server configuration (brick-afr is not used)
> volume brick1
>   type storage/posix
>   option directory /mnt/disk1/gluster
> end-volume
> volume brick2
>   type features/posix-locks
>   subvolumes brick1
> end-volume
> volume brickafr
>   type storage/posix
>   option directory /mnt/disk1/glusterafr
> end-volume
> volume brick
>   type performance/io-threads
>   option thread-count 8
>   option cache-size 8MB
>   subvolumes brick2
> end-volume
> volume server
>   type protocol/server
>   subvolumes brick brickafr
>   option transport-type tcp/server     # For TCP/IP transport
>   option auth.ip.brick.allow 192.168.*
> end-volume
>
> ====================================================================
>
> About the installation, the 'make install' doesn't use
> the configuration --prefix argument to issue the following line :
>
> /usr/bin/install -c 'mount.glusterfs' '/sbin/mount.glusterfs'
>
> ====================================================================
>
> Thanks again for your work.
>
> Thierry Excoffier.
> --
> Thierry.EXCOFFIER@@liris.univ-lyon1.fr//   GO: Oriental Strategy Game
> LIRIS/UFR Informatique, bat710       //DYLAN: Programming Language
> Universite Claude Bernard LYON 1  __// UNIX: Standard Operating System
> 43 Bd du 11 novembre 1918       //
> 69622 VILLEURBANNE, FRANCE     //WWW: http://www710.univ-lyon1.fr/~exco
>
>
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at nongnu.org
> http://lists.nongnu.org/mailman/listinfo/gluster-devel
>



-- 
It always takes longer than you expect, even when you take into account
Hofstadter's Law.

-- Hofstadter's Law



More information about the Gluster-devel mailing list