bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: tmpfs replacement


From: Marco Gerards
Subject: Re: tmpfs replacement
Date: 13 Aug 2003 23:31:17 +0200
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Roland McGrath <roland@frob.com> writes:

> The only interesting thread is the last one.  The others are service
> threads waiting for something to do, which is normal.  When showing cold
> backtraces, always include "x/i $pc" and "info regs" as well.  It's
> annoying that the arguments are omitted from most of the frames from "bt
> full", like the pager_memcpy call.  Anyway, we can suspect that getting
> that info would show that do_memcpy got a mapping and that memcpy is hung
> in the rep;stosl insn with esi/edi being the DATA argument to
> _diskfs_rdwr_internal (which should be the OTHER argument to pager_memcpy
> as well, not shown in the backtrace) and the page just got from vm_map.  If
> that's so, it means the hang is in a page fault on that newly-mapped page.
> That means all the troubles are actually in the default pager (or kernel).
> After verifying that the above is what's happening and vm_map was happy,
> you need to start tracing the interactions of the default pager and the
> kernel.

Thanks for your help. For completeness here is the "bt full" of thread
4, with debugging symbols for glibc this time, x/i and info regs.

What I expect is that after the page is deattached from the memory the
object is destroyed... That is what the test program I wrote made me
think. Does that make sense or do you have another idea?

Well, I hope this new backtrace helps a bit more. :)

> If debugging the live default pager turns into a nightmare, it may be
> worthwhile to do a little hacking so you can run a hacked mach-defpager
> server that is not installed as the kernel's default pager, which you
> separately use for tmpfs's default_pager_object_create.

Ok.

#0  0x01140dd3 in memcpy (dstpp=0x1d000, srcpp=0x128bf60, len=2)
    at ../sysdeps/generic/memcpy.c:61
        __d0 = 2
        dstp = 118784
        srcp = 19447648
#1  0x01042f14 in do_memcpy.2 ()
    at /home/marco/src/hurdcvs/hurd/libpager/pager-memcpy.c:125
        buf = {{__jmpbuf = {19446804, 40608, 0, 118784, 19447164, 19447132},
    __mask_was_saved = 19446804, __saved_mask = 17051412}}
        _pager_class = (struct port_class *) 0x804e928
#2  0x01042fb4 in do_copy.1 ()
    at /home/marco/src/hurdcvs/hurd/libpager/pager-memcpy.c:166
        buf = {{__jmpbuf = {4096, 19447164, 19447120, 2, 0, 19446840},
    __mask_was_saved = 19446840, __saved_mask = 17061048}}
        _pager_class = (struct port_class *) 0x804e928
#3  0x010d9643 in hurd_catch_signal () at catch-signal.c:60
No locals.
#4  0x010431cf in pager_memcpy ()
    at /home/marco/src/hurdcvs/hurd/libpager/pager-memcpy.c:207
No locals.
#5  0x01039127 in _diskfs_rdwr_internal (np=0x80550f8,
    data=0x128bf60 "a\n\001", offset=0, amt=0x128df60, dir=1, notime=0)
    at ../../hurd/libdiskfs/rdwr-internal.c:61
        memobj = 41
---Type <return> to continue, or q <return> to quit---
        prot = 3
        err = EKERN_NO_SPACE
#6  0x0103554c in diskfs_S_io_write (cred=0x804ef28, data=0x128bf60 "a\n\001",
    datalen=2, offset=-1, amt=0x128df60) at ../../hurd/libdiskfs/io-write.c:80
        np = (struct node *) 0x80550f8
        err = 0
        off = 0
#7  0x01035808 in _Xio_write (InHeadP=0x128bf3c, OutHeadP=0x128df3c)
    at ioServer.c:131
        In1P = (Request *) 0x128b740
        msgh_size = 118784
        msgh_size_delta = 2
        offsetCheck = {msgt_name = 11, msgt_size = 64, msgt_number = 1,
  msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
        amountType = {msgt_name = 2, msgt_size = 32, msgt_number = 1,
  msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
        io_object = 0x804ef28
#8  0x01035705 in diskfs_io_server (InHeadP=0x128bf3c, OutHeadP=0x1d000)
    at ioServer.c:1999
        RetCodeType = {msgt_name = 2, msgt_size = 32, msgt_number = 1,
  msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
        routine = 0x2
#9  0x01027da1 in diskfs_demuxer (inp=0x128bf3c, outp=0x128df3c)
    at ../../hurd/libdiskfs/demuxer.c:32
---Type <return> to continue, or q <return> to quit---
No locals.
#10 0x01097e51 in internal_demuxer.0 ()
    at /home/marco/src/hurdcvs/hurd/libports/manage-multithread.c:101
No locals.
#11 0x010c3490 in __mach_msg_server_timeout (demux=0x127ff2c, max_size=8192,
    rcv_name=24, option=2048, timeout=0) at msgserver.c:147
        request = (struct {...} *) 0x128bf3c
        reply = (struct {...} *) 0x128df3c
        mr = 2
#12 0x01097f50 in thread_function.1 ()
    at /home/marco/src/hurdcvs/hurd/libports/manage-multithread.c:136
No locals.
#13 0x010926d8 in cthread_body (self=0x804edf0)
    at /home/marco/src/hurdcvs/hurd/libthreads/cthreads.c:306
        t = 0x804ed78



(gdb) x/i $pc
0x1140dd3 <memcpy+47>:  repz movsb %ds:(%esi),%es:(%edi)


(gdb) info registerseax            0x2      2
ecx            0x2      2
edx            0x1d000  118784
ebx            0x10454b8        17061048
esp            0x128bbcc        0x128bbcc
ebp            0x128bbd4        0x128bbd4
esi            0x128bf60        19447648
edi            0x1d000  118784
eip            0x1140dd3        0x1140dd3
eflags         0x10293  66195
cs             0x17     23
ss             0x1f     31
ds             0x1f     31
es             0x1f     31
fs             0x1f     31
gs             0x1f     31
fctrl          0x0      0
fstat          0x0      0
ftag           0x0      0
fiseg          0x0      0
fioff          0x0      0
foseg          0x0      0
fooff          0x0      0
fop            0x0      0







reply via email to

[Prev in Thread] Current Thread [Next in Thread]