Auto sync2gitlab import of udisks2-2.9.0-9.el8.src.rpm

This commit is contained in:
James Antill 2022-05-26 15:43:29 -04:00
parent faa3bc5fb6
commit 35aa3f3251
23 changed files with 2142 additions and 1 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/udisks-2.9.0.tar.bz2

1
EMPTY
View File

@ -1 +0,0 @@

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (udisks-2.9.0.tar.bz2) = 314355c9b0cc562b2359ea77137b3f2189c48e642c67cc9d9ed07048176967b67e78dfb3190dd160db2f92e8143a4f005bf2cc1aa814388a79201705e5297d0c

11
tests-disable-zram.patch Normal file
View File

@ -0,0 +1,11 @@
diff -up udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py.bak udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py
--- udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py.bak 2020-05-26 14:59:20.000000000 +0200
+++ udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py 2021-04-23 15:49:07.405824214 +0200
@@ -26,6 +26,7 @@ class UdisksBaseTest(udiskstestcase.Udis
elif distro in ('enterprise_linux', 'centos') and int(version) > 7:
modules.pop('bcache')
modules.pop('btrfs')
+ modules.pop('zram')
# assuming the kvdo module is typically pulled in as a vdo tool dependency
if not find_executable("vdo"):
modules.pop('vdo')

View File

@ -0,0 +1,64 @@
From c21ad308b1313a35cafa1664e5eb4772925bc005 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Thu, 22 Apr 2021 18:05:29 +0200
Subject: [PATCH 1/2] tests: Mark Drive.ATA tests as unstable
Some of the tests operate on physical ATA drives, comparing values between
smartctl output and udisks. Different libraries used, different approach
to retrieve some ATA features and values. Turned out this is not working
correctly on some SATA disks with each approach giving slightly different
results, presumably for the quirks in place.
---
src/tests/dbus-tests/test_drive_ata.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/tests/dbus-tests/test_drive_ata.py b/src/tests/dbus-tests/test_drive_ata.py
index 3187367e..e91bd02f 100644
--- a/src/tests/dbus-tests/test_drive_ata.py
+++ b/src/tests/dbus-tests/test_drive_ata.py
@@ -4,7 +4,7 @@ import re
import unittest
import time
-from udiskstestcase import UdisksTestCase
+import udiskstestcase
SMART_CMDLINE_FAIL = 1 << 0
SMART_OPEN_READ_FAIL = 1 << 1
@@ -32,7 +32,7 @@ def _get_sata_disks():
for disk in _get_sata_disks():
- ret, out = UdisksTestCase.run_command("smartctl -a /dev/%s" % disk)
+ ret, out = udiskstestcase.UdisksTestCase.run_command("smartctl -a /dev/%s" % disk)
# Only the following bits in the exit status mean the device failed to
# provide valid SMART data, others may be set for different reasons (see
@@ -46,7 +46,7 @@ for disk in _get_sata_disks():
else:
smart_unsupported.add(disk)
-class UdisksDriveAtaTest(UdisksTestCase):
+class UdisksDriveAtaTest(udiskstestcase.UdisksTestCase):
'''Noninvasive tests for the Drive.Ata interface'''
def get_smart_setting(self, disk, attr, out_prefix):
@@ -102,6 +102,7 @@ class UdisksDriveAtaTest(UdisksTestCase)
intro_data = drive_intro.Introspect()
self.assertNotIn('interface name="org.freedesktop.UDisks2.Drive.Ata"', intro_data)
+ @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
@unittest.skipUnless(smart_supported, "No disks supporting S.M.A.R.T. available")
def test_properties(self):
for disk in smart_supported:
@@ -148,6 +149,7 @@ class UdisksDriveAtaTest(UdisksTestCase)
# nineth field is the raw value
self.assertEqual(int(pwon_s.value / 3600), int(pwon_attr[8]))
+ @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
@unittest.skipUnless(smart_supported, "No disks supporting S.M.A.R.T. available")
def test_smart_get_attributes(self):
for disk in smart_supported:
--
2.30.2

View File

@ -0,0 +1,43 @@
From 1358d1e5208d71d5a70f17a242eda00f079a9d0b Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Thu, 22 Apr 2021 18:20:48 +0200
Subject: [PATCH 2/2] tests: Handle missing /dev/disk/by-path gracefully
Limited testing environments may not have this path always available.
---
src/tests/dbus-tests/test_drive_ata.py | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/tests/dbus-tests/test_drive_ata.py b/src/tests/dbus-tests/test_drive_ata.py
index e91bd02f..37740c60 100644
--- a/src/tests/dbus-tests/test_drive_ata.py
+++ b/src/tests/dbus-tests/test_drive_ata.py
@@ -20,14 +20,17 @@ DISK_PATH = "/dev/disk/by-path/"
def _get_sata_disks():
sata_disks = []
- by_path = os.listdir(DISK_PATH)
- for dev in by_path:
- if "ata" in dev and "part" not in dev:
- path = os.path.realpath(os.path.join(DISK_PATH, dev))
- name = os.path.basename(path)
- if name.startswith("sd"):
- # ignore devices like CD drives etc.
- sata_disks.append(name)
+ try:
+ by_path = os.listdir(DISK_PATH)
+ for dev in by_path:
+ if "ata" in dev and "part" not in dev:
+ path = os.path.realpath(os.path.join(DISK_PATH, dev))
+ name = os.path.basename(path)
+ if name.startswith("sd"):
+ # ignore devices like CD drives etc.
+ sata_disks.append(name)
+ except:
+ pass
return sata_disks
--
2.30.2

View File

@ -0,0 +1,30 @@
From 486778c778a4ddb24395408c6b267e702e19ae02 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Sat, 1 Jan 2022 22:01:49 +0100
Subject: [PATCH] udiskslinuxencrypted: Fix GError ownership
---
src/udiskslinuxencrypted.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/udiskslinuxencrypted.c b/src/udiskslinuxencrypted.c
index c3a0821ac..3bc54e695 100644
--- a/src/udiskslinuxencrypted.c
+++ b/src/udiskslinuxencrypted.c
@@ -1040,7 +1040,7 @@ handle_resize (UDisksEncrypted *encrypted,
object = udisks_daemon_util_dup_object (encrypted, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -1066,7 +1066,6 @@ handle_resize (UDisksEncrypted *encrypted,
if (!udisks_daemon_util_get_caller_uid_sync (daemon, invocation, NULL /* GCancellable */, &caller_uid, &error))
{
g_dbus_method_invocation_return_gerror (invocation, error);
- g_clear_error (&error);
goto out;
}

View File

@ -0,0 +1,49 @@
From 223256777f6e269b8501d95a64c4c6095a7a8a3e Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Sat, 1 Jan 2022 22:02:17 +0100
Subject: [PATCH] udiskslinuxfilesystem: Fix GError ownership
---
src/udiskslinuxfilesystem.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
index f7c99757a..a8390a044 100644
--- a/src/udiskslinuxfilesystem.c
+++ b/src/udiskslinuxfilesystem.c
@@ -1739,7 +1739,7 @@ handle_resize (UDisksFilesystem *filesystem,
object = udisks_daemon_util_dup_object (filesystem, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -1921,7 +1921,7 @@ handle_repair (UDisksFilesystem *filesystem,
object = udisks_daemon_util_dup_object (filesystem, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -2089,7 +2089,7 @@ handle_check (UDisksFilesystem *filesystem,
object = udisks_daemon_util_dup_object (filesystem, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -2257,7 +2257,7 @@ handle_take_ownership (UDisksFilesystem *filesystem,
object = udisks_daemon_util_dup_object (filesystem, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}

View File

@ -0,0 +1,70 @@
From 7c9933c0f80faaabbed607983fdf77f8c4562df6 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Sat, 1 Jan 2022 20:11:57 +0100
Subject: [PATCH] udiskslinuxpartition: Fix GError ownership
---
src/udiskslinuxpartition.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/src/udiskslinuxpartition.c b/src/udiskslinuxpartition.c
index 5461b3903..3d970768d 100644
--- a/src/udiskslinuxpartition.c
+++ b/src/udiskslinuxpartition.c
@@ -135,8 +135,7 @@ check_authorization (UDisksPartition *partition,
caller_uid,
&error))
{
- g_dbus_method_invocation_return_gerror (invocation, error);
- g_clear_error (&error);
+ g_dbus_method_invocation_take_error (invocation, error);
goto out;
}
@@ -351,7 +350,7 @@ handle_set_flags (UDisksPartition *partition,
object = udisks_daemon_util_dup_object (partition, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -499,7 +498,7 @@ handle_set_name (UDisksPartition *partition,
object = udisks_daemon_util_dup_object (partition, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -873,7 +872,7 @@ handle_resize (UDisksPartition *partition,
object = udisks_daemon_util_dup_object (partition, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -994,7 +993,7 @@ handle_delete (UDisksPartition *partition,
object = udisks_daemon_util_dup_object (partition, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -1012,9 +1011,7 @@ handle_delete (UDisksPartition *partition,
if (!udisks_linux_block_teardown (block, invocation, options, &error))
{
if (invocation != NULL)
- g_dbus_method_invocation_take_error (invocation, error);
- else
- g_clear_error (&error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
}

View File

@ -0,0 +1,73 @@
From f486a9fa22c2f9785a4a8fc58eb3be7b0cf934ce Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Sat, 1 Jan 2022 19:59:27 +0100
Subject: [PATCH] udiskslinuxpartitiontable: Fix GError ownership
---
src/udiskslinuxpartitiontable.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/src/udiskslinuxpartitiontable.c b/src/udiskslinuxpartitiontable.c
index b4c301095..14a54c9c7 100644
--- a/src/udiskslinuxpartitiontable.c
+++ b/src/udiskslinuxpartitiontable.c
@@ -277,7 +277,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
object = udisks_daemon_util_dup_object (table, &error);
if (object == NULL)
{
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
goto out;
}
@@ -293,7 +293,6 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
goto out;
}
- error = NULL;
if (!udisks_daemon_util_get_caller_uid_sync (daemon,
invocation,
NULL /* GCancellable */,
@@ -301,7 +300,6 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
&error))
{
g_dbus_method_invocation_return_gerror (invocation, error);
- g_clear_error (&error);
goto out;
}
@@ -464,7 +462,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
if (!bd_part_set_part_name (device_name, part_spec->path, name, &error))
{
g_prefix_error (&error, "Error setting name for newly created partition: ");
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), FALSE, error->message);
goto out;
}
@@ -483,7 +481,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
if (!ret)
{
g_prefix_error (&error, "Error setting type for newly created partition: ");
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), FALSE, error->message);
goto out;
}
@@ -520,7 +518,6 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
/* sit and wait for the partition to show up */
g_warn_if_fail (wait_data->pos_to_wait_for > 0);
wait_data->partition_table_object = object;
- error = NULL;
partition_object = udisks_daemon_wait_for_object_sync (daemon,
wait_for_partition,
wait_data,
@@ -530,7 +527,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
if (partition_object == NULL)
{
g_prefix_error (&error, "Error waiting for partition to appear: ");
- g_dbus_method_invocation_take_error (invocation, error);
+ g_dbus_method_invocation_return_gerror (invocation, error);
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), FALSE, error->message);
goto out;
}

View File

@ -0,0 +1,25 @@
From 0edd6f5579c964323d86897aff9476c20d7901ba Mon Sep 17 00:00:00 2001
From: Vojtech Trefny <vtrefny@redhat.com>
Date: Mon, 22 Nov 2021 14:23:08 +0100
Subject: [PATCH] tests: Do not check that writeAmplificationRatio is bigger
than 0
Apparently the bios_in_write value is now 0 for newly created VDO
pools and because we use it for the writeAmplificationRatio
calculation we get zero too.
---
src/tests/dbus-tests/test_20_LVM.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/tests/dbus-tests/test_20_LVM.py b/src/tests/dbus-tests/test_20_LVM.py
index 7fbff0434..fde7c3f3f 100644
--- a/src/tests/dbus-tests/test_20_LVM.py
+++ b/src/tests/dbus-tests/test_20_LVM.py
@@ -508,7 +508,6 @@ def test_create(self):
# get statistics and do some simple sanity check
stats = lv.GetStatistics(self.no_options, dbus_interface=self.iface_prefix + '.VDOVolume')
self.assertIn("writeAmplificationRatio", stats.keys())
- self.assertGreater(float(stats["writeAmplificationRatio"]), 0)
def test_enable_disable_compression_deduplication(self):
vgname = 'udisks_test_vdo_vg'

View File

@ -0,0 +1,190 @@
From e039516b103eb9749a3e261c5ee1a9bc110676cf Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 26 Jun 2020 17:42:32 +0200
Subject: [PATCH 1/8] daemon: Always flush interface property changes
Setting properties on a GDBusInterfaceSkeleton from the main thread
as a result of uevent is somewhat racy to clients that are waiting
for a method call to return that is processed in a separate thread
by the daemon. Perhaps there's a race in the GDBus worker thread
that processes changes from both threads and send them out on the bus.
Explicit flush on GDBusInterfaceSkeleton interfaces seems to fix
the issue. Such approach was used before on some places, this change
adds explicit flushes at all places where properties may change.
---
src/udiskslinuxblock.c | 2 ++
src/udiskslinuxdrive.c | 1 +
src/udiskslinuxdriveata.c | 5 +++++
src/udiskslinuxencrypted.c | 5 +++++
src/udiskslinuxfilesystem.c | 3 +++
src/udiskslinuxloop.c | 1 +
src/udiskslinuxmdraid.c | 1 +
src/udiskslinuxpartition.c | 2 ++
src/udiskslinuxpartitiontable.c | 1 +
src/udiskslinuxswapspace.c | 1 +
10 files changed, 22 insertions(+)
diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c
index ddc7fe1f..34d73f0e 100644
--- a/src/udiskslinuxblock.c
+++ b/src/udiskslinuxblock.c
@@ -893,6 +893,7 @@ update_configuration (UDisksLinuxBlock *block,
configuration = g_variant_new ("a(sa{sv})", NULL);
}
udisks_block_set_configuration (UDISKS_BLOCK (block), configuration);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (block));
}
#ifdef HAVE_LIBMOUNT_UTAB
@@ -1280,6 +1281,7 @@ udisks_linux_block_update (UDisksLinuxBlock *block,
update_mdraid (block, device, drive, object_manager);
out:
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (block));
if (device != NULL)
g_object_unref (device);
if (drive != NULL)
diff --git a/src/udiskslinuxdrive.c b/src/udiskslinuxdrive.c
index e9dd7117..28a90ce9 100644
--- a/src/udiskslinuxdrive.c
+++ b/src/udiskslinuxdrive.c
@@ -950,6 +950,7 @@ udisks_linux_drive_update (UDisksLinuxDrive *drive,
ret = update_configuration (drive, object);
out:
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (drive));
if (device != NULL)
g_clear_object (&device);
diff --git a/src/udiskslinuxdriveata.c b/src/udiskslinuxdriveata.c
index d65f3254..4ba66d09 100644
--- a/src/udiskslinuxdriveata.c
+++ b/src/udiskslinuxdriveata.c
@@ -339,6 +339,8 @@ udisks_linux_drive_ata_update (UDisksLinuxDriveAta *drive,
update_security (drive, device);
out:
+ /* ensure property changes are sent before the method return */
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (drive));
if (device != NULL)
g_object_unref (device);
@@ -681,6 +683,9 @@ udisks_linux_drive_ata_refresh_smart_sync (UDisksLinuxDriveAta *drive,
/* update stats again to account for the IO we just did to read the SMART info */
update_io_stats (drive, device);
+ /* ensure property changes are sent before the method return */
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (drive));
+
out:
g_clear_object (&device);
if (d != NULL)
diff --git a/src/udiskslinuxencrypted.c b/src/udiskslinuxencrypted.c
index 73c78873..8a230fda 100644
--- a/src/udiskslinuxencrypted.c
+++ b/src/udiskslinuxencrypted.c
@@ -237,6 +237,8 @@ udisks_linux_encrypted_update (UDisksLinuxEncrypted *encrypted,
update_metadata_size (encrypted, object);
udisks_linux_block_encrypted_unlock (block);
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (encrypted));
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -630,6 +632,9 @@ handle_unlock (UDisksEncrypted *encrypted,
g_udev_device_get_sysfs_attr (cleartext_device->udev_device, "dm/uuid"),
caller_uid);
+ /* ensure property changes are sent before the method return */
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (encrypted));
+
udisks_encrypted_complete_unlock (encrypted,
invocation,
g_dbus_object_get_object_path (G_DBUS_OBJECT (cleartext_object)));
diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
index 669fc40b..3ae11c32 100644
--- a/src/udiskslinuxfilesystem.c
+++ b/src/udiskslinuxfilesystem.c
@@ -277,6 +277,8 @@ udisks_linux_filesystem_update (UDisksLinuxFilesystem *filesystem,
if (! skip_fs_size)
udisks_filesystem_set_size (UDISKS_FILESYSTEM (filesystem), get_filesystem_size (object));
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (filesystem));
+
g_object_unref (device);
}
@@ -1865,6 +1867,7 @@ handle_resize (UDisksFilesystem *filesystem,
UDISKS_DEFAULT_WAIT_TIMEOUT);
udisks_filesystem_set_size (filesystem, get_filesystem_size (UDISKS_LINUX_BLOCK_OBJECT (object)));
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (filesystem));
udisks_filesystem_complete_resize (filesystem, invocation);
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), TRUE, NULL);
diff --git a/src/udiskslinuxloop.c b/src/udiskslinuxloop.c
index 6c8a4561..5d7e3553 100644
--- a/src/udiskslinuxloop.c
+++ b/src/udiskslinuxloop.c
@@ -187,6 +187,7 @@ udisks_linux_loop_update (UDisksLinuxLoop *loop,
}
udisks_loop_set_setup_by_uid (UDISKS_LOOP (loop), setup_by_uid);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (loop));
g_object_unref (device);
}
diff --git a/src/udiskslinuxmdraid.c b/src/udiskslinuxmdraid.c
index 85fc2a3b..7eca9764 100644
--- a/src/udiskslinuxmdraid.c
+++ b/src/udiskslinuxmdraid.c
@@ -512,6 +512,7 @@ udisks_linux_mdraid_update (UDisksLinuxMDRaid *mdraid,
uuid));
out:
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (mdraid));
if (raid_data)
bd_md_examine_data_free (raid_data);
g_free (sync_completed);
diff --git a/src/udiskslinuxpartition.c b/src/udiskslinuxpartition.c
index 97ba02fe..ff0fdfc0 100644
--- a/src/udiskslinuxpartition.c
+++ b/src/udiskslinuxpartition.c
@@ -312,6 +312,8 @@ udisks_linux_partition_update (UDisksLinuxPartition *partition,
udisks_partition_set_is_container (UDISKS_PARTITION (partition), is_container);
udisks_partition_set_is_contained (UDISKS_PARTITION (partition), is_contained);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (partition));
+
g_free (name);
g_clear_object (&device);
g_clear_object (&disk_block_object);
diff --git a/src/udiskslinuxpartitiontable.c b/src/udiskslinuxpartitiontable.c
index b26849bc..e43a0708 100644
--- a/src/udiskslinuxpartitiontable.c
+++ b/src/udiskslinuxpartitiontable.c
@@ -146,6 +146,7 @@ udisks_linux_partition_table_update (UDisksLinuxPartitionTable *table,
udisks_partition_table_set_partitions (UDISKS_PARTITION_TABLE (table),
partition_object_paths);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (table));
g_free (partition_object_paths);
diff --git a/src/udiskslinuxswapspace.c b/src/udiskslinuxswapspace.c
index ee103528..bb47f3d4 100644
--- a/src/udiskslinuxswapspace.c
+++ b/src/udiskslinuxswapspace.c
@@ -127,6 +127,7 @@ udisks_linux_swapspace_update (UDisksLinuxSwapspace *swapspace,
active = TRUE;
udisks_swapspace_set_active (UDISKS_SWAPSPACE (swapspace), active);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (swapspace));
g_object_unref (device);
}
--
2.26.2

View File

@ -0,0 +1,39 @@
commit 214d65ae4d2b779fc1674420a042082ae029eb6b
Author: Vojtech Trefny <vtrefny@redhat.com>
Date: Mon Jul 13 16:16:47 2020 +0200
dbus_tests: Fix getting list of SATA drives for Drive.ATA test
Resolves: rhbz#1855785
diff --git a/src/tests/dbus-tests/test_drive_ata.py b/src/tests/dbus-tests/test_drive_ata.py
index ff6d01cc..df298a9c 100644
--- a/src/tests/dbus-tests/test_drive_ata.py
+++ b/src/tests/dbus-tests/test_drive_ata.py
@@ -14,8 +14,24 @@ SMART_ATA_CHECKSUM_FAIL = 1 << 2
smart_unsupported = set()
smart_supported = set()
-sata_disks = (dev for dev in os.listdir("/dev") if re.match(r'sd[a-z]+$', dev))
-for disk in sata_disks:
+
+DISK_PATH = "/dev/disk/by-path/"
+
+
+def _get_sata_disks():
+ sata_disks = []
+ by_path = os.listdir(DISK_PATH)
+ for dev in by_path:
+ if "ata" in dev and "part" not in dev:
+ path = os.path.realpath(os.path.join(DISK_PATH, dev))
+ name = os.path.basename(path)
+ if name.startswith("sd"):
+ # ignore devices like CD drives etc.
+ sata_disks.append(name)
+ return sata_disks
+
+
+for disk in _get_sata_disks():
ret, out = UdisksTestCase.run_command("smartctl -a /dev/%s" % disk)
# Only the following bits in the exit status mean the device failed to

View File

@ -0,0 +1,25 @@
From 195f3b030de32f5993da736c75e6a9bd76e6a7c7 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 26 Jun 2020 17:56:39 +0200
Subject: [PATCH 5/8] iscsi: Always flush interface property changes
---
modules/iscsi/udiskslinuxiscsisessionobject.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/modules/iscsi/udiskslinuxiscsisessionobject.c b/modules/iscsi/udiskslinuxiscsisessionobject.c
index 9e525e3f..a43cecd1 100644
--- a/modules/iscsi/udiskslinuxiscsisessionobject.c
+++ b/modules/iscsi/udiskslinuxiscsisessionobject.c
@@ -355,6 +355,8 @@ udisks_linux_iscsi_session_object_update_iface (UDisksLinuxISCSISessionObject *s
udisks_iscsi_session_set_lu_reset_timeout (iface, session_info.tmo.lu_reset_tmo);
udisks_iscsi_session_set_recovery_timeout (iface, session_info.tmo.recovery_tmo);
udisks_iscsi_session_set_tgt_reset_timeout (iface, session_info.tmo.tgt_reset_tmo);
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
}
static gboolean
--
2.26.2

View File

@ -0,0 +1,25 @@
From 861a0d8721536e2d210b79c845bb4f5b266b037f Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 26 Jun 2020 17:57:01 +0200
Subject: [PATCH 6/8] lsm: Always flush interface property changes
---
modules/lsm/lsm_linux_drive.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/modules/lsm/lsm_linux_drive.c b/modules/lsm/lsm_linux_drive.c
index 19e68c2f..6433c308 100644
--- a/modules/lsm/lsm_linux_drive.c
+++ b/modules/lsm/lsm_linux_drive.c
@@ -220,6 +220,8 @@ _fill_drive_lsm (UDisksLinuxDriveLSM *drive_lsm,
udisks_drive_lsm_set_min_io_size (std_drv_lsm, lsm_vol_data->min_io_size);
udisks_drive_lsm_set_opt_io_size (std_drv_lsm, lsm_vol_data->opt_io_size);
udisks_drive_lsm_set_raid_disk_count (std_drv_lsm, lsm_vol_data->raid_disk_count);
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (std_drv_lsm));
}
--
2.26.2

View File

@ -0,0 +1,110 @@
From 39d13907f712269bb9debd0fd8a0852347c98136 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 26 Jun 2020 17:55:53 +0200
Subject: [PATCH 2/8] lvm2: Always flush interface property changes
---
modules/lvm2/udiskslinuxlogicalvolume.c | 3 +++
modules/lvm2/udiskslinuxphysicalvolume.c | 2 ++
modules/lvm2/udiskslinuxvdovolume.c | 2 ++
modules/lvm2/udiskslinuxvolumegroup.c | 3 +++
modules/lvm2/udiskslinuxvolumegroupobject.c | 3 +++
5 files changed, 13 insertions(+)
diff --git a/modules/lvm2/udiskslinuxlogicalvolume.c b/modules/lvm2/udiskslinuxlogicalvolume.c
index 373cee2e..c0f074d8 100644
--- a/modules/lvm2/udiskslinuxlogicalvolume.c
+++ b/modules/lvm2/udiskslinuxlogicalvolume.c
@@ -229,6 +229,8 @@ udisks_linux_logical_volume_update (UDisksLinuxLogicalVolume *logical_volume
logical_volume->needs_udev_hack = FALSE;
g_free (dev_file);
}
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
}
void
@@ -248,6 +250,7 @@ udisks_linux_logical_volume_update_etctabs (UDisksLinuxLogicalVolume *logica
udisks_logical_volume_set_child_configuration (iface,
udisks_linux_find_child_configuration (daemon,
uuid));
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
}
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/modules/lvm2/udiskslinuxphysicalvolume.c b/modules/lvm2/udiskslinuxphysicalvolume.c
index 27043030..36e7c322 100644
--- a/modules/lvm2/udiskslinuxphysicalvolume.c
+++ b/modules/lvm2/udiskslinuxphysicalvolume.c
@@ -143,6 +143,8 @@ udisks_linux_physical_volume_update (UDisksLinuxPhysicalVolume *physical_vo
udisks_physical_volume_set_size (iface, pv_info->pv_size);
udisks_physical_volume_set_free_size (iface, pv_info->pv_free);
}
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
}
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/modules/lvm2/udiskslinuxvdovolume.c b/modules/lvm2/udiskslinuxvdovolume.c
index 317eddc2..430e2814 100644
--- a/modules/lvm2/udiskslinuxvdovolume.c
+++ b/modules/lvm2/udiskslinuxvdovolume.c
@@ -177,6 +177,8 @@ udisks_linux_vdo_volume_update (UDisksLinuxVDOVolume *vdo_volume,
udisks_vdo_volume_set_compression (iface, vdo_info->compression);
udisks_vdo_volume_set_deduplication (iface, vdo_info->deduplication);
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
}
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/modules/lvm2/udiskslinuxvolumegroup.c b/modules/lvm2/udiskslinuxvolumegroup.c
index aad2193e..3fbf6f02 100644
--- a/modules/lvm2/udiskslinuxvolumegroup.c
+++ b/modules/lvm2/udiskslinuxvolumegroup.c
@@ -136,11 +136,14 @@ udisks_linux_volume_group_update (UDisksLinuxVolumeGroup *volume_group,
gboolean *needs_polling_ret)
{
UDisksVolumeGroup *iface = UDISKS_VOLUME_GROUP (volume_group);
+
udisks_volume_group_set_name (iface, vg_info->name);
udisks_volume_group_set_uuid (iface, vg_info->uuid);
udisks_volume_group_set_size (iface, vg_info->size);
udisks_volume_group_set_free_size (iface, vg_info->free);
udisks_volume_group_set_extent_size (iface, vg_info->extent_size);
+
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
}
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/modules/lvm2/udiskslinuxvolumegroupobject.c b/modules/lvm2/udiskslinuxvolumegroupobject.c
index 50e9c640..e3bc8dfc 100644
--- a/modules/lvm2/udiskslinuxvolumegroupobject.c
+++ b/modules/lvm2/udiskslinuxvolumegroupobject.c
@@ -442,6 +442,7 @@ block_object_update_lvm_iface (UDisksLinuxBlockObject *object,
udisks_linux_block_lvm2_update (UDISKS_LINUX_BLOCK_LVM2 (iface_block_lvm2), object);
udisks_block_lvm2_set_logical_volume (iface_block_lvm2, lv_obj_path);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface_block_lvm2));
}
static void
@@ -456,6 +457,7 @@ lv_object_update_block_path (UDisksLinuxBlockObject *block_object,
{
block_objpath = g_dbus_object_get_object_path (G_DBUS_OBJECT (block_object));
udisks_logical_volume_set_block_device (UDISKS_LOGICAL_VOLUME (lv), block_objpath);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (lv));
}
}
@@ -695,6 +697,7 @@ update_vg (GObject *source_obj,
bd_lvm_vgdata_free (vg_info);
lv_list_free (lvs);
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (object->iface_volume_group));
g_object_unref (object);
}
--
2.26.2

