mirror of
https://github.com/systemd/systemd.git
synced 2025-02-01 09:47:35 +03:00
blockdev-util: add partscan check function that takes an sd_device*
This commit is contained in:
parent
68debef4c1
commit
bff5d2fd5a
@ -5903,7 +5903,7 @@ static int context_write_partition_table(Context *context) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to write partition table: %m");
|
||||
|
||||
capable = blockdev_partscan_enabled(fdisk_get_devfd(context->fdisk_context));
|
||||
capable = blockdev_partscan_enabled_fd(fdisk_get_devfd(context->fdisk_context));
|
||||
if (capable == -ENOTBLK)
|
||||
log_debug("Not telling kernel to reread partition table, since we are not operating on a block device.");
|
||||
else if (capable < 0)
|
||||
|
@ -356,8 +356,7 @@ int lock_whole_block_device(dev_t devt, int operation) {
|
||||
return TAKE_FD(lock_fd);
|
||||
}
|
||||
|
||||
int blockdev_partscan_enabled(int fd) {
|
||||
_cleanup_(sd_device_unrefp) sd_device *dev = NULL;
|
||||
int blockdev_partscan_enabled(sd_device *dev) {
|
||||
unsigned capability;
|
||||
int r, ext_range;
|
||||
|
||||
@ -408,11 +407,7 @@ int blockdev_partscan_enabled(int fd) {
|
||||
* 4) check 'ext_range' sysfs attribute, and if '1' we can conclude partition scanning is disabled,
|
||||
* 5) otherwise check 'capability' sysfs attribute for ancient version. */
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
r = block_device_new_from_fd(fd, 0, &dev);
|
||||
if (r < 0)
|
||||
return r;
|
||||
assert(dev);
|
||||
|
||||
/* For v6.10 or newer. */
|
||||
r = device_get_sysattr_bool(dev, "partscan");
|
||||
@ -458,6 +453,19 @@ int blockdev_partscan_enabled(int fd) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int blockdev_partscan_enabled_fd(int fd) {
|
||||
_cleanup_(sd_device_unrefp) sd_device *dev = NULL;
|
||||
int r;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
r = block_device_new_from_fd(fd, 0, &dev);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return blockdev_partscan_enabled(dev);
|
||||
}
|
||||
|
||||
static int blockdev_is_encrypted(const char *sysfs_path, unsigned depth_left) {
|
||||
_cleanup_free_ char *p = NULL, *uuids = NULL;
|
||||
_cleanup_closedir_ DIR *d = NULL;
|
||||
|
@ -40,7 +40,8 @@ int get_block_device_harder(const char *path, dev_t *dev);
|
||||
|
||||
int lock_whole_block_device(dev_t devt, int operation);
|
||||
|
||||
int blockdev_partscan_enabled(int fd);
|
||||
int blockdev_partscan_enabled(sd_device *d);
|
||||
int blockdev_partscan_enabled_fd(int fd);
|
||||
|
||||
int fd_is_encrypted(int fd);
|
||||
int path_is_encrypted(const char *path);
|
||||
|
@ -893,7 +893,7 @@ static int dissect_image(
|
||||
if (FLAGS_SET(flags, DISSECT_IMAGE_ADD_PARTITION_DEVICES)) {
|
||||
/* Safety check: refuse block devices that carry a partition table but for which the kernel doesn't
|
||||
* do partition scanning. */
|
||||
r = blockdev_partscan_enabled(fd);
|
||||
r = blockdev_partscan_enabled_fd(fd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
|
@ -149,7 +149,7 @@ static int loop_configure_verify(int fd, const struct loop_config *c) {
|
||||
* into the block device. Let's hence verify if things work correctly here
|
||||
* before returning. */
|
||||
|
||||
r = blockdev_partscan_enabled(fd);
|
||||
r = blockdev_partscan_enabled_fd(fd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0) {
|
||||
|
@ -65,7 +65,7 @@ TEST(partscan_enabled) {
|
||||
continue;
|
||||
}
|
||||
|
||||
r = blockdev_partscan_enabled(fd);
|
||||
r = blockdev_partscan_enabled_fd(fd);
|
||||
if (r < 0) {
|
||||
log_warning_errno(r, "Failed to determine if block device '%s' has partition scanning enabled, skipping: %m", name);
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user