<br><font size=2 face="sans-serif">Hi,</font>
<br><font size=2 face="sans-serif"> thank
you very much for you response! The busybox is 1.3.1. I will try 1.6.1
tomorrow. But i use ethereal to catch logs on the server side and found
that the server can receive the TCP packets from client and response. But
when it receive the mount service based on RPC, RPC version is 2. Mount
service program version is 1. But it just does not reponse. So, i
think this must be sth wrong, i will catch a successful nfs/mount log tomorrow.Thanks
again!</font>
<br>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Denys Vlasenko <vda.linux@googlemail.com></b>
</font>
<p><font size=1 face="sans-serif">08/28/2007 06:56 PM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">$B08@h(B</font></div>
<td><font size=1 face="sans-serif">xiao.liang@cn.alps.com</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td><font size=1 face="sans-serif">busybox@busybox.net<br>
"hinko.kocevar@cetrtapot.si" <hinko.kocevar@cetrtapot.si></font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">$B7oL>(B</font></div>
<td><font size=1 face="sans-serif">Re: mount:nfsmount failed: Bad file
descriptor</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>On Tuesday 28 August 2007 04:33, xiao.liang@cn.alps.com
wrote:<br>
> When use strace the log is look like this:<br>
><br>
> root# cat mount.log<br>
> execve("/bin/mount", ["mount", "-t",
"nfs", "192.168.1.6:/opt/Qtopia_2",<br>
> "/opt/Qtopia_2"], [/* 10 vars */]) = 0<br>
> uname({sys="Linux", node="imx21", ...}) = 0<br>
> brk(0)
= 0xabeec<br>
> old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1,<br>
> 0) = 0x40015000<br>
> open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT
(No such file or<br>
> directory)<br>
> open("/etc/ld.so.cache", O_RDONLY) =
-1 ENOENT (No such file or<br>
> directory)<br>
> open("/lib/v5EJl/fast-mult/half/libcrypt.so.1", O_RDONLY)
= -1 ENOENT (No<br>
> such file or directory)<br>
> stat64("/lib/v5EJl/fast-mult/half", 0xbffff2bc) = -1 ENOENT
(No such file<br>
> or directory)<br>
> open("/lib/v5EJl/fast-mult/libcrypt.so.1", O_RDONLY) = -1
ENOENT (No such<br>
> file or directory)<br>
...<br>
> sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,<br>
> 88, 0, {sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
> poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
> ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
> ioctl(3, 0x8913, 0xbfffced4) =
0<br>
> sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,<br>
> 88, 0, {sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
> poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
> ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
> ioctl(3, 0x8913, 0xbfffced4) =
0<br>
> write(2, "mount: RPC: Timed out\n", 22) = 22<br>
> close(3)
= 0<br>
> close(3)
= -1 EBADF (Bad file descriptor)<br>
> write(2, "mount: ", 7)
= 7<br>
> write(2, "nfsmount failed", 15)
= 15<br>
> write(2, ": Bad file descriptor\n", 22) = 22<br>
> write(2, "mount: ", 7)
= 7<br>
> write(2, "Mounting 192.168.1.6:/opt/Qtopia"..., 58) = 58<br>
> write(2, ": Bad file descriptor\n", 22) = 22<br>
> _exit(1)
= ?<br>
<br>
<br>
Thank you for this wonderfully linewrapped listing.<br>
It was a real joy fixing it up ;)<br>
<br>
Ok, Im serious again. Is this 1.6.1?<br>
if it is not, please try 1.6.1.<br>
If it is, please try adding "msock = -1" in mount.c:<br>
<br>
/* Connection refused */<br>
if (!daemonized && prevt == 0) /* print just once
*/<br>
error_msg_rpc(clnt_sperror(mclient,
" "));<br>
auth_destroy(mclient->cl_auth);<br>
clnt_destroy(mclient);<br>
mclient = 0;<br>
close(msock);<br>
+
msock = -1;<br>
<br>
and here:<br>
<br>
/* clean up */<br>
<br>
auth_destroy(mclient->cl_auth);<br>
clnt_destroy(mclient);<br>
close(msock);<br>
+ msock = -1;<br>
<br>
This may fix extra close() and prevent bogus error message about<br>
"Bad file descriptor". In reality you are seeing timeout:<br>
<br>
<br>
time(NULL)
= 197<br>
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3<br>
getpid()
= 60<br>
bind(3, {sa_family=AF_INET, sin_port=htons(660), <br>
sin_addr=inet_addr("0.0.0.0")}, 16) = 0<br>
connect(3, {sa_family=AF_INET, sin_port=htons(111), <br>
sin_addr=inet_addr("192.168.1.6")}, 16) = -1 ETIMEDOUT (Connection
timed out)<br>
close(3)
= 0<br>
brk(0)
= 0xad000<br>
brk(0xb1000)
= 0xb1000<br>
gettimeofday({386, 767720}, NULL) = 0<br>
<br>
See? Connection to portmapper failed after almost 200 seconds of trying.<br>
And then attempts to use default port and reach mount directly time out
too<br>
(poll() waits for 3 seconds and returns 0 -> no reply received):<br>
<br>
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3<br>
bind(3, {sa_family=AF_INET, sin_port=htons(661), <br>
sin_addr=inet_addr("0.0.0.0")}, 16) = 0<br>
ioctl(3, FIONBIO, [1])
= 0<br>
setsockopt(3, SOL_IP, IP_RECVERR, [1], 4) = 0<br>
uname({sys="Linux", node="imx21", ...}) = 0<br>
geteuid32()
= 0<br>
getegid32()
= 0<br>
getgroups32(0x20, 0xbffff0bc) = 0<br>
gettimeofday({386, 811220}, NULL) = 0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
sendto(3, "]\234\333\177\0\0\0\0\0\0\0\2\0\1\206\245\0\0\0\1\0\0\0"...,
88, 0, <br>
{sa_family=AF_INET, sin_port=htons(635), sin_addr=inet_addr8<br>
poll([{fd=3, events=POLLIN}], 1, 3000) = 0<br>
ioctl(3, 0x8912, 0xbfffcecc) =
0<br>
ioctl(3, 0x8913, 0xbfffced4) =
0<br>
write(2, "mount: RPC: Timed out\n", 22) = 22<br>
close(3)
= 0<br>
close(3)
= -1 EBADF (Bad file descriptor)<br>
write(2, "mount: ", 7)
= 7<br>
write(2, "nfsmount failed", 15) =
15<br>
write(2, ": Bad file descriptor\n", 22) = 22<br>
<br>
<br>
Apart from bogus close() screwing up error code, I dont see<br>
any problem on client side. It simply cannot reach the server.<br>
--<br>
vda<br>
</font></tt>
<br>