diff options
author | Lennart Poettering <lennart@poettering.net> | 2023-01-17 18:50:59 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2023-01-18 10:47:17 +0100 |
commit | 22ee78a8987f29e7f837efab86ed090ab78c1170 (patch) | |
tree | c2de760025b5f30bc7b27ecd48bfa423d1e3960d /src/home | |
parent | 05c4c59ff127668ddaa85f0a9fd67cee3c41ce00 (diff) | |
download | systemd-22ee78a8987f29e7f837efab86ed090ab78c1170.tar.gz |
loop-util: always tell kernel explicitly about loopback sector size
Let's not leave the sector size unspecified: either set a user supplied
value, or auto-detect the right size by probing the disk image
accordingly.
Diffstat (limited to 'src/home')
-rw-r--r-- | src/home/homework-luks.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index 3433cf7d40..5ad7706636 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -1378,7 +1378,15 @@ int home_setup_luks( return r; } - r = loop_device_make(setup->image_fd, O_RDWR, offset, size, user_record_luks_sector_size(h), 0, LOCK_UN, &setup->loop); + r = loop_device_make( + setup->image_fd, + O_RDWR, + offset, + size, + h->luks_sector_size == UINT64_MAX ? UINT32_MAX : user_record_luks_sector_size(h), /* if sector size is not specified, select UINT32_MAX, i.e. auto-probe */ + /* loop_flags= */ 0, + LOCK_UN, + &setup->loop); if (r == -ENOENT) { log_error_errno(r, "Loopback block device support is not available on this system."); return -ENOLINK; /* make recognizable */ @@ -2319,7 +2327,15 @@ int home_create_luks( log_info("Writing of partition table completed."); - r = loop_device_make(setup->image_fd, O_RDWR, partition_offset, partition_size, user_record_luks_sector_size(h), 0, LOCK_EX, &setup->loop); + r = loop_device_make( + setup->image_fd, + O_RDWR, + partition_offset, + partition_size, + user_record_luks_sector_size(h), + 0, + LOCK_EX, + &setup->loop); if (r < 0) { if (r == -ENOENT) { /* this means /dev/loop-control doesn't exist, i.e. we are in a container * or similar and loopback bock devices are not available, return a |