diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c index 9b58c962d03..08e90f19e20 100644 --- a/sys/ufs/ffs/ffs_alloc.c +++ b/sys/ufs/ffs/ffs_alloc.c @@ -260,7 +260,11 @@ retry: ip->i_flag |= IN_CHANGE | IN_UPDATE; allocbuf(bp, nsize); bp->b_flags |= B_DONE; - bzero((char *)bp->b_data + osize, (u_int)nsize - osize); + if ((bp->b_flags & (B_MALLOC | B_VMIO)) != B_VMIO) + bzero((char *)bp->b_data + osize, + (u_int)nsize - osize); + else + vfs_bio_clrbuf(bp); *bpp = bp; return (0); } @@ -325,7 +329,11 @@ retry: ip->i_flag |= IN_CHANGE | IN_UPDATE; allocbuf(bp, nsize); bp->b_flags |= B_DONE; - bzero((char *)bp->b_data + osize, (u_int)nsize - osize); + if ((bp->b_flags & (B_MALLOC | B_VMIO)) != B_VMIO) + bzero((char *)bp->b_data + osize, + (u_int)nsize - osize); + else + vfs_bio_clrbuf(bp); *bpp = bp; return (0); }