+#endif
+ if (error = vflush(mp, fs->lfs_ivnode, flags))
+ return (error);
+ fs->lfs_clean = 1;
+ if (error = VFS_SYNC(mp, 1, p->p_ucred, p))
+ return (error);
+ if (fs->lfs_ivnode->v_dirtyblkhd.lh_first)
+ panic("lfs_unmount: still dirty blocks on ifile vnode\n");
+ vrele(fs->lfs_ivnode);
+ vgone(fs->lfs_ivnode);
+
+ ronly = !fs->lfs_ronly;
+ * Get file system statistics.
+ */
+lfs_statfs(mp, sbp, p)
+ struct mount *mp;
+ register struct statfs *sbp;
+ struct proc *p;
+{
+ register struct lfs *fs;
+ register struct ufsmount *ump;
+
+ ump = VFSTOUFS(mp);
+ fs = ump->um_lfs;
+ if (fs->lfs_magic != LFS_MAGIC)
+ panic("lfs_statfs: magic");
+ sbp->f_type = MOUNT_LFS;
+ sbp->f_bsize = fs->lfs_bsize;
+ sbp->f_iosize = fs->lfs_bsize;
+ sbp->f_blocks = dbtofsb(fs,fs->lfs_dsize);
+ sbp->f_bfree = dbtofsb(fs, fs->lfs_bfree);
+ sbp->f_bavail = (fs->lfs_dsize * (100 - fs->lfs_minfree) / 100) -
+ (fs->lfs_dsize - fs->lfs_bfree);
+ sbp->f_bavail = dbtofsb(fs, sbp->f_bavail);
+ sbp->f_files = fs->lfs_nfiles;
+ sbp->f_ffree = sbp->f_bfree * INOPB(fs);
+ if (sbp != &mp->mnt_stat) {
+ bcopy((caddr_t)mp->mnt_stat.f_mntonname,
+ (caddr_t)&sbp->f_mntonname[0], MNAMELEN);
+ bcopy((caddr_t)mp->mnt_stat.f_mntfromname,
+ (caddr_t)&sbp->f_mntfromname[0], MNAMELEN);