<br><font size=2 face="sans-serif">After I try busbox 1.6.1, the bad file
descriptor error disappear, but still got RPC timeout error. And the mount
service is still V1. I think it is due to the failed nfs mount use a very
early verion 1 of mount service. Anyone who knows how to update the mount
servce version?</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>