--- union_vnops.c.orig Mon Jul 12 01:14:07 2004 +++ union_vnops.c Thu Dec 9 12:52:34 2004 @@ -255,7 +255,7 @@ dvp = tdvp; while ( - dvp != udvp && + dvp != udvp && (dvp->v_type == VDIR) && (mp = dvp->v_mountedhere) ) { @@ -356,7 +356,7 @@ /* * Do the lookup. We must supply a locked and referenced * upperdvp to the function and will get a new locked and - * referenced upperdvp back, with the old having been + * referenced upperdvp back, with the old having been * dereferenced. * * If an error is returned, uppervp will be NULLVP. If no @@ -932,6 +932,7 @@ { int error; struct union_node *un = VTOUNION(ap->a_vp); + struct union_mount *um = MOUNTTOUNIONMOUNT(ap->a_vp->v_mount); struct vnode *vp; struct vattr *vap; struct vattr va; @@ -971,6 +972,8 @@ /* XXX isn't this dangerous without a lock? */ union_newsize(ap->a_vp, VNOVAL, vap->va_size); } + + vap->va_fsid = ap->a_vp->v_mount->mnt_stat.f_fsid.val[0]; if ((vap != ap->a_vap) && (vap->va_type == VDIR)) ap->a_vap->va_nlink += vap->va_nlink;