- if ((size64 >> 10) > (~0UL >> 1))
- /*
- * If you really need NBDs larger than 2TB on 32-bit
- * machines you can use blocksizes larger than 1kB
- * - FIXME
- */
- err("Device too large.\n");
- else {
- int er;
-
- if (ioctl(nbd, NBD_SET_BLKSIZE, 1UL << 10) < 0)
- err("Ioctl/1.1a failed: %m\n");
- size = (unsigned long)(size64 >> 10);
- if ((er = ioctl(nbd, NBD_SET_SIZE_BLOCKS, size)) < 0)
- err("Ioctl/1.1b failed: %m\n");
- }
+ if (size64/blocksize > (~0UL >> 1))
+ err("Device too large.\n");
+ else {
+ int er;
+ if (ioctl(nbd, NBD_SET_BLKSIZE, (unsigned long)blocksize) < 0)
+ err("Ioctl/1.1a failed: %m\n");
+ size = (unsigned long)(size64/blocksize);
+ if ((er = ioctl(nbd, NBD_SET_SIZE_BLOCKS, size)) < 0)
+ err("Ioctl/1.1b failed: %m\n");
+fprintf(stderr, "bs=%d, sz=%lu\n", blocksize, size);
+ }