Index: sys/fs/devfs/devfs_vnops.c =================================================================== --- sys/fs/devfs/devfs_vnops.c (wersja 206664) +++ sys/fs/devfs/devfs_vnops.c (kopia robocza) @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -557,6 +558,24 @@ return (vop_stdfsync(ap)); } +static off_t +devfs_dev_size(struct vnode *vp) +{ + struct cdev *dev; + struct cdevsw *dsw; + off_t size; + + if (vp->v_type != VCHR) + return (0); + dev = vp->v_rdev; + dsw = dev->si_devsw; + if (!(dsw->d_flags & D_DISK)) + return (0); + if (dsw->d_ioctl(dev, DIOCGMEDIASIZE, (void *)&size, 0, curthread) != 0) + return (0); + return (size); +} + static int devfs_getattr(struct vop_getattr_args *ap) { @@ -581,7 +600,7 @@ else if (vp->v_type == VDIR) vap->va_size = vap->va_bytes = DEV_BSIZE; else - vap->va_size = 0; + vap->va_size = devfs_dev_size(vp); if (vp->v_type != VDIR) vap->va_bytes = 0; vap->va_blocksize = DEV_BSIZE;