From 4874792bc7748cfb944c255af45888f9e85777fa Mon Sep 17 00:00:00 2001 From: Alexander Indenbaum Date: Thu, 31 Jul 2025 18:33:36 +0300 Subject: [PATCH] nvmeof: create /dev/dsa if DSA acceleration is enabled and the device doesn't exist Tracker: https://tracker.ceph.com/issues/72508 Signed-off-by: Alexander Indenbaum (cherry picked from commit 93ec459ab784b8a3818a9ca50d67f1e9f8a497b7) --- src/cephadm/cephadmlib/daemons/nvmeof.py | 15 +++++++++++++++ src/pybind/mgr/cephadm/tests/test_services.py | 5 ++--- src/python-common/ceph/deployment/service_spec.py | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cephadm/cephadmlib/daemons/nvmeof.py b/src/cephadm/cephadmlib/daemons/nvmeof.py index db337a2be98..761211087c8 100644 --- a/src/cephadm/cephadmlib/daemons/nvmeof.py +++ b/src/cephadm/cephadmlib/daemons/nvmeof.py @@ -202,6 +202,21 @@ class CephNvmeof(ContainerDaemonForm): # populate files from the config-json populate_files(data_dir, self.files, uid, gid) + # create /dev/dsa if DSA acceleration is enabled and the device doesn't exist + if ( + 'enable_dsa_acceleration' in self.files + and self.files['enable_dsa_acceleration'] == 'True' + ): + if not os.path.exists('/dev/dsa'): + try: + # create a /dev/dsa as a directory to avoid podman start failure + os.mkdir('/dev/dsa', mode=0o755) + logger.info( + 'Created /dev/dsa directory, device file was not found' + ) + except Exception: + logger.exception('Failed to create /dev/dsa') + @staticmethod def configfs_mount_umount(data_dir, mount=True): # type: (str, bool) -> List[str] diff --git a/src/pybind/mgr/cephadm/tests/test_services.py b/src/pybind/mgr/cephadm/tests/test_services.py index bf1bc5d7bd2..443ed5126e3 100644 --- a/src/pybind/mgr/cephadm/tests/test_services.py +++ b/src/pybind/mgr/cephadm/tests/test_services.py @@ -432,7 +432,7 @@ protocol_log_level = WARNING conn_retries = 10 transports = tcp transport_tcp_options = {{"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}} -enable_dsa_acceleration = True +enable_dsa_acceleration = False tgt_cmd_extra_args = {tgt_cmd_extra_args} qos_timeslice_in_usecs = 0 notifications_interval = 60 @@ -472,8 +472,7 @@ timeout = 1.0\n""" "config": "", "keyring": "[client.nvmeof.testpool.mygroup.test.qwert]\nkey = None\n", "files": { - "ceph-nvmeof.conf": nvmeof_gateway_conf, - "enable_dsa_acceleration": "True" + "ceph-nvmeof.conf": nvmeof_gateway_conf } } }), diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index f0ca82fc990..34b72ea88c4 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -1439,7 +1439,7 @@ class NvmeofServiceSpec(ServiceSpec): transports: Optional[str] = 'tcp', transport_tcp_options: Optional[Dict[str, int]] = {"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}, - enable_dsa_acceleration: bool = True, + enable_dsa_acceleration: bool = False, tgt_cmd_extra_args: Optional[str] = None, iobuf_options: Optional[Dict[str, int]] = None, qos_timeslice_in_usecs: Optional[int] = 0, -- 2.39.5