patch from Ukai Fumitoshi <ukai@kmc.kyoto-u.ac.jp>

to do the right thing with NFS fsid's and getnewfsid()
This commit is contained in:
cgd 1993-11-19 02:31:23 +00:00
parent 2dc7cf301c
commit 5838270f1e
2 changed files with 4 additions and 31 deletions

View File

@ -1 +1 @@
revision 1.8 intentionally removed
revision 1.9 intentionally removed

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)nfs_vfsops.c 7.31 (Berkeley) 5/6/91
* $Id: nfs_vfsops.c,v 1.4 1993/07/13 10:04:29 cgd Exp $
* $Id: nfs_vfsops.c,v 1.5 1993/11/19 02:32:34 cgd Exp $
*/
#include "param.h"
@ -336,35 +336,8 @@ mountnfs(argp, mp, nam, pth, hst, vpp)
MALLOC(nmp, struct nfsmount *, sizeof *nmp, M_NFSMNT, M_WAITOK);
bzero((caddr_t)nmp, sizeof *nmp);
mp->mnt_data = (qaddr_t)nmp;
/*
* Generate a unique nfs mount id. The problem is that a dev number
* is not unique across multiple systems. The techique is as follows:
* 1) Set to nblkdev,0 which will never be used otherwise
* 2) Generate a first guess as nblkdev,nfs_mntid where nfs_mntid is
* NOT 0
* 3) Loop searching the mount list for another one with same id
* If a match, increment val[0] and try again
* NB: I increment val[0] { a long } instead of nfs_mntid { a u_char }
* so that nfs is not limited to 255 mount points
* Incrementing the high order bits does no real harm, since it
* simply makes the major dev number tick up. The upper bound is
* set to major dev 127 to avoid any sign extention problems
*/
mp->mnt_stat.f_fsid.val[0] = makedev(nblkdev, 0);
mp->mnt_stat.f_fsid.val[1] = MOUNT_NFS;
if (++nfs_mntid == 0)
++nfs_mntid;
tfsid.val[0] = makedev(nblkdev, nfs_mntid);
tfsid.val[1] = MOUNT_NFS;
while (rootfs && getvfs(&tfsid)) {
tfsid.val[0]++;
nfs_mntid++;
}
if (major(tfsid.val[0]) > 127) {
error = ENOENT;
goto bad;
}
mp->mnt_stat.f_fsid.val[0] = tfsid.val[0];
getnewfsid(mp, MOUNT_NFS);
nmp->nm_mountp = mp;
nmp->nm_flag = argp->flags;
nmp->nm_rto = NFS_TIMEO;