[dm-devel] lvm not updating reported device size until fs is unmounted (linux kernel 2.6.0-test3)

Joe Thornber thornber at sistina.com
Thu Aug 21 03:06:02 UTC 2003


Tupshin,

Thanks for finding this, at first glance it looks to me like a problem
with the block layer rather than dm.  I'll look into it today and try
and find a fix.

- Joe



On Wed, Aug 20, 2003 at 06:20:28PM -0700, Tupshin Harper wrote:
> Sorry for the cross-post...wasn't sure where to put this one. Feel free 
> to respond on whichever group is more appropriate...
> 
> I am experiencing a problem where xfs_growfs would fail to do anything 
> unless the fs has been unmounted and remounted before the growfs 
> command. This problem (with help from the xfs guys) has been tracked 
> down to the device mapper not updating it's reported size until the 
> umount takes place.
> 
> The code below tests this (aside: it would be nice to have this reported 
> in proc), and this example illustrates the problem(lvm_size is what I 
> compiled the below code as):
> # ./lvm_size /dev/lvm_group_2/debmir
> size = 11811160064 bytes, sector size = 512 bytes
> 
> # lvextend -L +100M /dev/lvm_group_2/debmir
> Extending logical volume debmir to 11.10 GB
> Logical volume debmir successfully resized
> 
> # ./lvm_size /dev/lvm_group_2/debmir
> size = 11811160064 bytes, sector size = 512 bytes
> 
> # umount /data/debmir
> # ./lvm_size /dev/lvm_group_2/debmir
> size = 11916017664 bytes, sector size = 512 bytes
> 
> -Thanks
> -Tupshin
> 
> #include <stdio.h>
> #include <fcntl.h>
> #include <sys/ioctl.h>
> 
> #define BLKGETSIZE64   _IOR(0x12,114,sizeof(unsigned long long))
> #define BLKSSZGET      _IO(0x12,104)
> 
> int main(int argc, char **argv)
> {
> 	unsigned long long size;
> 	int ssize, fd, error;
> 
> 	if (argc < 2) {
> 		fprintf(stderr, "insufficent arguments\n");
> 		exit(1);
> 	}
> 	if ((fd = open(argv[1], O_RDONLY)) < 0) {
> 		perror(argv[1]);
> 		exit(1);
> 	}
> 	if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
> 		perror("BLKGETSIZE64");
> 		exit(1);
> 	}
> 	if (ioctl(fd, BLKSSZGET, &ssize) < 0) {
> 		perror("BLKSSZGET");
> 		exit(1);
> 	}
> 	close(fd);
> 
> 	printf("size = %lld bytes, sector size = %d bytes\n", size, ssize);
> }
> 
> 
> 
> 
> _______________________________________________
> dm-devel mailing list
> dm-devel at sistina.com
> http://lists.sistina.com/mailman/listinfo/dm-devel




More information about the dm-devel mailing list