diff options
author | phk <phk@FreeBSD.org> | 2004-07-04 12:49:04 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-07-04 12:49:04 +0000 |
commit | b52c81e5db821f2344b775a5b98a58a7797433e4 (patch) | |
tree | 37c141e542fbd93164808e2b65eca4e5158bb9fd /sys | |
parent | 3aceb5c9da1dc52d43369ca35c656c2ce8a2c6a1 (diff) | |
download | FreeBSD-src-b52c81e5db821f2344b775a5b98a58a7797433e4.zip FreeBSD-src-b52c81e5db821f2344b775a5b98a58a7797433e4.tar.gz |
Blocksize for I/O should be a property of the vnode and not found by groping
around in the vnodes surroundings when we allocate a block.
Assign a blocksize when we create a vnode, and yell a warning (and ignore it)
if we got the wrong size.
Please email all such warnings to me.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/vfs_bio.c | 5 | ||||
-rw-r--r-- | sys/kern/vfs_subr.c | 1 | ||||
-rw-r--r-- | sys/sys/vnode.h | 1 |
3 files changed, 7 insertions, 0 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 9b44e9b..b6c1caa 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -2570,6 +2570,11 @@ loop: 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 daef020..a1cfdaa 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 3fc66c4e..723e1b0 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 |