Blob Blame History Raw
From fed62af06eb1584adbacd821dfe79c2df52c6aa4 Mon Sep 17 00:00:00 2001
From: Vojtech Trefny <vtrefny@redhat.com>
Date: Wed, 2 Nov 2022 12:14:28 +0100
Subject: [PATCH] Catch BlockDevNotImplementedError for btrfs plugin calls

This is a workaround for RHEL where the btrfs plugin is not
available and where we might still try to call some libblockdev
functions to gather information about preexisting btrfs devices.
---
 blivet/devices/btrfs.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/blivet/devices/btrfs.py b/blivet/devices/btrfs.py
index 0e029715..1ae6a04d 100644
--- a/blivet/devices/btrfs.py
+++ b/blivet/devices/btrfs.py
@@ -362,7 +362,7 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice, RaidDevice):
         try:
             subvols = blockdev.btrfs.list_subvolumes(mountpoint,
                                                      snapshots_only=snapshots_only)
-        except blockdev.BtrfsError as e:
+        except (blockdev.BtrfsError, blockdev.BlockDevNotImplementedError) as e:
             log.debug("failed to list subvolumes: %s", e)
         else:
             self._get_default_subvolume_id()
@@ -400,7 +400,7 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice, RaidDevice):
         with self._do_temp_mount() as mountpoint:
             try:
                 subvolid = blockdev.btrfs.get_default_subvolume_id(mountpoint)
-            except blockdev.BtrfsError as e:
+            except (blockdev.BtrfsError, blockdev.BlockDevNotImplementedError) as e:
                 log.debug("failed to get default subvolume id: %s", e)
 
         self._default_subvolume_id = subvolid
@@ -413,7 +413,7 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice, RaidDevice):
         with self._do_temp_mount() as mountpoint:
             try:
                 blockdev.btrfs.set_default_subvolume(mountpoint, vol_id)
-            except blockdev.BtrfsError as e:
+            except (blockdev.BtrfsError, blockdev.BlockDevNotImplementedError) as e:
                 log.error("failed to set new default subvolume id (%s): %s",
                           vol_id, e)
                 # The only time we set a new default subvolume is so we can remove
@@ -471,7 +471,7 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice, RaidDevice):
         if not self.format.vol_uuid:
             try:
                 bd_info = blockdev.btrfs.filesystem_info(self.parents[0].path)
-            except blockdev.BtrfsError as e:
+            except (blockdev.BtrfsError, blockdev.BlockDevNotImplementedError) as e:
                 log.error("failed to get filesystem info for new btrfs volume %s", e)
             else:
                 self.format.vol_uuid = bd_info.uuid
-- 
2.38.1