Kernel aligns the device size, but the offset where the device starts
is not required to be aligned.
# losetup --offset 32 -f file.img
is just fine, the final size of the look device will be (in sectors)
(backing_file_size - offset) >> 9
so we have to do the same in userspace when we check for successful
set capacity ioctl.
Signed-off-by: Karel Zak <kzak@redhat.com>
return -errno;
}
+ /* It's block device, so, align to 512-byte sectors */
+ if (expected_size % 512) {
+ DBG(lc, loopdev_debug("expected size misaligned to 512-byte sectors"));
+ expected_size = (expected_size >> 9) << 9;
+ }
+
if (expected_size != size) {
DBG(lc, loopdev_debug("warning: loopdev and expected "
"size dismatch (%ju/%ju)",
/* errors */
errpre = hasdev && loopcxt_get_fd(&lc) < 0 ?
loopcxt_get_device(&lc) : file;
- if (errno == ERANGE && offset && offset % 512)
- warnx(_("%s: failed to set up loop device, "
- "offset is not 512-byte aligned."), errpre);
- else
- warn(_("%s: failed to set up loop device"), errpre);
+ warn(_("%s: failed to set up loop device"), errpre);
break;
} while (hasdev == 0);