diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py index 18cb0b6d..1438e354 100644 --- a/tuned/plugins/plugin_disk.py +++ b/tuned/plugins/plugin_disk.py @@ -101,20 +101,18 @@ def _init_devices(self): self._use_hdparm = True self._free_devices = set() self._hdparm_apm_devices = set() - self._no_hdparm_apm_devices = set() for device in self._hardware_inventory.get_devices("block"): if self._device_is_supported(device): self._free_devices.add(device.sys_name) + if self._use_hdparm and self._is_hdparm_apm_supported(device.sys_name): + self._hdparm_apm_devices.add(device.sys_name) + self._assigned_devices = set() def _get_device_objects(self, devices): return [self._hardware_inventory.get_device("block", x) for x in devices] def _is_hdparm_apm_supported(self, device): - if not self._use_hdparm or device in self._no_hdparm_apm_devices: - return False - if device in self._hdparm_apm_devices: - return True (rc, out, err_msg) = self._cmd.execute(["hdparm", "-C", "/dev/%s" % device], \ no_errors = [errno.ENOENT], return_err=True) if rc == -errno.ENOENT: @@ -124,13 +122,10 @@ def _is_hdparm_apm_supported(self, device): elif rc: log.info("Device '%s' not supported by hdparm" % device) log.debug("(rc: %s, msg: '%s')" % (rc, err_msg)) - self._no_hdparm_apm_devices.add(device) return False elif "unknown" in out: log.info("Driver for device '%s' does not support apm command" % device) - self._no_hdparm_apm_devices.add(device) return False - self._hdparm_apm_devices.add(device) return True @classmethod @@ -237,7 +232,7 @@ def _drive_spinning(self, device): return not "standby" in out and not "sleeping" in out def _instance_update_dynamic(self, instance, device): - if not self._is_hdparm_apm_supported(device): + if not device in self._hdparm_apm_devices: return load = instance._load_monitor.get_device_load(device) if load is None: @@ -320,7 +315,7 @@ def _instance_apply_dynamic(self, instance, device): # At the moment we support dynamic tuning just for devices compatible with hdparm apm commands # If in future will be added new functionality not connected to this command, # it is needed to change it here - if not self._is_hdparm_apm_supported(device): + if device not in self._hdparm_apm_devices: log.info("There is no dynamic tuning available for device '%s' at time" % device) else: super(DiskPlugin, self)._instance_apply_dynamic(instance, device) @@ -355,7 +350,7 @@ def _get_elevator(self, device, ignore_missing=False): @command_set("apm", per_device=True) def _set_apm(self, value, device, sim, remove): - if not self._is_hdparm_apm_supported(device): + if device not in self._hdparm_apm_devices: if not sim: log.info("apm option is not supported for device '%s'" % device) return None @@ -371,7 +366,7 @@ def _set_apm(self, value, device, sim, remove): @command_get("apm") def _get_apm(self, device, ignore_missing=False): - if not self._is_hdparm_apm_supported(device): + if device not in self._hdparm_apm_devices: if not ignore_missing: log.info("apm option is not supported for device '%s'" % device) return None @@ -395,7 +390,7 @@ def _get_apm(self, device, ignore_missing=False): @command_set("spindown", per_device=True) def _set_spindown(self, value, device, sim, remove): - if not self._is_hdparm_apm_supported(device): + if device not in self._hdparm_apm_devices: if not sim: log.info("spindown option is not supported for device '%s'" % device) return None @@ -411,7 +406,7 @@ def _set_spindown(self, value, device, sim, remove): @command_get("spindown") def _get_spindown(self, device, ignore_missing=False): - if not self._is_hdparm_apm_supported(device): + if device not in self._hdparm_apm_devices: if not ignore_missing: log.info("spindown option is not supported for device '%s'" % device) return None