Avoid using unnecessary udev.settle calls (#1876162)
This commit is contained in:
parent
9dc878a453
commit
eaa02fcd8d
151
0001-Avoid-using-unnecessary-udev-settle-calls.patch
Normal file
151
0001-Avoid-using-unnecessary-udev-settle-calls.patch
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
From dae3375e720fe67870fe92e0aecd9638726c4d43 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||||
|
Date: Wed, 9 Sep 2020 15:26:39 +0200
|
||||||
|
Subject: [PATCH 1/2] Try to not use udev.resolve_devspec when querying
|
||||||
|
MountsCache
|
||||||
|
|
||||||
|
udev.resolve_devspec is slow and uses udev.settle, we should avoid
|
||||||
|
using it if possible when getting system mountpoints.
|
||||||
|
---
|
||||||
|
blivet/mounts.py | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/blivet/mounts.py b/blivet/mounts.py
|
||||||
|
index 7ce41d77..ef2def89 100644
|
||||||
|
--- a/blivet/mounts.py
|
||||||
|
+++ b/blivet/mounts.py
|
||||||
|
@@ -27,6 +27,8 @@
|
||||||
|
import logging
|
||||||
|
log = logging.getLogger("blivet")
|
||||||
|
|
||||||
|
+import os
|
||||||
|
+
|
||||||
|
|
||||||
|
class _MountinfoCache(object):
|
||||||
|
|
||||||
|
@@ -113,6 +115,12 @@ def get_mountpoints(self, devspec, subvolspec=None):
|
||||||
|
|
||||||
|
# devspec == None means "get 'nodev' mount points"
|
||||||
|
if devspec not in (None, "tmpfs"):
|
||||||
|
+ if devspec.startswith("/dev"):
|
||||||
|
+ # try to avoid using resolve_devspec if possible
|
||||||
|
+ name = os.path.realpath(devspec).split("/")[-1]
|
||||||
|
+ if (name, subvolspec) in self.mountpoints.keys():
|
||||||
|
+ return self.mountpoints[(name, subvolspec)]
|
||||||
|
+
|
||||||
|
# use the canonical device path (if available)
|
||||||
|
canon_devspec = resolve_devspec(devspec, sysname=True)
|
||||||
|
if canon_devspec is not None:
|
||||||
|
|
||||||
|
From ae32d008e7425610d437c72bb284664ace7ce5b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||||
|
Date: Wed, 9 Sep 2020 15:27:57 +0200
|
||||||
|
Subject: [PATCH 2/2] Do not run udev.settle in StorageDevice._pre_teardown
|
||||||
|
|
||||||
|
We currently run udev.settle for every _pre_teardown call even if
|
||||||
|
there is no change or format teardown. This commit moves the
|
||||||
|
udev.settle call to format classes so it is called only when
|
||||||
|
format.teardown calls in _pre_teardown change the format.
|
||||||
|
---
|
||||||
|
blivet/devices/storage.py | 1 -
|
||||||
|
blivet/formats/fs.py | 2 ++
|
||||||
|
blivet/formats/luks.py | 5 +++++
|
||||||
|
blivet/formats/swap.py | 3 +++
|
||||||
|
tests/devices_test/device_methods_test.py | 2 --
|
||||||
|
5 files changed, 10 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/blivet/devices/storage.py b/blivet/devices/storage.py
|
||||||
|
index d47affca..bde0b7d6 100644
|
||||||
|
--- a/blivet/devices/storage.py
|
||||||
|
+++ b/blivet/devices/storage.py
|
||||||
|
@@ -425,7 +425,6 @@ def _pre_teardown(self, recursive=None):
|
||||||
|
self.original_format.teardown()
|
||||||
|
if self.format.exists:
|
||||||
|
self.format.teardown()
|
||||||
|
- udev.settle()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _teardown(self, recursive=None):
|
||||||
|
diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
|
||||||
|
index 9c14649e..d351dee1 100644
|
||||||
|
--- a/blivet/formats/fs.py
|
||||||
|
+++ b/blivet/formats/fs.py
|
||||||
|
@@ -614,6 +614,8 @@ def _teardown(self, **kwargs):
|
||||||
|
if mountpoint == self._chrooted_mountpoint:
|
||||||
|
self._chrooted_mountpoint = None
|
||||||
|
|
||||||
|
+ udev.settle()
|
||||||
|
+
|
||||||
|
def read_label(self):
|
||||||
|
"""Read this filesystem's label.
|
||||||
|
|
||||||
|
diff --git a/blivet/formats/luks.py b/blivet/formats/luks.py
|
||||||
|
index de9f1d32..0d036588 100644
|
||||||
|
--- a/blivet/formats/luks.py
|
||||||
|
+++ b/blivet/formats/luks.py
|
||||||
|
@@ -36,6 +36,7 @@
|
||||||
|
from ..tasks import availability, lukstasks
|
||||||
|
from ..size import Size, KiB
|
||||||
|
from ..static_data import luks_data
|
||||||
|
+from .. import udev
|
||||||
|
|
||||||
|
import logging
|
||||||
|
log = logging.getLogger("blivet")
|
||||||
|
@@ -275,6 +276,8 @@ def _teardown(self, **kwargs):
|
||||||
|
log.debug("unmapping %s", self.map_name)
|
||||||
|
blockdev.crypto.luks_close(self.map_name)
|
||||||
|
|
||||||
|
+ udev.settle()
|
||||||
|
+
|
||||||
|
def _pre_resize(self):
|
||||||
|
if self.luks_version == "luks2" and not self.has_key:
|
||||||
|
raise LUKSError("Passphrase or key needs to be set before resizing LUKS2 format.")
|
||||||
|
@@ -442,5 +445,7 @@ def _teardown(self, **kwargs):
|
||||||
|
# for all devices supported by cryptsetup
|
||||||
|
blockdev.crypto.luks_close(self.map_name)
|
||||||
|
|
||||||
|
+ udev.settle()
|
||||||
|
+
|
||||||
|
|
||||||
|
register_device_format(Integrity)
|
||||||
|
diff --git a/blivet/formats/swap.py b/blivet/formats/swap.py
|
||||||
|
index 3cc59138..2e4b07df 100644
|
||||||
|
--- a/blivet/formats/swap.py
|
||||||
|
+++ b/blivet/formats/swap.py
|
||||||
|
@@ -29,6 +29,7 @@
|
||||||
|
from ..tasks import fsuuid
|
||||||
|
from . import DeviceFormat, register_device_format
|
||||||
|
from ..size import Size
|
||||||
|
+from .. import udev
|
||||||
|
|
||||||
|
import gi
|
||||||
|
gi.require_version("BlockDev", "2.0")
|
||||||
|
@@ -206,6 +207,8 @@ def _teardown(self, **kwargs):
|
||||||
|
type=self.type, status=self.status)
|
||||||
|
blockdev.swap.swapoff(self.device)
|
||||||
|
|
||||||
|
+ udev.settle()
|
||||||
|
+
|
||||||
|
def _create(self, **kwargs):
|
||||||
|
log_method_call(self, device=self.device,
|
||||||
|
type=self.type, status=self.status)
|
||||||
|
diff --git a/tests/devices_test/device_methods_test.py b/tests/devices_test/device_methods_test.py
|
||||||
|
index e6718121..f00509be 100644
|
||||||
|
--- a/tests/devices_test/device_methods_test.py
|
||||||
|
+++ b/tests/devices_test/device_methods_test.py
|
||||||
|
@@ -161,7 +161,6 @@ def _destroy():
|
||||||
|
|
||||||
|
self.assertFalse(self.device.exists)
|
||||||
|
self.assertEqual(self.device.update_sysfs_path.called, self.destroy_updates_sysfs_path)
|
||||||
|
- self.assertEqual(self.patches["udev"].settle.called, self.destroy_calls_udev_settle)
|
||||||
|
self.patches["udev"].reset_mock()
|
||||||
|
self.device.update_sysfs_path.reset_mock()
|
||||||
|
|
||||||
|
@@ -228,7 +227,6 @@ def test_teardown(self):
|
||||||
|
self.device.teardown()
|
||||||
|
self.assertTrue(self.teardown_method_mock.called)
|
||||||
|
|
||||||
|
- self.assertEqual(self.patches["udev"].settle.called, self.teardown_calls_udev_settle)
|
||||||
|
self.assertEqual(self.device.update_sysfs_path.called, self.teardown_updates_sysfs_path)
|
||||||
|
self.patches["udev"].reset_mock()
|
||||||
|
self.device.update_sysfs_path.reset_mock()
|
@ -23,13 +23,14 @@ Version: 3.3.0
|
|||||||
|
|
||||||
#%%global prerelease .b2
|
#%%global prerelease .b2
|
||||||
# prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2
|
# prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2
|
||||||
Release: 1%{?prerelease}%{?dist}
|
Release: 2%{?prerelease}%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
%global realname blivet
|
%global realname blivet
|
||||||
%global realversion %{version}%{?prerelease}
|
%global realversion %{version}%{?prerelease}
|
||||||
Source0: http://github.com/storaged-project/blivet/archive/%{realname}-%{realversion}.tar.gz
|
Source0: http://github.com/storaged-project/blivet/archive/%{realname}-%{realversion}.tar.gz
|
||||||
Source1: http://github.com/storaged-project/blivet/archive/%{realname}-%{realversion}-tests.tar.gz
|
Source1: http://github.com/storaged-project/blivet/archive/%{realname}-%{realversion}-tests.tar.gz
|
||||||
|
Patch0: 0001-Avoid-using-unnecessary-udev-settle-calls.patch
|
||||||
|
|
||||||
# Versions of required components (done so we make sure the buildrequires
|
# Versions of required components (done so we make sure the buildrequires
|
||||||
# match the requires versions of things).
|
# match the requires versions of things).
|
||||||
@ -191,6 +192,9 @@ configuration.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Sep 16 2020 Vojtech Trefny <vtrefny@redhat.com> - 3.3.0-2
|
||||||
|
- Avoid using unnecessary udev.settle calls (#1876162)
|
||||||
|
|
||||||
* Thu Aug 20 2020 Vojtech Trefny <vtrefny@redhat.com> - 3.3.0-1
|
* Thu Aug 20 2020 Vojtech Trefny <vtrefny@redhat.com> - 3.3.0-1
|
||||||
- Account for pmspare grow when adjusting thinpool metadata size (vtrefny)
|
- Account for pmspare grow when adjusting thinpool metadata size (vtrefny)
|
||||||
- Fix ignoring disk devices with parents or children (vtrefny)
|
- Fix ignoring disk devices with parents or children (vtrefny)
|
||||||
|
Loading…
Reference in New Issue
Block a user