Subject: stat(2), st_size on devices
To: None <tech-kern@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: tech-kern
Date: 02/17/2005 00:08:52
--jI8keyz6grp/JLjh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,
with the attached test program, I stat some disk device. Sometimes I
get the real size of the parition, sometimes I get 0:
rochebonne# disklabel wd2
[...]
8 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 d: 156301488         0     unused      0     0        # (Cyl.      0 - 155060)
 e:  59999184         0     4.4LFS      0     0     0  # (Cyl.      0 -  59522)
 f:  59999184  59999184     4.2BSD   2048 16384 28808  # (Cyl.  59523 - 119045)
 g:  36303120 119998368     4.2BSD      0     0     0  # (Cyl. 119046 - 155060)
rochebonne# /tmp/tstat /dev/rwd2d
dev 0x0 rdev 0x313 size 80026361856 blocks 65536
rochebonne# /tmp/tstat /dev/rwd2e
dev 0x0 rdev 0x314 size 30719582208 blocks 65536
rochebonne# /tmp/tstat /dev/rwd2f
dev 0x0 rdev 0x315 size 0 blocks 65536
rochebonne# /tmp/tstat /dev/rwd2g
dev 0x0 rdev 0x316 size 0 blocks 65536
rochebonne# /tmp/tstat /dev/wd2g
dev 0x0 rdev 0x16 size 0 blocks 2048
rochebonne# /tmp/tstat /dev/wd2f
dev 0x0 rdev 0x15 size 30719582208 blocks 2048
rochebonne# /tmp/tstat /dev/wd2e
dev 0x0 rdev 0x14 size 30719582208 blocks 2048
rochebonne# /tmp/tstat /dev/wd2d
dev 0x0 rdev 0x13 size 0 blocks 2048

Any reason for such a behavior ?

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--

--jI8keyz6grp/JLjh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="main.c"

#include <sys/stat.h>

main(int argc, char **argv)
{
	struct stat sb;

	if (stat(argv[1], &sb) < 0) {
		perror("stat");
		exit(1);
	}
	printf("dev 0x%x rdev 0x%x size %lld blocks %d\n",
	    (int)sb.st_dev, (int)sb.st_rdev, (long long)sb.st_size,
	    (int)sb.st_blksize);
}

--jI8keyz6grp/JLjh--