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

Re: Processed: glibc 2.3.2 breaks nfs



Juergen Kreileder <jk@blackdown.de> writes:

> GOTO Masanori <gotom@debian.or.jp> writes:
>
>>> FYI: nfs-utils 1.0.5-1 works fine with libc6 2.3.1-17 from
>>> unstable here but with libc6 2.3.2-1 from experimental mountd dies
>>> after the first mount request.
>>
>> It's really few information!  At least under my environment, it
>> seems working fine.  Could you tell us more information in detail.
>
> It's an SMP system running linux 2.6.0-test1 and Debian unstable.
> The problem happens both with NFSv2 and NFSv3 over UDP, I haven't
> tried v4 or NFS over TCP.
>
> /etc/exports basically contains:
>
> path1   192.168.1.0/24(rw,sync)
> path2   192.168.1.0/24(rw,sync)
> path3   192.168.1.0/24(rw,sync)
>
> When a remote machines tries to mount these three filesystems
> (options: rsize=8192,wsize=8192), the first mount request suceeds
> but rpc.mountd is gone after that and the other request fail.
> There's nothing useful in the logs.
>
> I can't provide more information right now, the machine is running a
> test-suite currently and that will take about 30 hours more.  I'll
> install glibc 2.3.2-1 again on Monday and try rpc.mountd with
> debugging turned on.

I've finally upgraded the machine to glibc 2.3.2 again (using 2.3.2-2
this time).  I still see the same problem: the second mount request
fails because rpc.mountd crashes.

Kernel is 2.6.0-test3-mm2 SMP, nfs version is 1:1.0.5-1.

Here's some more info from running rpc.mountd with gdb, looks like the
crash happens at svc.c:413 (xprt = xports[fd];) because
__rpc_thread_variables is returning a NULL svc_xports_s.


$ LD_LIBRARY_PATH=/usr/lib/debug gdb /usr/sbin/rpc.mountd 
GNU gdb 5.3.90_2003-08-01-cvs-debian
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-linux"...(no debugging symbols found)...
(gdb) r -d all -F     
Starting program: /usr/sbin/rpc.mountd -d all -F
(no debugging symbols found)...[New Thread 16384 (LWP 10100)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 10100)]
0x4011e7a4 in svc_getreq_common (fd=7) at svc.c:413
413     svc.c: No such file or directory.
        in svc.c
(gdb) bt f
#0  0x4011e7a4 in svc_getreq_common (fd=7) at svc.c:413
        stat = 7
        msg = {rm_xid = 1193263939, rm_direction = CALL, ru = {RM_cmb = {cb_rpcvers = 2, cb_prog = 100005, cb_vers = 3, cb_proc = 1, cb_cred = {oa_flavor = 1, oa_base = 0xbffff360 "?@Èn", oa_length = 28}, 
      cb_verf = {oa_flavor = 0, oa_base = 0xbffff4f0 "", oa_length = 0}}, RM_rmb = {rp_stat = 2, ru = {RP_ar = {ar_verf = {oa_flavor = 100005, oa_base = 0x3 <Address 0x3 out of bounds>, oa_length = 1}, 
          ar_stat = PROG_UNAVAIL, ru = {AR_versions = {low = 3221222240, high = 28}, AR_results = {where = 0xbffff360 "?@Èn", proc = 0x1c}}}, RP_dr = {rj_stat = 100005, ru = {RJ_versions = {low = 3, 
              high = 1}, RJ_why = AUTH_BADVERF}}}}}}
        xprt = (SVCXPRT *) 0x8
        cred_area = "?@Èn\000\000\000\004dual", '\0' <repeats 11 times>, "\001\000\000\000\000\237¡\000@@öÿ¿\024\020\000@xôÿ¿b¡\000@H,\001@h\215\000@<öÿ¿8öÿ¿\214\b\000\000\000\000\000\000\004,\001@\031w\002@\000\000\000\000xôÿ¿\200óÿ¿2Ì\000@\000\000\000\000@\037\"Aèóÿ¿\004,\001@\020ôÿ¿\000\000\000\000øóÿ¿\035Í\000@\b\000\000\000,\000\000\000èôÿ¿\000\000\000\000@öÿ¿\004,\001@\210öÿ¿é\221\000@,\000\000\000\000\000\000\000\230ôÿ¿\213h\000@þ\222\004@\216\b\000@\000\000\000\000Bf\000@Ü!\001@\000\000\000\000 "...
#1  0x4011e6bc in svc_getreqset (readfds=0xbffff8b0) at svc.c:374
        mask = 128
        maskp = (u_int32_t *) 0xbffff8b4
        setsize = 1024
        sock = 0
#2  0x0804c61e in ?? ()
No symbol table info available.
#3  0xbffff8b0 in ?? ()
No symbol table info available.
#4  0xbffffa74 in ?? ()
No symbol table info available.
#5  0xbffff948 in ?? ()
No symbol table info available.
#6  0x0804c5b9 in ?? ()
No symbol table info available.
#7  0x08052d3d in _IO_stdin_used ()
No symbol table info available.
#8  0x00000001 in ?? ()
No symbol table info available.
#9  0xbffff928 in ?? ()
No symbol table info available.
#10 0x40151220 in __no_netlink_support () from /usr/lib/debug/libc.so.6
No symbol table info available.
#11 0x00000080 in ?? ()
No symbol table info available.
(gdb) i f
Stack level 0, frame at 0xbffff860:
 eip = 0x4011e7a4 in svc_getreq_common (svc.c:413); saved eip 0x4011e6bc
 called by frame at 0xbffff890
 source language c.
 Arglist at 0xbffff858, args: fd=7
 Locals at 0xbffff858, Previous frame's sp is 0xbffff860
 Saved registers:
  ebx at 0xbffff84c, ebp at 0xbffff858, esi at 0xbffff850, edi at 0xbffff854, eip at 0xbffff85c
