[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