From c7228cd1ced181e5c67eb80393bbe7be20d54abb Mon Sep 17 00:00:00 2001 From: Arye Yurkovsky Date: Sun, 7 Dec 2025 09:58:57 +0200 Subject: [PATCH] daemon: lvm_utils: Handle stat errors lvm returns logical volumes even if they're broken, for instance when a physical volume is missing in their volume group. In such cases, stat would fail to resolve the provided path. Handle such cases by skipping such failures when finding the matching lvm device. --- daemon/lvm_utils.ml | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/daemon/lvm_utils.ml b/daemon/lvm_utils.ml index e4addde18..bd075b18f 100644 --- a/daemon/lvm_utils.ml +++ b/daemon/lvm_utils.ml @@ -34,15 +34,26 @@ open Utils * resolved. *) let lv_canonical device = - let stat1 = stat device in - let lvs = Lvm.lvs () in - try - Some ( - List.find ( - fun lv -> - let stat2 = stat lv in - stat1.st_rdev = stat2.st_rdev - ) lvs - ) - with - | Not_found -> None + let stat1 = + try Some (stat device) + with Unix_error _ -> None in + match stat1 with + | None -> None + | Some stat1 -> + ( + let lvs = Lvm.lvs () in + try + Some ( + List.find ( + fun lv -> + let stat2 = + try Some (stat lv) + with Unix_error _ -> None in + match stat2 with + | Some stat2 -> stat1.st_rdev = stat2.st_rdev + | None -> false + ) lvs + ) + with + | Not_found -> None + )