diff options
author | avg <avg@FreeBSD.org> | 2010-04-03 08:39:00 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2010-04-03 08:39:00 +0000 |
commit | 91cd4478c28e9e9767d53821be2578fc94be748b (patch) | |
tree | 5affb807f39af665aabbffe326d318138b54f36c /sys/kern/vfs_vnops.c | |
parent | d488f0b5490dd5c0372abfb2ea9af844ccef5c83 (diff) | |
download | FreeBSD-src-91cd4478c28e9e9767d53821be2578fc94be748b.zip FreeBSD-src-91cd4478c28e9e9767d53821be2578fc94be748b.tar.gz |
vn_stat: take into account va_blocksize when setting st_blksize
As currently st_blksize is always PAGE_SIZE, it is playing safe to not
use any smaller value. For some cases this might not be optimal, but
at least nothing should get broken.
Generally I don't expect this commit to change much for the following
reasons (in case of VREG, VDIR):
- application I/O and physical I/O are sufficiently decoupled by
filesystem code, buffer cache code, cluster and read-ahead logic
- not all applications use st_blksize as a hint, some use f_iosize, some
use fixed block sizes
I expect writes to the middle of files on ZFS to benefit the most from
this change.
Silence from: fs@
MFC after: 2 weeks
Diffstat (limited to 'sys/kern/vfs_vnops.c')
-rw-r--r-- | sys/kern/vfs_vnops.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 74e6c02..838f8f7 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -792,11 +792,10 @@ vn_stat(vp, sb, active_cred, file_cred, td) * "a filesystem-specific preferred I/O block size for this * object. In some filesystem types, this may vary from file * to file" - * Default to PAGE_SIZE after much discussion. - * XXX: min(PAGE_SIZE, vp->v_bufobj.bo_bsize) may be more correct. + * Use miminum/default of PAGE_SIZE (e.g. for VCHR). */ - sb->st_blksize = PAGE_SIZE; + sb->st_blksize = max(PAGE_SIZE, vap->va_blocksize); sb->st_flags = vap->va_flags; if (priv_check(td, PRIV_VFS_GENERATION)) |