On Wed, Feb 21, 2024 at 09:20:55PM +0000, Taylor R Campbell wrote:
> > Date: Wed, 21 Feb 2024 10:52:55 +0000
> > From: Sad Clouds <cryintotheblue...@gmail.com>
> > 
> > Hello, for most operating systems determining the size of a block
> > device can be done with:
> > 
> > lseek(fd, 0, SEEK_END);
> > 
> > However, on NetBSD this does not seem to work.
> 
> Internally, this is happens for more or less the same reason that
> stat(2) doesn't return the size of a block device in st_size.
> 
> Each file system on which device nodes can reside implements its own
> VOP_GETATTR (used by both lseek(2) and stat(2)), and most of them use
> the _inode_ size (more or less) rather than querying the block device
> that the device node represents for its physical size.
> 
> I think this is a bug, and it would be great if stat(2) just returned
> the physical medium's size in st_size -- currently doing this reliably
> takes at least three different ioctls to handle all storage media, if
> I counted correctly in sbin/fsck/partutil.c's getdiskinfo.

I am not sure this can be done for all block devices.  Tapes have block
devices, and open-reel tape drives do not really know the length of the
loaded media, while on any other tape drive supporting compression, there
may really be no such size.

Reply via email to