summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-07-02 16:29:47 +0000
committerphk <phk@FreeBSD.org>1999-07-02 16:29:47 +0000
commitb6d067fe706d7df16489c3e6138e2c68c483bd7c (patch)
tree6dd5d101ce37a738d8b0f531e7273f744862ab5d /sys/kern
parent60d229e604f6fdbe9921b44b59b82b2469286d78 (diff)
downloadFreeBSD-src-b6d067fe706d7df16489c3e6138e2c68c483bd7c.zip
FreeBSD-src-b6d067fe706d7df16489c3e6138e2c68c483bd7c.tar.gz
Make sure that stat(2) and friends always return a valid st_dev field.
Pseudo-FS need not fill in the va_fsid anymore, the syscall code will use the first half of the fsid, which now looks like a udev_t with major 255.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_export.c9
-rw-r--r--sys/kern/vfs_subr.c9
-rw-r--r--sys/kern/vfs_vnops.c7
3 files changed, 15 insertions, 10 deletions
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c
index 579d214..8357241 100644
--- a/sys/kern/vfs_export.c
+++ b/sys/kern/vfs_export.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
- * $Id: vfs_subr.c,v 1.203 1999/06/26 02:46:10 mckusick Exp $
+ * $Id: vfs_subr.c,v 1.204 1999/07/01 13:21:41 peter Exp $
*/
/*
@@ -333,16 +333,17 @@ vfs_getnewfsid(mp)
simple_lock(&mntid_slock);
mtype = mp->mnt_vfc->vfc_typenum;
- mp->mnt_stat.f_fsid.val[0] = (256 + mtype) * 256;
+ mp->mnt_stat.f_fsid.val[0] = umakedev(255, mtype);
mp->mnt_stat.f_fsid.val[1] = mtype;
if (xxxfs_mntid == 0)
++xxxfs_mntid;
- tfsid.val[0] = (256 + mtype) * 256 | xxxfs_mntid;
+ tfsid.val[0] = umakedev(255, mtype + (xxxfs_mntid << 16));
tfsid.val[1] = mtype;
if (mountlist.cqh_first != (void *)&mountlist) {
while (vfs_getvfs(&tfsid)) {
- tfsid.val[0]++;
xxxfs_mntid++;
+ tfsid.val[0] = umakedev(255,
+ mtype + (xxxfs_mntid << 16));
}
}
mp->mnt_stat.f_fsid.val[0] = tfsid.val[0];
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 579d214..8357241 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
- * $Id: vfs_subr.c,v 1.203 1999/06/26 02:46:10 mckusick Exp $
+ * $Id: vfs_subr.c,v 1.204 1999/07/01 13:21:41 peter Exp $
*/
/*
@@ -333,16 +333,17 @@ vfs_getnewfsid(mp)
simple_lock(&mntid_slock);
mtype = mp->mnt_vfc->vfc_typenum;
- mp->mnt_stat.f_fsid.val[0] = (256 + mtype) * 256;
+ mp->mnt_stat.f_fsid.val[0] = umakedev(255, mtype);
mp->mnt_stat.f_fsid.val[1] = mtype;
if (xxxfs_mntid == 0)
++xxxfs_mntid;
- tfsid.val[0] = (256 + mtype) * 256 | xxxfs_mntid;
+ tfsid.val[0] = umakedev(255, mtype + (xxxfs_mntid << 16));
tfsid.val[1] = mtype;
if (mountlist.cqh_first != (void *)&mountlist) {
while (vfs_getvfs(&tfsid)) {
- tfsid.val[0]++;
xxxfs_mntid++;
+ tfsid.val[0] = umakedev(255,
+ mtype + (xxxfs_mntid << 16));
}
}
mp->mnt_stat.f_fsid.val[0] = tfsid.val[0];
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 0300ba5..8a520d3 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94
- * $Id: vfs_vnops.c,v 1.67 1999/04/27 11:16:27 phk Exp $
+ * $Id: vfs_vnops.c,v 1.68 1999/04/28 11:37:12 phk Exp $
*/
#include <sys/param.h>
@@ -378,7 +378,10 @@ vn_stat(vp, sb, p)
/*
* Copy from vattr table
*/
- sb->st_dev = vap->va_fsid;
+ if (vap->va_fsid != VNOVAL)
+ sb->st_dev = vap->va_fsid;
+ else
+ sb->st_dev = vp->v_mount->mnt_stat.f_fsid.val[0];
sb->st_ino = vap->va_fileid;
mode = vap->va_mode;
switch (vap->va_type) {
OpenPOWER on IntegriCloud