Current-Users archive

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

nfs umount error : Bad MNT RPC: RPC: Timed out



Hi,

I do have access, at work, to a new NFS filer (Isilon). Unfortunately
this new beast is in a different subnet ... and, on that subnet, most
UDP ports are filtered. Using TCP to mount exported filesystems works
just fine, but problems arise when trying to unmount them.

njoly@lanfeust [~]> sudo mount -t nfs -o ro,tcp 
filer.yyy.pasteur.fr:/exported/fs /mnt
njoly@lanfeust [~]> sudo umount /mnt
Bad MNT RPC: RPC: Timed out

Network trace show that UDP packets are sent to the filer (sunrpc port
is ok, but port 300 gets filtered) :

17:45:23.906523 IP (tos 0x0, ttl 64, id 7200, offset 0, flags [none], proto UDP 
(17), length 84)
    lanfeust.xxx.pasteur.fr.exp1 > filer.yyy.pasteur.fr.sunrpc: [udp sum ok] 
UDP, length 56
17:45:23.906908 IP (tos 0x0, ttl 63, id 38862, offset 0, flags [none], proto 
UDP (17), length 56)
    filer.yyy.pasteur.fr.sunrpc > lanfeust.xxx.pasteur.fr.exp1: [udp sum ok] 
UDP, length 28
17:45:23.906997 IP (tos 0x0, ttl 64, id 7201, offset 0, flags [none], proto UDP 
(17), length 192)
    lanfeust.xxx.pasteur.fr.1020 > filer.yyy.pasteur.fr.300: [udp sum ok] UDP, 
length 164
17:45:24.012627 IP (tos 0x0, ttl 64, id 7212, offset 0, flags [none], proto UDP 
(17), length 192)
    lanfeust.xxx.pasteur.fr.1020 > filer.yyy.pasteur.fr.300: [udp sum ok] UDP, 
length 164

Looking into umount(8) the code, show that lastest communication with
the server is unconditionnaly made over UDP (from sbin/umount/umount.c) :

#ifndef SMALL
        if (ai != NULL && !(fflag & MNT_FORCE)) {
                clp = clnt_create(hostp, RPCPROG_MNT, RPCMNT_VER1, "udp");
                if (clp  == NULL) {
                        clnt_pcreateerror("Cannot MNT PRC");
                        return 1;
                }
                clp->cl_auth = authsys_create_default();
                try.tv_sec = 20;
                try.tv_usec = 0;
                clnt_stat = clnt_call(clp, RPCMNT_UMOUNT, xdr_dir,
                    __UNCONST(name), xdr_void, NULL, try);
                if (clnt_stat != RPC_SUCCESS) {
                        clnt_perror(clp,"Bad MNT RPC");
                        return 1;
                }
                auth_destroy(clp->cl_auth);
                clnt_destroy(clp);
        }
#endif /* ! SMALL */

Hacking it to use "tcp" instead instead of "udp" makes the problem
vanish.

While i can ask network admins to open a few more UDP ports to make it
work ... I wonder if this should be adjusted to use the protocol which
was requested at mount ?

Thanks in advance,
Regards.

-- 
Nicolas Joly

Biology IT Center
Institut Pasteur, Paris.


Home | Main Index | Thread Index | Old Index