View File

@ -0,0 +1,34 @@
From 890a0f3ca8cb5894d1764752c98b90dcb6274d6d Mon Sep 17 00:00:00 2001
From: Vojtech Trefny <vtrefny@redhat.com>
Date: Tue, 9 Jun 2020 11:16:15 +0200
Subject: [PATCH] dbus-tests: Fix UdisksLVMVDOTest.test_resize_physical
1 GiB suddenly isn't enough for physical size grow, lets hope
2 GiB will be enough for everyone.
Resolves: rhzb#1845435
---
src/tests/dbus-tests/test_20_LVM.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/tests/dbus-tests/test_20_LVM.py b/src/tests/dbus-tests/test_20_LVM.py
index e238879a3..1073a2f90 100644
--- a/src/tests/dbus-tests/test_20_LVM.py
+++ b/src/tests/dbus-tests/test_20_LVM.py
@@ -576,6 +576,7 @@ def test_resize_logical(self):
dbus_size = self.get_property(lv, '.LogicalVolume', 'Size')
dbus_size.assertEqual(vsize * 5)
+ @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
def test_resize_physical(self):
vgname = 'udisks_test_vdo_vg'
@@ -586,7 +587,7 @@ def test_resize_physical(self):
vg_free = self.get_property(vg, '.VolumeGroup', 'FreeSize')
lv_name = 'udisks_test_vdovlv'
pool_name = 'udisks_test_vdopool'
- psize = vg_free.value - 1 * 1024**3
+ psize = vg_free.value - 2 * 1024**3
vsize = psize * 5
lv_path = vg.CreateVDOVolume(lv_name, pool_name, dbus.UInt64(psize), dbus.UInt64(vsize),
dbus.UInt64(0), True, True, "auto", self.no_options,

View File

@ -0,0 +1,29 @@
From fdf6b233df960e6903c62b86735d86c59d967d12 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 19 Jun 2020 19:12:07 +0200
Subject: [PATCH] udiskslinuxblock: Fix fstab records matching by needle
Apparently mnt_fs_match_options() is not suitable for this use case.
---
src/udiskslinuxblock.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c
index 888ec634..d5be8e4c 100644
--- a/src/udiskslinuxblock.c
+++ b/src/udiskslinuxblock.c
@@ -575,7 +575,10 @@ find_fstab_entries (UDisksDaemon *daemon,
}
else if (needle != NULL)
{
- if (mnt_fs_match_options (fs, needle) == 0)
+ const char *opts;
+
+ opts = mnt_fs_get_options (fs);
+ if (! opts || g_strstr_len (opts, -1, needle) == NULL)
continue;
}
--
2.26.2

View File

@ -0,0 +1,24 @@
From 724ff8679e0ae0fd4d84f4e6c1b36007e648e8ca Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 26 Jun 2020 17:57:12 +0200
Subject: [PATCH 7/8] zram: Always flush interface property changes
---
modules/zram/udiskslinuxblockzram.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/modules/zram/udiskslinuxblockzram.c b/modules/zram/udiskslinuxblockzram.c
index 132d4174..1bae3686 100644
--- a/modules/zram/udiskslinuxblockzram.c
+++ b/modules/zram/udiskslinuxblockzram.c
@@ -277,6 +277,7 @@ udisks_linux_block_zram_update (UDisksLinuxBlockZRAM *zramblock,
udisks_block_zram_set_active (iface, bd_swap_swapstatus (dev_file, &error));
out:
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
if (zram_info)
bd_kbd_zram_stats_free (zram_info);
if (error)
--
2.26.2

View File

@ -0,0 +1,528 @@
From 8d5c90a1f4bbe548a1ae361f8d69970669d6e72e Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 13 Nov 2020 16:52:11 +0100
Subject: [PATCH 1/2] udisksdaemonutil: Refactor
udisks_daemon_util_trigger_uevent() out of UDisksLinuxBlockObject
This decouples uevent triggering from UDisksLinuxBlockObject as sometimes
we don't have a block object yet or it's outdated.
---
doc/udisks2-sections.txt.daemon.sections.in | 2 +
src/udisksdaemonutil.c | 230 ++++++++++++++++++++
src/udisksdaemonutil.h | 7 +
src/udiskslinuxblockobject.c | 180 ++-------------
4 files changed, 253 insertions(+), 166 deletions(-)
diff --git a/doc/udisks2-sections.txt.daemon.sections.in b/doc/udisks2-sections.txt.daemon.sections.in
index 26c3c2cd..3030fa95 100644
--- a/doc/udisks2-sections.txt.daemon.sections.in
+++ b/doc/udisks2-sections.txt.daemon.sections.in
@@ -307,6 +307,8 @@ udisks_daemon_util_file_set_contents
udisks_daemon_util_on_user_seat
udisks_daemon_util_get_free_mdraid_device
udisks_ata_identify_get_word
+udisks_daemon_util_trigger_uevent
+udisks_daemon_util_trigger_uevent_sync
</SECTION>
<SECTION>
diff --git a/src/udisksdaemonutil.c b/src/udisksdaemonutil.c
index 75b877a0..d16c0766 100644
--- a/src/udisksdaemonutil.c
+++ b/src/udisksdaemonutil.c
@@ -34,10 +34,14 @@
#include <limits.h>
#include <stdlib.h>
+#include <blockdev/blockdev.h>
+
#include "udisksdaemon.h"
#include "udisksdaemonutil.h"
#include "udisksstate.h"
#include "udiskslogging.h"
+#include "udiskslinuxdevice.h"
+#include "udiskslinuxprovider.h"
#include "udiskslinuxblockobject.h"
#include "udiskslinuxdriveobject.h"
@@ -1626,3 +1630,229 @@ udisks_ata_identify_get_word (const guchar *identify_data, guint word_number)
out:
return ret;
}
+
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static volatile guint uevent_serial = 0;
+
+static gboolean
+trigger_uevent (const gchar *path, const gchar *str)
+{
+ gint fd;
+
+ fd = open (path, O_WRONLY);
+ if (fd < 0)
+ {
+ udisks_warning ("Error opening %s while triggering uevent: %m", path);
+ return FALSE;
+ }
+
+ if (write (fd, str, strlen (str)) != (ssize_t) strlen (str))
+ {
+ udisks_warning ("Error writing '%s' to file %s: %m", str, path);
+ close (fd);
+ return FALSE;
+ }
+
+ close (fd);
+ return TRUE;
+}
+
+typedef struct
+{
+ UDisksDaemon *daemon;
+ GMainLoop *main_loop;
+ guint serial;
+ gchar *uevent_path;
+ gboolean success;
+} SynthUeventData;
+
+static gboolean
+trigger_uevent_idle_cb (gpointer user_data)
+{
+ SynthUeventData *data = user_data;
+ gchar *str;
+
+ str = g_strdup_printf ("change %s UDISKSSERIAL=%u", udisks_daemon_get_uuid (data->daemon), data->serial);
+
+ if (! trigger_uevent (data->uevent_path, str))
+ {
+ /* kernel refused our string, try simple "change" but don't wait for it */
+ trigger_uevent (data->uevent_path, "change");
+ data->success = FALSE;
+ g_main_loop_quit (data->main_loop);
+ }
+ g_free (str);
+
+ /* remove the source */
+ return FALSE;
+}
+
+static gboolean
+uevent_wait_timeout_cb (gpointer user_data)
+{
+ SynthUeventData *data = user_data;
+
+ data->success = FALSE;
+ g_main_loop_quit (data->main_loop);
+
+ /* remove the source */
+ return FALSE;
+}
+
+static void
+uevent_probed_cb (UDisksLinuxProvider *provider,
+ const gchar *action,
+ UDisksLinuxDevice *device,
+ gpointer user_data)
+{
+ SynthUeventData *data = user_data;
+ const gchar *received_serial_str;
+ gint64 received_serial;
+ gchar *endptr;
+
+ received_serial_str = g_udev_device_get_property (device->udev_device, "SYNTH_ARG_UDISKSSERIAL");
+ if (received_serial_str != NULL)
+ {
+ endptr = (gchar *) received_serial_str;
+ received_serial = g_ascii_strtoll (received_serial_str, &endptr, 0);
+ if (endptr != received_serial_str && received_serial == data->serial)
+ {
+ data->success = TRUE;
+ g_main_loop_quit (data->main_loop);
+ }
+ }
+}
+
+/**
+ * udisks_daemon_util_trigger_uevent:
+ * @daemon: A #UDisksDaemon.
+ * @device_path: Block device path.
+ *
+ * Triggers a 'change' uevent in the kernel.
+ *
+ * The triggered event will bubble up from the kernel through the udev
+ * stack and will eventually be received by the udisks daemon process
+ * itself. This method does not wait for the event to be received.
+ */
+void
+udisks_daemon_util_trigger_uevent (UDisksDaemon *daemon,
+ const gchar *device_path)
+{
+ GUdevClient *gudev_client;
+ GUdevDevice *gudev_device;
+ gchar *path;
+
+ g_return_if_fail (UDISKS_IS_DAEMON (daemon));
+ g_return_if_fail (device_path != NULL);
+
+ gudev_client = udisks_linux_provider_get_udev_client (udisks_daemon_get_linux_provider (daemon));
+ gudev_device = g_udev_client_query_by_device_file (gudev_client, device_path);
+ if (gudev_device == NULL)
+ {
+ udisks_critical ("Device %s not found in udev database, skipping uevent trigger", device_path);
+ return;
+ }
+
+ path = g_build_filename (g_udev_device_get_sysfs_path (gudev_device), "uevent", NULL);
+ trigger_uevent (path, "change");
+ g_free (path);
+
+ g_object_unref (gudev_device);
+}
+
+/**
+ * udisks_daemon_util_trigger_uevent_sync:
+ * @daemon: A #UDisksDaemon.
+ * @device_path: Block device path.
+ * @timeout_seconds: Maximum time to wait for the uevent (in seconds).
+ *
+ * Triggers a 'change' uevent in the kernel and waits until it's received and
+ * processed by udisks.
+ *
+ * Unlike udisks_daemon_util_trigger_uevent() that just triggers
+ * a synthetic uevent to the kernel, this call will actually block and wait until
+ * the #UDisksLinuxProvider receives the uevent, performs probing and processes
+ * the uevent further down the UDisks object stack. Upon returning from this
+ * function call the caller may assume the event has been fully processed, all
+ * D-Bus objects are updated and settled. Typically used in busy wait for
+ * a particular D-Bus interface.
+ *
+ * Note that this uses synthetic uevent tagging and only works on linux kernel
+ * 4.13 and higher. In case an older kernel is detected this acts like the classic
+ * udisks_daemon_util_trigger_uevent() call and %FALSE is returned.
+ *
+ * Returns: %TRUE if the uevent has been successfully received, %FALSE otherwise
+ * or when the kernel version is too old.
+ */
+gboolean
+udisks_daemon_util_trigger_uevent_sync (UDisksDaemon *daemon,
+ const gchar *device_path,
+ guint timeout_seconds)
+{
+ UDisksLinuxProvider *provider;
+ GUdevClient *gudev_client;
+ GUdevDevice *gudev_device;
+ SynthUeventData data;
+ GMainContext *main_context;
+ GSource *idle_source;
+ GSource *timeout_source;
+
+ g_return_val_if_fail (UDISKS_IS_DAEMON (daemon), FALSE);
+ g_return_val_if_fail (device_path != NULL, FALSE);
+
+ if (bd_utils_check_linux_version (4, 13, 0) < 0)
+ {
+ udisks_daemon_util_trigger_uevent (daemon, device_path);
+ return FALSE;
+ }
+
+ provider = udisks_daemon_get_linux_provider (daemon);
+ gudev_client = udisks_linux_provider_get_udev_client (provider);
+ gudev_device = g_udev_client_query_by_device_file (gudev_client, device_path);
+ if (gudev_device == NULL)
+ {
+ udisks_critical ("Device %s not found in udev database, skipping uevent trigger", device_path);
+ return FALSE;
+ }
+
+ data.daemon = daemon;
+ data.uevent_path = g_build_filename (g_udev_device_get_sysfs_path (gudev_device), "uevent", NULL);
+ data.serial = g_atomic_int_add (&uevent_serial, 1);
+
+ main_context = g_main_context_new ();
+ g_main_context_push_thread_default (main_context);
+ data.main_loop = g_main_loop_new (main_context, FALSE);
+
+ /* queue the actual trigger in the loop */
+ idle_source = g_idle_source_new ();
+ g_source_set_callback (idle_source, (GSourceFunc) trigger_uevent_idle_cb, &data, NULL);
+ g_source_attach (idle_source, main_context);
+ g_source_unref (idle_source);
+
+ /* add timeout as a fallback */
+ timeout_source = g_timeout_source_new_seconds (timeout_seconds);
+ g_source_set_callback (timeout_source, (GSourceFunc) uevent_wait_timeout_cb, &data, NULL);
+ g_source_attach (timeout_source, main_context);
+ g_source_unref (timeout_source);
+
+ /* catch incoming uevents */
+ g_signal_connect (provider, "uevent-probed", G_CALLBACK (uevent_probed_cb), &data);
+
+ data.success = FALSE;
+ g_main_loop_run (data.main_loop);
+
+ g_signal_handlers_disconnect_by_func (provider, uevent_probed_cb, &data);
+ g_main_context_pop_thread_default (main_context);
+
+ g_main_loop_unref (data.main_loop);
+ g_main_context_unref (main_context);
+
+ g_free (data.uevent_path);
+ g_object_unref (gudev_device);
+
+ return data.success;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
diff --git a/src/udisksdaemonutil.h b/src/udisksdaemonutil.h
index 4fe36214..2edf2122 100644
--- a/src/udisksdaemonutil.h
+++ b/src/udisksdaemonutil.h
@@ -51,6 +51,13 @@ guint64 udisks_daemon_util_block_get_size (GUdevDevice *device,
gboolean *out_media_available,
gboolean *out_media_change_detected);
+void udisks_daemon_util_trigger_uevent (UDisksDaemon *daemon,
+ const gchar *device_path);
+
+gboolean udisks_daemon_util_trigger_uevent_sync (UDisksDaemon *daemon,
+ const gchar *device_path,
+ guint timeout_seconds);
+
gchar *udisks_daemon_util_resolve_link (const gchar *path,
const gchar *name);
diff --git a/src/udiskslinuxblockobject.c b/src/udiskslinuxblockobject.c
index 42ab17d7..5a68c84b 100644
--- a/src/udiskslinuxblockobject.c
+++ b/src/udiskslinuxblockobject.c
@@ -38,8 +38,6 @@
#include <stdlib.h>
#include <glib/gstdio.h>
-#include <blockdev/blockdev.h>
-
#include "udiskslogging.h"
#include "udisksdaemon.h"
#include "udisksdaemonutil.h"
@@ -959,122 +957,24 @@ on_mount_monitor_mount_removed (UDisksMountMonitor *monitor,
/* ---------------------------------------------------------------------------------------------------- */
-static volatile guint uevent_serial = 0;
-
-static gboolean
-trigger_uevent (const gchar *path, const gchar *str)
-{
- gint fd;
-
- fd = open (path, O_WRONLY);
- if (fd < 0)
- {
- udisks_warning ("Error opening %s while triggering uevent: %m", path);
- return FALSE;
- }
-
- if (write (fd, str, strlen (str)) != (ssize_t) strlen (str))
- {
- udisks_warning ("Error writing '%s' to file %s: %m", str, path);
- close (fd);
- return FALSE;
- }
-
- close (fd);
- return TRUE;
-}
-
-typedef struct
-{
- UDisksLinuxBlockObject *object;
- GMainLoop *main_loop;
- guint serial;
- gchar *uevent_path;
- gboolean success;
-} SynthUeventData;
-
-static gboolean
-trigger_uevent_idle_cb (gpointer user_data)
-{
- SynthUeventData *data = user_data;
- gchar *str;
-
- str = g_strdup_printf ("change %s UDISKSSERIAL=%u", udisks_daemon_get_uuid (data->object->daemon), data->serial);
-
- if (! trigger_uevent (data->uevent_path, str))
- {
- /* kernel refused our string, try simple "change" but don't wait for it */
- trigger_uevent (data->uevent_path, "change");
- data->success = FALSE;
- g_main_loop_quit (data->main_loop);
- }
- g_free (str);
-
- /* remove the source */
- return FALSE;
-}
-
-static gboolean
-uevent_wait_timeout_cb (gpointer user_data)
-{
- SynthUeventData *data = user_data;
-
- data->success = FALSE;
- g_main_loop_quit (data->main_loop);
-
- /* remove the source */
- return FALSE;
-}
-
-static void
-uevent_probed_cb (UDisksLinuxProvider *provider,
- const gchar *action,
- UDisksLinuxDevice *device,
- gpointer user_data)
-{
- SynthUeventData *data = user_data;
- const gchar *received_serial_str;
- gint64 received_serial;
- gchar *endptr;
-
- received_serial_str = g_udev_device_get_property (device->udev_device, "SYNTH_ARG_UDISKSSERIAL");
- if (received_serial_str != NULL)
- {
- endptr = (gchar *) received_serial_str;
- received_serial = g_ascii_strtoll (received_serial_str, &endptr, 0);
- if (endptr != received_serial_str && received_serial == data->serial)
- {
- data->success = TRUE;
- g_main_loop_quit (data->main_loop);
- }
- }
-}
-
/**
* udisks_linux_block_object_trigger_uevent:
* @object: A #UDisksLinuxBlockObject.
*
* Triggers a 'change' uevent in the kernel.
*
- * The triggered event will bubble up from the kernel through the udev
- * stack and will eventually be received by the udisks daemon process
- * itself. This method does not wait for the event to be received.
+ * Refer to udisks_daemon_util_trigger_uevent() for detailed description.
*/
void
udisks_linux_block_object_trigger_uevent (UDisksLinuxBlockObject *object)
{
- UDisksLinuxDevice *device;
- gchar *path;
+ gchar *device_file;
g_return_if_fail (UDISKS_IS_LINUX_BLOCK_OBJECT (object));
- device = udisks_linux_block_object_get_device (object);
- path = g_strconcat (g_udev_device_get_sysfs_path (device->udev_device), "/uevent", NULL);
-
- trigger_uevent (path, "change");
-
- g_free (path);
- g_object_unref (device);
+ device_file = udisks_linux_block_object_get_device_file (object);
+ udisks_daemon_util_trigger_uevent (object->daemon, device_file);
+ g_free (device_file);
}
/**
@@ -1083,19 +983,10 @@ udisks_linux_block_object_trigger_uevent (UDisksLinuxBlockObject *object)
* @timeout_seconds: Maximum time to wait for the uevent (in seconds).
*
* Triggers a 'change' uevent in the kernel and waits until it's received and
- * processed by udisks.
- *
- * Unlike udisks_linux_block_object_trigger_uevent() that just triggers
- * a synthetic uevent to the kernel, this call will actually block and wait until
- * the #UDisksLinuxProvider receives the uevent, performs probing and processes
- * the uevent further down the UDisks object stack. Upon returning from this
- * function call the caller may assume the event has been fully processed, all
- * D-Bus objects are updated and settled. Typically used in busy wait for
- * a particular D-Bus interface.
+ * processed through the uevent queue.
*
- * Note that this uses synthetic uevent tagging and only works on linux kernel
- * 4.13 and higher. In case an older kernel is detected this acts like the classic
- * udisks_linux_block_object_trigger_uevent() call and %FALSE is returned.
+ * This is a convenient wrapper around udisks_daemon_util_trigger_uevent_sync().
+ * Refer to this function for detailed documentation.
*
* Returns: %TRUE if the uevent has been successfully received, %FALSE otherwise
* or when the kernel version is too old.
@@ -1104,59 +995,16 @@ gboolean
udisks_linux_block_object_trigger_uevent_sync (UDisksLinuxBlockObject *object,
guint timeout_seconds)
{
- UDisksLinuxDevice *device;
- UDisksLinuxProvider *provider;
- SynthUeventData data;
- GMainContext *main_context;
- GSource *idle_source;
- GSource *timeout_source;
+ gchar *device_file;
+ gboolean ret;
g_return_val_if_fail (UDISKS_IS_LINUX_BLOCK_OBJECT (object), FALSE);
- if (bd_utils_check_linux_version (4, 13, 0) < 0)
- {
- udisks_linux_block_object_trigger_uevent (object);
- return FALSE;
- }
-
- data.object = object;
- device = udisks_linux_block_object_get_device (object);
- data.uevent_path = g_strconcat (g_udev_device_get_sysfs_path (device->udev_device), "/uevent", NULL);
- data.serial = g_atomic_int_add (&uevent_serial, 1);
-
- main_context = g_main_context_new ();
- g_main_context_push_thread_default (main_context);
- data.main_loop = g_main_loop_new (main_context, FALSE);
-
- /* queue the actual trigger in the loop */
- idle_source = g_idle_source_new ();
- g_source_set_callback (idle_source, (GSourceFunc) trigger_uevent_idle_cb, &data, NULL);
- g_source_attach (idle_source, main_context);
- g_source_unref (idle_source);
+ device_file = udisks_linux_block_object_get_device_file (object);
+ ret = udisks_daemon_util_trigger_uevent_sync (object->daemon, device_file, timeout_seconds);
+ g_free (device_file);
- /* add timeout as a fallback */
- timeout_source = g_timeout_source_new_seconds (timeout_seconds);
- g_source_set_callback (timeout_source, (GSourceFunc) uevent_wait_timeout_cb, &data, NULL);
- g_source_attach (timeout_source, main_context);
- g_source_unref (timeout_source);
-
- /* catch incoming uevents */
- provider = udisks_daemon_get_linux_provider (object->daemon);
- g_signal_connect (provider, "uevent-probed", G_CALLBACK (uevent_probed_cb), &data);
-
- data.success = FALSE;
- g_main_loop_run (data.main_loop);
-
- g_signal_handlers_disconnect_by_func (provider, uevent_probed_cb, &data);
- g_main_context_pop_thread_default (main_context);
-
- g_main_loop_unref (data.main_loop);
- g_main_context_unref (main_context);
-
- g_free (data.uevent_path);
- g_object_unref (device);
-
- return data.success;
+ return ret;
}
/* ---------------------------------------------------------------------------------------------------- */
--
2.26.2

View File

@ -0,0 +1,27 @@
From 7fe04e70dc5a5ccf621a0beacc6d4b9e904037df Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 13 Nov 2020 16:57:24 +0100
Subject: [PATCH 2/2] udiskslinuxmanager: Trigger uevent after loop device
setup
---
src/udiskslinuxmanager.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/udiskslinuxmanager.c b/src/udiskslinuxmanager.c
index 1bbf980a..e0a83a80 100644
--- a/src/udiskslinuxmanager.c
+++ b/src/udiskslinuxmanager.c
@@ -430,6 +430,9 @@ handle_loop_setup (UDisksManager *object,
error = NULL;
wait_data.loop_device = loop_device;
wait_data.path = path;
+ udisks_daemon_util_trigger_uevent_sync (manager->daemon,
+ loop_device,
+ UDISKS_DEFAULT_WAIT_TIMEOUT);
loop_object = udisks_daemon_wait_for_object_sync (manager->daemon,
wait_for_loop_object,
&wait_data,
--
2.26.2

View File

@ -0,0 +1,54 @@
From 2d5d2b7570b0f44c14b34b5dc831f174205c10f2 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Wed, 15 Sep 2021 14:34:49 +0200
Subject: [PATCH] mount options: Always use errors=remount-ro for ext
filesystems
Default mount options are focused primarily on data safety, mounting
damaged ext2/3/4 filesystem as readonly would indicate something's wrong.
---
data/builtin_mount_options.conf | 9 +++++++++
src/tests/dbus-tests/test_80_filesystem.py | 6 ++++++
2 files changed, 15 insertions(+)
diff --git a/data/builtin_mount_options.conf b/data/builtin_mount_options.conf
index 37715cfa4..e0bd0ee1f 100644
--- a/data/builtin_mount_options.conf
+++ b/data/builtin_mount_options.conf
@@ -27,3 +27,12 @@ f2fs_allow=discard,nodiscard,compress_algorithm,compress_log_size,compress_exten
btrfs_allow=compress,compress-force,datacow,nodatacow,datasum,nodatasum,degraded,device,discard,nodiscard,subvol,subvolid,space_cache
f2fs_allow=discard,nodiscard,compress_algorithm,compress_log_size,compress_extension,alloc_mode
+
+ext2_defaults=errors=remount-ro
+ext2_allow=errors=remount-ro
+
+ext3_defaults=errors=remount-ro
+ext3_allow=errors=remount-ro
+
+ext4_defaults=errors=remount-ro
+ext4_allow=errors=remount-ro
diff --git a/src/tests/dbus-tests/test_80_filesystem.py b/src/tests/dbus-tests/test_80_filesystem.py
index 019880f57..2d1933240 100644
--- a/src/tests/dbus-tests/test_80_filesystem.py
+++ b/src/tests/dbus-tests/test_80_filesystem.py
@@ -321,6 +321,8 @@ def test_mount_auto(self):
_ret, out = self.run_command('mount | grep %s' % block_fs_dev)
self.assertIn(mnt_path, out)
self.assertIn('ro', out)
+ if self._fs_name.startswith('ext'):
+ self.assertIn('errors=remount-ro', out)
# dbus mountpoint
dbus_mounts = self.get_property(block_fs, '.Filesystem', 'MountPoints')
@@ -478,6 +480,10 @@ def test_custom_option(self, should_fail, dbus_option, should_be_present, config
if self._fs_name == "udf":
test_custom_option(self, False, None, False, "[defaults]\ndefaults=\nallow=exec,noexec,nodev,nosuid,atime,noatime,nodiratime,ro,rw,sync,dirsync,noload,uid=ignore,uid=forget\n")
test_custom_option(self, True, "uid=notallowed", True, "[defaults]\nallow=exec,noexec,nodev,nosuid,atime,noatime,nodiratime,ro,rw,sync,dirsync,noload,uid=ignore\n")
+ if self._fs_name.startswith("ext"):
+ test_custom_option(self, False, "errors=remount-ro", True, "", match_mount_option="errors=remount-ro")
+ test_custom_option(self, True, "errors=panic", False, "")
+ test_custom_option(self, True, "errors=continue", False, "")
# udev rules overrides
test_readonly(self, False, "", udev_rules_content = { "UDISKS_MOUNT_OPTIONS_DEFAULTS": "rw" })

690
udisks2.spec Normal file
View File

@ -0,0 +1,690 @@
%global glib2_version 2.36
%global gobject_introspection_version 1.30.0
%global polkit_version 0.102
%global systemd_version 208
%global libatasmart_version 0.17
%global dbus_version 1.4.0
%global with_gtk_doc 1
%global libblockdev_version 2.24
%define with_bcache 1
%define with_btrfs 1
%define with_vdo 0
%define with_lsm 1
%define with_zram 1
%define with_lvmcache 1
# valid options are 'luks1' or 'luks2'
%define default_luks_encryption luks1
%define is_fedora 0%{?rhel} == 0
# bcache and zram are not available on RHEL
%if (0%{?rhel})
%define with_bcache 0
%define with_zram 0
%endif
# btrfs is not available on RHEL > 7
%if 0%{?rhel} > 7 || %{with_btrfs} == 0
%define with_btrfs 0
%endif
# vdo is not available on Fedora
%if (0%{?fedora}) || %{with_vdo} == 0
%define with_vdo 0
%endif
# vdo is not available on i686
%ifnarch x86_64 aarch64 ppc64le s390x
%define with_vdo 0
%endif
# feature parity with existing RHEL 7 packages
%if (0%{?rhel}) && (0%{?rhel} <= 7)
%define with_lsm 0
%define with_lvmcache 0
%endif
# default to LUKS2 for RHEL > 7
%if 0%{?rhel} > 7
%define default_luks_encryption luks2
%endif
Name: udisks2
Summary: Disk Manager
Version: 2.9.0
Release: 9%{?dist}
License: GPLv2+
Group: System Environment/Libraries
URL: https://github.com/storaged-project/udisks
Source0: https://github.com/storaged-project/udisks/releases/download/udisks-%{version}/udisks-%{version}.tar.bz2
Patch0: udisks-2.9.1-teardown-needle-match.patch
Patch1: udisks-2.9.1-lvm_vdo-test_resize_physical-size.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1855785
Patch2: udisks-2.9.1-drive_ata_tests.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1845973
Patch10: udisks-2.9.1-daemon-Always-flush-interface-property-changes.patch
Patch11: udisks-2.9.1-lvm2-Always-flush-interface-property-changes.patch
Patch12: udisks-2.9.1-lsm-Always-flush-interface-property-changes.patch
Patch13: udisks-2.9.1-iscsi-Always-flush-interface-property-changes.patch
Patch14: udisks-2.9.1-zram-Always-flush-interface-property-changes.patch
Patch15: udisks-2.9.2-udisksdaemonutil-Refactor-udisks_daemon_util_trigger.patch
Patch16: udisks-2.9.2-udiskslinuxmanager-Trigger-uevent-after-loop-device-setup.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2004422
Patch17: udisks-2.9.4-ext-mount-options.patch
Patch20: udisks-2.10.0-tests-drive_ata-apm.patch
Patch21: udisks-2.10.0-tests-no-dev_disk-by-path.patch
Patch22: tests-disable-zram.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2023880
# https://bugzilla.redhat.com/show_bug.cgi?id=2025483
Patch23: udisks-2.10.0-vdo_test_writeAmplificationRatio.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1999149
Patch24: udisks-2.10.0-udiskslinuxencrypted_GError.patch
Patch25: udisks-2.10.0-udiskslinuxpartition_GError.patch
Patch26: udisks-2.10.0-udiskslinuxpartitiontable_GError.patch
Patch27: udisks-2.10.0-udiskslinuxfilesystem_GError.patch
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: gobject-introspection-devel >= %{gobject_introspection_version}
BuildRequires: libgudev1-devel >= %{systemd_version}
BuildRequires: libatasmart-devel >= %{libatasmart_version}
BuildRequires: polkit-devel >= %{polkit_version}
BuildRequires: systemd >= %{systemd_version}
BuildRequires: systemd-devel >= %{systemd_version}
BuildRequires: libacl-devel
BuildRequires: chrpath
BuildRequires: gtk-doc
BuildRequires: gettext-devel
BuildRequires: redhat-rpm-config
BuildRequires: libblockdev-devel >= %{libblockdev_version}
BuildRequires: libblockdev-part-devel >= %{libblockdev_version}
BuildRequires: libblockdev-loop-devel >= %{libblockdev_version}
BuildRequires: libblockdev-swap-devel >= %{libblockdev_version}
BuildRequires: libblockdev-mdraid-devel >= %{libblockdev_version}
BuildRequires: libblockdev-fs-devel >= %{libblockdev_version}
BuildRequires: libblockdev-crypto-devel >= %{libblockdev_version}
BuildRequires: libmount-devel
BuildRequires: libuuid-devel
Requires: libblockdev >= %{libblockdev_version}
Requires: libblockdev-part >= %{libblockdev_version}
Requires: libblockdev-loop >= %{libblockdev_version}
Requires: libblockdev-swap >= %{libblockdev_version}
Requires: libblockdev-mdraid >= %{libblockdev_version}
Requires: libblockdev-fs >= %{libblockdev_version}
Requires: libblockdev-crypto >= %{libblockdev_version}
# Needed for the systemd-related macros used in this file
%{?systemd_requires}
BuildRequires: systemd
# Needed to pull in the system bus daemon
Requires: dbus >= %{dbus_version}
# Needed to pull in the udev daemon
Requires: udev >= %{systemd_version}
# We need at least this version for bugfixes/features etc.
Requires: libatasmart >= %{libatasmart_version}
# For mount, umount, mkswap
Requires: util-linux
# For mkfs.ext3, mkfs.ext3, e2label
Requires: e2fsprogs
# For mkfs.xfs, xfs_admin
Requires: xfsprogs
# For mkfs.vfat
Requires: dosfstools
Requires: gdisk
# For ejecting removable disks
Requires: eject
# For utab monitor
Requires: libmount
Requires: lib%{name}%{?_isa} = %{version}-%{release}
# For mkntfs (not available on rhel or on ppc/ppc64)
%if ! 0%{?rhel}
%ifnarch ppc ppc64
Requires: ntfsprogs
%endif
%endif
# For /proc/self/mountinfo, only available in 2.6.26 or higher
Conflicts: kernel < 2.6.26
Provides: storaged = %{version}-%{release}
Obsoletes: storaged
%description
The Udisks project provides a daemon, tools and libraries to access and
manipulate disks, storage devices and technologies.
%package -n lib%{name}
Summary: Dynamic library to access the udisksd daemon
Group: System Environment/Libraries
License: LGPLv2+
Provides: libstoraged = %{version}-%{release}
Obsoletes: libstoraged
%description -n lib%{name}
This package contains the dynamic library, which provides
access to the udisksd daemon.
%package -n %{name}-iscsi
Summary: Module for iSCSI
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: iscsi-initiator-utils
BuildRequires: iscsi-initiator-utils-devel
Provides: storaged-iscsi = %{version}-%{release}
Obsoletes: storaged-iscsi
%description -n %{name}-iscsi
This package contains module for iSCSI configuration.
%package -n %{name}-lvm2
Summary: Module for LVM2
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: lvm2
Requires: libblockdev-lvm >= %{libblockdev_version}
BuildRequires: lvm2-devel
BuildRequires: libblockdev-lvm-devel >= %{libblockdev_version}
Provides: storaged-lvm2 = %{version}-%{release}
Obsoletes: storaged-lvm2
%description -n %{name}-lvm2
This package contains module for LVM2 configuration.
%package -n lib%{name}-devel
Summary: Development files for lib%{name}
Group: Development/Libraries
Requires: lib%{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Provides: libstoraged-devel = %{version}-%{release}
Obsoletes: libstoraged-devel
%description -n lib%{name}-devel
This package contains the development files for the library lib%{name}, a
dynamic library, which provides access to the udisksd daemon.
%if 0%{?with_bcache}
%package -n %{name}-bcache
Summary: Module for Bcache
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: libblockdev-kbd >= %{libblockdev_version}
BuildRequires: libblockdev-kbd-devel >= %{libblockdev_version}
Provides: storaged-bcache = %{version}-%{release}
Obsoletes: storaged-bcache
%description -n %{name}-bcache
This package contains module for Bcache configuration.
%endif
%if 0%{?with_btrfs}
%package -n %{name}-btrfs
Summary: Module for BTRFS
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: libblockdev-btrfs >= %{libblockdev_version}
BuildRequires: libblockdev-btrfs-devel >= %{libblockdev_version}
Provides: storaged-btrfs = %{version}-%{release}
Obsoletes: storaged-btrfs
%description -n %{name}-btrfs
This package contains module for BTRFS configuration.
%endif
%if 0%{?with_lsm}
%package -n %{name}-lsm
Summary: Module for LSM
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: libstoragemgmt
BuildRequires: libstoragemgmt-devel
BuildRequires: libconfig-devel
Provides: storaged-lsm = %{version}-%{release}
Obsoletes: storaged-lsm
%description -n %{name}-lsm
This package contains module for LSM configuration.
%endif
%if 0%{?with_zram}
%package -n %{name}-zram
Summary: Module for ZRAM
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: libblockdev-kbd >= %{libblockdev_version}
Requires: libblockdev-swap >= %{libblockdev_version}
BuildRequires: libblockdev-kbd-devel >= %{libblockdev_version}
BuildRequires: libblockdev-swap-devel
Provides: storaged-zram = %{version}-%{release}
Obsoletes: storaged-zram
%description -n %{name}-zram
This package contains module for ZRAM configuration.
%endif
%if 0%{?with_vdo}
%package -n %{name}-vdo
Summary: Module for VDO
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
License: LGPLv2+
Requires: vdo
Requires: libblockdev-vdo >= %{libblockdev_version}
BuildRequires: libblockdev-vdo-devel >= %{libblockdev_version}
%description -n %{name}-vdo
This package contains module for VDO management.
%endif
%prep
%setup -q -n udisks-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
sed -i udisks/udisks2.conf.in -e "s/encryption=luks1/encryption=%{default_luks_encryption}/"
%build
autoreconf -ivf
# modules need to be explicitly enabled
%configure \
--sysconfdir=/etc \
%if %{with_gtk_doc}
--enable-gtk-doc \
%else
--disable-gtk-doc \
%endif
%if 0%{?with_bcache}
--enable-bcache \
%endif
%if 0%{?with_btrfs}
--enable-btrfs \
%endif
%if 0%{?with_vdo}
--enable-vdo \
%endif
%if 0%{?with_zram}
--enable-zram \
%endif
%if 0%{?with_lsm}
--enable-lsm \
%endif
%if 0%{?with_lvmcache}
--enable-lvmcache \
%endif
--enable-lvm2 \
--enable-iscsi
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%if %{with_gtk_doc} == 0
rm -fr %{buildroot}/%{_datadir}/gtk-doc/html/udisks2
%endif
find %{buildroot} -name \*.la -o -name \*.a | xargs rm
chrpath --delete %{buildroot}/%{_sbindir}/umount.udisks2
chrpath --delete %{buildroot}/%{_bindir}/udisksctl
chrpath --delete %{buildroot}/%{_libexecdir}/udisks2/udisksd
%find_lang udisks2
%post -n %{name}
%systemd_post udisks2.service
# skip retriggering if udevd isn't even accessible, e.g. containers or
# rpm-ostree-based systems
if [ -S /run/udev/control ]; then
udevadm control --reload
udevadm trigger
fi
%preun -n %{name}
%systemd_preun udisks2.service
%postun -n %{name}
%systemd_postun_with_restart udisks2.service
%ldconfig_scriptlets -n lib%{name}
%if 0%{?with_zram}
%post -n %{name}-zram
%systemd_post zram-setup@.service
%preun -n %{name}-zram
%systemd_preun zram-setup@.service
%postun -n %{name}-zram
%systemd_postun zram-setup@.service
%endif
%files -f udisks2.lang
%doc README.md AUTHORS NEWS HACKING
%license COPYING
%dir %{_sysconfdir}/udisks2
%if %{is_fedora}
%dir %{_sysconfdir}/udisks2/modules.conf.d
%endif
%{_sysconfdir}/udisks2/udisks2.conf
%{_sysconfdir}/udisks2/mount_options.conf.example
%{_datadir}/dbus-1/system.d/org.freedesktop.UDisks2.conf
%{_datadir}/bash-completion/completions/udisksctl
%{_tmpfilesdir}/%{name}.conf
%{_unitdir}/udisks2.service
%{_udevrulesdir}/80-udisks2.rules
%{_sbindir}/umount.udisks2
%dir %{_libdir}/udisks2
%dir %{_libdir}/udisks2/modules
%dir %{_libexecdir}/udisks2
%{_libexecdir}/udisks2/udisksd
%{_bindir}/udisksctl
%{_mandir}/man1/udisksctl.1*
%{_mandir}/man5/udisks2.conf.5*
%{_mandir}/man8/udisksd.8*
%{_mandir}/man8/udisks.8*
%{_mandir}/man8/umount.udisks2.8*
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.policy
%{_datadir}/dbus-1/system-services/org.freedesktop.UDisks2.service
# Permissions for local state data are 0700 to avoid leaking information
# about e.g. mounts to unprivileged users
%attr(0700,root,root) %dir %{_localstatedir}/lib/udisks2
%files -n lib%{name}
%{_libdir}/libudisks2.so.*
%{_libdir}/girepository-1.0/UDisks-2.0.typelib
%files -n %{name}-lvm2
%{_libdir}/udisks2/modules/libudisks2_lvm2.so
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.lvm2.policy
%files -n %{name}-iscsi
%{_libdir}/udisks2/modules/libudisks2_iscsi.so
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.iscsi.policy
%files -n lib%{name}-devel
%{_libdir}/libudisks2.so
%dir %{_includedir}/udisks2
%dir %{_includedir}/udisks2/udisks
%{_includedir}/udisks2/udisks/*.h
%{_datadir}/gir-1.0/UDisks-2.0.gir
%if %{with_gtk_doc}
%dir %{_datadir}/gtk-doc/html/udisks2
%{_datadir}/gtk-doc/html/udisks2/*
%endif
%{_libdir}/pkgconfig/udisks2.pc
%{_libdir}/pkgconfig/udisks2-lvm2.pc
%{_libdir}/pkgconfig/udisks2-iscsi.pc
%if 0%{?with_bcache}
%{_libdir}/pkgconfig/udisks2-bcache.pc
%endif
%if 0%{?with_btrfs}
%{_libdir}/pkgconfig/udisks2-btrfs.pc
%endif
%if 0%{?with_lsm}
%{_libdir}/pkgconfig/udisks2-lsm.pc
%endif
%if 0%{?with_zram}
%{_libdir}/pkgconfig/udisks2-zram.pc
%endif
%if 0%{?with_vdo}
%{_libdir}/pkgconfig/udisks2-vdo.pc
%endif
%if 0%{?with_bcache}
%files -n %{name}-bcache
%{_libdir}/udisks2/modules/libudisks2_bcache.so
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.bcache.policy
%endif
%if 0%{?with_btrfs}
%files -n %{name}-btrfs
%{_libdir}/udisks2/modules/libudisks2_btrfs.so
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.btrfs.policy
%endif
%if 0%{?with_lsm}
%files -n %{name}-lsm
%dir %{_sysconfdir}/udisks2/modules.conf.d
%{_libdir}/udisks2/modules/libudisks2_lsm.so
%{_mandir}/man5/udisks2_lsm.conf.*
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.lsm.policy
%attr(0600,root,root) %{_sysconfdir}/udisks2/modules.conf.d/udisks2_lsm.conf
%endif
%if 0%{?with_zram}
%files -n %{name}-zram
%dir %{_sysconfdir}/udisks2/modules.conf.d
%{_libdir}/udisks2/modules/libudisks2_zram.so
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.zram.policy
%{_unitdir}/zram-setup@.service
%endif
%if 0%{?with_vdo}
%files -n %{name}-vdo
%{_libdir}/udisks2/modules/libudisks2_vdo.so
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.vdo.policy
%endif
%changelog
* Tue Feb 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-9
- Fix LVM-VDO statistics tests (#2023880,#2025483)
- Fix GError ownership (#1999149)
* Mon Oct 25 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-8
- CVE-2021-3802: Harden the default mount options for ext filesystems (#2004422)
* Fri Apr 23 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-7
- Do not build udisks2-zram (#1923078)
- Fix Drive.ATA test failures (#1926827)
* Tue Jan 26 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-6
- Rebuilt for new docbook-style-xsl (#1853153)
* Mon Nov 16 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-5
- Fix loop device setup
* Tue Nov 10 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-4
- Fix Drive.Ata tests with system SAS drives (#1855785)
- Force D-Bus interfaces flush (#1845973)
* Mon Jun 22 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-3
- Fix the UdisksLVMVDOTest.test_resize_physical test (#1845435)
* Mon Jun 22 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-2
- Fix block tear-down functionality (#1843454)
- Fix libblockdev requires
* Tue May 26 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-1
- Rebase to 2.9.0 (#1824147)
* Fri Jun 14 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.3-2
- Minor test fixes
- Fix potential NULL dereference in UDisksLinuxPartition
* Thu Jun 13 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.3-1
- Rebased to upstream 2.8.3 release (#1685210)
- Fix leaking filedescriptors (#1614774)
- Fix udisksctl pager scrolling (#1662336)
- Fix LVM2 plugin CreateSnapshot() error (#1668291)
- Add ISCSI plugin GetInitiatorNameRaw() method (#1710257)
* Mon Oct 08 2018 Vojtech Trefny <vtrefny@redhat.com> - 2.8.0-2
- Fix string format vulnerability
Resolves: rhbz#1632831
* Mon Aug 13 2018 Tomas Bzatek <tbzatek@redhat.com> - 2.8.0-1
- Version 2.8.0
* Tue Jul 24 2018 Adam Williamson <awilliam@redhat.com> - 2.7.7-3
- Rebuild for new libconfig
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Wed Jul 04 2018 Vojtech Trefny <vtrefny@redhat.com> - 2.7.7-1
- Version 2.7.7
* Thu Feb 08 2018 Vojtech Trefny <vtrefny@redhat.com> - 2.7.6-1
- Version 2.7.6
* Fri Feb 02 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.7.5-2
- Switch to %%ldconfig_scriptlets
* Mon Dec 04 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.5-1
- Version 2.7.5
* Wed Nov 01 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.4-1
- Version 2.7.4
* Thu Aug 31 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.3-1
- Version 2.7.3
* Thu Aug 03 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.2-1
- Version 2.7.2
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Mon Jul 03 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.1-1
- Version 2.7.1
* Tue Jun 20 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.0-3
- Do not try to remove changed_blacklist hash table in finalize
* Mon Jun 19 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.0-2
- Fix how UDisksClient filters property changes
* Fri Jun 02 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.7.0-1
- Version 2.7.0
* Mon May 15 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.6.5-1
- Version 2.6.5
* Tue Mar 14 2017 Vojtech Trefny <vtrefny@redhat.com> - 2.6.4-1
- Version 2.6.4
* Mon Nov 14 2016 Tomas Smetana <tsmetana@redhat.com> - 2.6.3-1
- Version 2.6.3
* Thu Jun 16 2016 Tomas Smetana <tsmetana@redhat.com> - 2.6.2-1
- Version 2.6.2; aimed to replace udisks2
* Wed Apr 27 2016 Peter Hatina <phatina@redhat.com> - 2.6.0-3
- Add support for libblockdev-part plugin which replaces
parted calls
* Wed Mar 16 2016 Peter Hatina <phatina@redhat.com> - 2.6.0-2
- Fix permissions set for storaged_lsm.conf so it is readable only by root
* Mon Mar 14 2016 Peter Hatina <phatina@redhat.com> - 2.6.0-1
- Upgrade to 2.6.0
* Wed Feb 10 2016 Peter Hatina <phatina@redhat.com> - 2.5.0-3
- Package template zram-setup@.service file
* Wed Feb 10 2016 Peter Hatina <phatina@redhat.com> - 2.5.0-2
- Add udisksd configuration file and its man page
* Thu Jan 28 2016 Peter Hatina <phatina@redhat.com> - 2.5.0-1
- UDisks2 drop-in replacement
* Thu Jan 21 2016 Peter Hatina <phatina@redhat.com> - 2.4.0-3
- Redesign subpackage dependencies
- Make GTK documentation generation configurable
* Wed Jan 20 2016 Peter Hatina <phatina@redhat.com> - 2.4.0-2
- Reload udev rules and trigger events when installed
* Wed Jan 13 2016 Peter Hatina <phatina@redhat.com> - 2.4.0-1
- Upgrade to 2.4.0
* Wed Sep 30 2015 Peter Hatina <phatina@redhat.com> - 2.3.0-2
- Add Fedora/RHEL package configuration options
* Mon Sep 14 2015 Peter Hatina <phatina@redhat.com> - 2.3.0-1
- Change BuildRequires from pkgconfig macro to -devel packages
- Upgrade to 2.3.0
* Mon Aug 24 2015 Peter Hatina <phatina@redhat.com> - 2.2.0-1
- Upgrade to 2.2.0
* Fri Jul 3 2015 Peter Hatina <phatina@redhat.com> - 2.1.1-1
- Upgrade to 2.1.1
* Wed Jun 24 2015 Peter Hatina <phatina@redhat.com> - 2.1.0-4
- Add Requires for storaged modules
* Wed Jun 24 2015 Peter Hatina <phatina@redhat.com> - 2.1.0-3
- Changes for EPEL-7
- Lower systemd required version to 208
- Rewrite BuildRequires for systemd-devel
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.1.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Thu Jun 11 2015 Peter Hatina <phatina@redhat.com> - 2.1.0-1
- Update to upstream 2.1.0
* Thu Apr 02 2015 Peter Hatina <phatina@redhat.com> - 2.0.0-1
- Rebase to the new Storaged implementation
- Upstream: https://storaged.org
* Tue Sep 16 2014 Stef Walter <stefw@redhat.com> - 0.3.1-1
- Update to upstream 0.3.1
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Tue Apr 08 2014 Patrick Uiterwijk <puiterwijk@redhat.com> - 0.3.0-1
- Update to upstream 0.3.0
* Fri Jan 31 2014 Patrick Uiterwijk <puiterwijk@redhat.com> - 0.2.0-1
- Update to upstream 0.2.0
* Thu Jan 16 2014 Patrick Uiterwijk <puiterwijk@redhat.com> - 0.1.0-2
- Removed double systemd BuildRequire
- Rewritten summary and description
* Sun Jan 12 2014 Patrick Uiterwijk <puiterwijk@redhat.com> - 0.1.0-1
- Rename from udisks2-lvm