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.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user