dissect: use new blockdev_partscan_enabled() API where appropriate

This commit is contained in:
Lennart Poettering 2020-08-06 10:35:29 +02:00
parent e8467cd31c
commit 834c15ec38
1 changed files with 10 additions and 14 deletions

View File

@ -215,22 +215,18 @@ static int wait_for_partitions_to_appear(
break;
r = -errno;
if (r == -EINVAL) {
struct loop_info64 info;
/* If we are running on a block device that has partition scanning off, return an
* explicit recognizable error about this, so that callers can generate a proper
* message explaining the situation. */
/* If we are running on a loop device that has partition scanning off, return
* an explicit recognizable error about this, so that callers can generate a
* proper message explaining the situation. */
r = blockdev_partscan_enabled(fd);
if (r < 0)
return r;
if (r == 0)
return log_debug_errno(EPROTONOSUPPORT,
"Device is a loop device and partition scanning is off!");
if (ioctl(fd, LOOP_GET_STATUS64, &info) >= 0) {
#if HAVE_VALGRIND_MEMCHECK_H
/* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
#endif
if ((info.lo_flags & LO_FLAGS_PARTSCAN) == 0)
return log_debug_errno(EPROTONOSUPPORT,
"Device is a loop device and partition scanning is off!");
}
return -EINVAL; /* original error */
}
if (r != -EBUSY)
return r;