diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 9b44e9b5499e..b6c1caa90bd5 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -2570,6 +2570,11 @@ getblk(struct vnode * vp, daddr_t blkno, int size, int slpflag, int slptimeo, else bsize = size; + if (vp->v_bsize != bsize) { + printf("WARNING: Wrong block size on vnode: %d should be %d\n", vp->v_bsize, bsize); + vprint("Please email phk@FreeBSD.org this info\n", vp); + } + offset = blkno * bsize; vmio = (VOP_GETVOBJECT(vp, NULL) == 0) && (vp->v_vflag & VV_OBJBUF); diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index daef020f72e8..a1cfdaa3d2a7 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -841,6 +841,7 @@ getnewvnode(tag, mp, vops, vpp) delmntque(vp); if (mp != NULL) insmntque(vp, mp); + vp->v_bsize = mp->mnt_stat.f_iosize; return (0); } diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 3fc66c4ee913..723e1b0e9847 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -155,6 +155,7 @@ struct vnode { #endif dev_t v_cachedfs; /* cached fs id */ ino_t v_cachedid; /* cached file id */ + int v_bsize; /* block size for I/O */ }; #define v_mountedhere v_un.vu_mountedhere #define v_socket v_un.vu_socket