From: Lennart Poettering Date: Tue, 17 Jan 2023 19:12:30 +0000 (+0100) Subject: blockdev-util: add simple wrapper around BLKSSZGET X-Git-Tag: v253-rc1~81^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=65046b92dcdc017f34e170a0e0f46ffc80b1dcdc;p=thirdparty%2Fsystemd.git blockdev-util: add simple wrapper around BLKSSZGET Just adds some typesafety and generates an error if the field is not initialized in the block device yet. --- diff --git a/src/shared/blockdev-util.c b/src/shared/blockdev-util.c index 7a4d21d02e2..ee134146a15 100644 --- a/src/shared/blockdev-util.c +++ b/src/shared/blockdev-util.c @@ -762,3 +762,18 @@ int blockdev_reread_partition_table(sd_device *dev) { return 0; } + +int blockdev_get_sector_size(int fd, uint32_t *ret) { + int ssz = 0; + + assert(fd >= 0); + assert(ret); + + if (ioctl(fd, BLKSSZGET, &ssz) < 0) + return -errno; + if (ssz <= 0) /* make sure the field is initialized */ + return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Block device reported invalid sector size %i.", ssz); + + *ret = ssz; + return 0; +} diff --git a/src/shared/blockdev-util.h b/src/shared/blockdev-util.h index b2c14102ae1..5b27d23e8ae 100644 --- a/src/shared/blockdev-util.h +++ b/src/shared/blockdev-util.h @@ -54,3 +54,5 @@ int partition_enumerator_new(sd_device *dev, sd_device_enumerator **ret); int block_device_remove_all_partitions(sd_device *dev, int fd); int block_device_has_partitions(sd_device *dev); int blockdev_reread_partition_table(sd_device *dev); + +int blockdev_get_sector_size(int fd, uint32_t *ret); diff --git a/src/shared/loop-util.c b/src/shared/loop-util.c index 3224286186c..4b63e0340b9 100644 --- a/src/shared/loop-util.c +++ b/src/shared/loop-util.c @@ -125,14 +125,14 @@ static int loop_configure_verify(int fd, const struct loop_config *c) { assert(c); if (c->block_size != 0) { - int z; + uint32_t ssz; - if (ioctl(fd, BLKSSZGET, &z) < 0) - return -errno; + r = blockdev_get_sector_size(fd, &ssz); + if (r < 0) + return r; - assert(z >= 0); - if ((uint32_t) z != c->block_size) - log_debug("LOOP_CONFIGURE didn't honour requested block size %u, got %i instead. Ignoring.", c->block_size, z); + if (ssz != c->block_size) + log_debug("LOOP_CONFIGURE didn't honour requested block size %" PRIu32 ", got %" PRIu32 " instead. Ignoring.", c->block_size, ssz); } if (c->info.lo_sizelimit != 0) {