From f84d2e311d8bcc0506228cdbc4e06cb6b4554abe Mon Sep 17 00:00:00 2001 From: deepssin Date: Wed, 24 Dec 2025 10:37:34 +0000 Subject: [PATCH] misc: add NVMe device support to get_scratch_devices() When /scratch_devs file is missing, the function only detected traditional SCSI/VirtIO devices (/dev/sd? and /dev/vd?), causing failures on machines using NVMe devices. This change: - Adds NVMe device detection (/dev/nvme*n1) as fallback - Filters out nvme0n1 as root device (similar to vda) - Fixes iteration bug when removing root devices - Filters out empty strings from device list Signed-off-by: deepssin --- teuthology/misc.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/teuthology/misc.py b/teuthology/misc.py index d4c619cc5..a245b06bf 100644 --- a/teuthology/misc.py +++ b/teuthology/misc.py @@ -783,13 +783,26 @@ def get_scratch_devices(remote): file_data = remote.read_file("/scratch_devs").decode() devs = file_data.split() except Exception: - devs = remote.sh('ls /dev/[sv]d?').strip().split('\n') + try: + devs = remote.sh('ls /dev/[sv]d? /dev/nvme*n1').strip().split('\n') + except Exception as e: + log.debug("Failed to auto-detect scratch devices: %s", e) - # Remove root device (vm guests) from the disk list + # Remove empty strings and root device (vm guests) from the disk list + has_vda = any(dev.split('/')[-1] == 'vda' for dev in devs if dev) + filtered_devs = [] for dev in devs: - if 'vda' in dev: - devs.remove(dev) + if not dev: + continue + dev_basename = dev.split('/')[-1] + if dev_basename == 'vda': log.warning("Removing root device: %s from device list" % dev) + continue + if dev_basename == 'nvme0n1' and not has_vda: + log.warning("Removing root device: %s from device list" % dev) + continue + filtered_devs.append(dev) + devs = filtered_devs log.debug('devs={d}'.format(d=devs))