Re: [PATCH] x86/platform/intel/iosf_mbi: Fix error handling in iosf_mbi_init()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




在 2022/11/15 16:26, Andy Shevchenko 写道:
On Tue, Nov 15, 2022 at 9:38 AM Yuan Can <yuancan@xxxxxxxxxx> wrote:
A problem about modprobe iosf_mbi failed is triggered with the following
log given:

  debugfs: Directory 'iosf_sb' with parent '/' already present!

The reason is that iosf_mbi_init() returns pci_register_driver()
directly without checking its return value, if pci_register_driver()
failed, it returns without removing debugfs, resulting the debugfs of
iosf_sb can never be created later.

  iosf_mbi_init()
    iosf_mbi_dbg_init() # create debugfs
    pci_register_driver()
      driver_register()
        bus_add_driver()
          priv = kzalloc(...) # OOM happened
    # return without remove debugfs and destroy workqueue

Fix by remove debugfs and iosf_mbi_pm_qos when pci_register_driver()
removing

returns error.
  static int __init iosf_mbi_init(void)
  {
+       int ret;
+
         iosf_debugfs_init();

         cpu_latency_qos_add_request(&iosf_mbi_pm_qos, PM_QOS_DEFAULT_VALUE);

-       return pci_register_driver(&iosf_mbi_pci_driver);
+       ret = pci_register_driver(&iosf_mbi_pci_driver);
+       if (ret) {
+               cpu_latency_qos_remove_request(&iosf_mbi_pm_qos);
+               iosf_debugfs_remove();
+       }
+
+       return ret;
  }
Can we rewrite it as

   if (ret)
     goto err_remove;

   return 0;

err_remove:
   ...
   return ret;

?
Thanks for these suggestions! will be changed in the next version.

--
Best regards,
Yuan Can




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux