Index: kern/vfs_bio.c =================================================================== --- kern/vfs_bio.c (revision 226982) +++ kern/vfs_bio.c (working copy) @@ -2781,7 +2781,7 @@ return NULL; bsize = vn_isdisk(vp, NULL) ? DEV_BSIZE : bo->bo_bsize; offset = blkno * bsize; - vmio = vp->v_object != NULL; + vmio = vp->v_object != NULL && (flags & GB_NOVMIO) == 0; maxsize = vmio ? size + (offset & PAGE_MASK) : size; maxsize = imax(maxsize, bsize); Index: sys/buf.h =================================================================== --- sys/buf.h (revision 226982) +++ sys/buf.h (working copy) @@ -451,6 +451,7 @@ #define GB_LOCK_NOWAIT 0x0001 /* Fail if we block on a buf lock. */ #define GB_NOCREAT 0x0002 /* Don't create a buf if not found. */ #define GB_NOWAIT_BD 0x0004 /* Do not wait for bufdaemon */ +#define GB_NOVMIO 0x0008 /* Don't use VMIO. */ #ifdef _KERNEL extern int nbuf; /* The number of buffer headers */ Index: ufs/ufs/ufs_bmap.c =================================================================== --- ufs/ufs/ufs_bmap.c (revision 226982) +++ ufs/ufs/ufs_bmap.c (working copy) @@ -213,7 +213,8 @@ bqrelse(bp); ap->in_exists = 1; - bp = getblk(vp, metalbn, mp->mnt_stat.f_iosize, 0, 0, 0); + bp = getblk(vp, metalbn, mp->mnt_stat.f_iosize, 0, 0, + GB_NOVMIO); if ((bp->b_flags & B_CACHE) == 0) { #ifdef INVARIANTS if (!daddr) Index: ufs/ffs/ffs_softdep.c =================================================================== --- ufs/ffs/ffs_softdep.c (revision 226982) +++ ufs/ffs/ffs_softdep.c (working copy) @@ -5819,7 +5819,7 @@ if (blkno == 0) return (0); mp = freeblks->fb_list.wk_mp; - bp = getblk(ITOV(ip), lbn, mp->mnt_stat.f_iosize, 0, 0, 0); + bp = getblk(ITOV(ip), lbn, mp->mnt_stat.f_iosize, 0, 0, GB_NOVMIO); if ((bp->b_flags & B_CACHE) == 0) { bp->b_blkno = blkptrtodb(VFSTOUFS(mp), blkno); bp->b_iocmd = BIO_READ; Index: ufs/ffs/ffs_balloc.c =================================================================== --- ufs/ffs/ffs_balloc.c (revision 226982) +++ ufs/ffs/ffs_balloc.c (working copy) @@ -254,7 +254,8 @@ nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[1].in_lbn; - bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0); + bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, + GB_NOVMIO); bp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(bp); if (DOINGSOFTDEP(vp)) { @@ -318,7 +319,8 @@ nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[i].in_lbn; - nbp = getblk(vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, + GB_NOVMIO); nbp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(nbp); if (DOINGSOFTDEP(vp)) { @@ -792,7 +794,8 @@ nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[1].in_lbn; - bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0); + bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, + GB_NOVMIO); bp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(bp); if (DOINGSOFTDEP(vp)) { @@ -856,7 +859,8 @@ nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[i].in_lbn; - nbp = getblk(vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, + GB_NOVMIO); nbp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(nbp); if (DOINGSOFTDEP(vp)) {