(gdb) i lo
stat = 7
msg = {rm_xid = 1193263939, rm_direction = CALL, ru = {RM_cmb = {cb_rpcvers = 2, cb_prog = 100005, cb_vers = 3, cb_proc = 1, cb_cred = {oa_flavor = 1, oa_base = 0xbffff360 "?@Èn", oa_length = 28}, 
      cb_verf = {oa_flavor = 0, oa_base = 0xbffff4f0 "", oa_length = 0}}, RM_rmb = {rp_stat = 2, ru = {RP_ar = {ar_verf = {oa_flavor = 100005, oa_base = 0x3 <Address 0x3 out of bounds>, oa_length = 1}, 
          ar_stat = PROG_UNAVAIL, ru = {AR_versions = {low = 3221222240, high = 28}, AR_results = {where = 0xbffff360 "?@Èn", proc = 0x1c}}}, RP_dr = {rj_stat = 100005, ru = {RJ_versions = {low = 3, 
              high = 1}, RJ_why = AUTH_BADVERF}}}}}}
xprt = (SVCXPRT *) 0x8
cred_area = "?@Èn\000\000\000\004dual", '\0' <repeats 11 times>, "\001\000\000\000\000\237¡\000@@öÿ¿\024\020\000@xôÿ¿b¡\000@H,\001@h\215\000@<öÿ¿8öÿ¿\214\b\000\000\000\000\000\000\004,\001@\031w\002@\000\000\000\000xôÿ¿\200óÿ¿2Ì\000@\000\000\000\000@\037\"Aèóÿ¿\004,\001@\020ôÿ¿\000\000\000\000øóÿ¿\035Í\000@\b\000\000\000,\000\000\000èôÿ¿\000\000\000\000@öÿ¿\004,\001@\210öÿ¿é\221\000@,\000\000\000\000\000\000\000\230ôÿ¿\213h\000@þ\222\004@\216\b\000@\000\000\000\000Bf\000@Ü!\001@\000\000\000\000 "...
(gdb) print msg
$1 = {rm_xid = 1193263939, rm_direction = CALL, ru = {RM_cmb = {cb_rpcvers = 2, cb_prog = 100005, cb_vers = 3, cb_proc = 1, cb_cred = {oa_flavor = 1, oa_base = 0xbffff360 "?@Èn", oa_length = 28}, cb_verf = {
        oa_flavor = 0, oa_base = 0xbffff4f0 "", oa_length = 0}}, RM_rmb = {rp_stat = 2, ru = {RP_ar = {ar_verf = {oa_flavor = 100005, oa_base = 0x3 <Address 0x3 out of bounds>, oa_length = 1}, 
          ar_stat = PROG_UNAVAIL, ru = {AR_versions = {low = 3221222240, high = 28}, AR_results = {where = 0xbffff360 "?@Èn", proc = 0x1c}}}, RP_dr = {rj_stat = 100005, ru = {RJ_versions = {low = 3, 
              high = 1}, RJ_why = AUTH_BADVERF}}}}}}
(gdb) disas $pc-28 $pc+30
Dump of assembler code from 0x4011e788 to 0x4011e7c2:
0x4011e788 <svc_getreq_common+28>:      add    (%eax),%al
0x4011e78a <svc_getreq_common+30>:      mov    %eax,0xffffffd4(%ebp)
0x4011e78d <svc_getreq_common+33>:      lea    0xfffffc98(%ebp),%eax
0x4011e793 <svc_getreq_common+39>:      mov    %eax,0xffffffe0(%ebp)
0x4011e796 <svc_getreq_common+42>:      call   0x4011df64 <__rpc_thread_variables>
0x4011e79b <svc_getreq_common+47>:      mov    0xb0(%eax),%edx
0x4011e7a1 <svc_getreq_common+53>:      mov    0x8(%ebp),%eax
0x4011e7a4 <svc_getreq_common+56>:      mov    (%edx,%eax,4),%esi
0x4011e7a7 <svc_getreq_common+59>:      test   %esi,%esi
0x4011e7a9 <svc_getreq_common+61>:      je     0x4011e8a9 <svc_getreq_common+317>
0x4011e7af <svc_getreq_common+67>:      lea    0xffffffb8(%ebp),%eax
0x4011e7b2 <svc_getreq_common+70>:      mov    %eax,0xfffffad8(%ebp)
0x4011e7b8 <svc_getreq_common+76>:      sub    $0x8,%esp
0x4011e7bb <svc_getreq_common+79>:      mov    0x8(%esi),%eax
0x4011e7be <svc_getreq_common+82>:      pushl  0xfffffad8(%ebp)
End of assembler dump.
(gdb) print/x $edx
$1 = 0x0
(gdb) print/x $eax
$2 = 0x7


        Juergen

-- 
Juergen Kreileder, Blackdown Java-Linux Team
http://www.blackdown.org/java-linux/java2-status/



Reply to: