Just checking the state of container is not enough to confirm that
the whole container is offlined. Kernel should checks all children's
offline state as the logic in acpi_container_offline().

Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Jiri Kosina <[email protected]>
Signed-off-by: "Lee, Chun-Yi" <[email protected]>
---
 drivers/acpi/scan.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 1926918..f08ca31 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -260,13 +260,15 @@ static int acpi_scan_try_to_offline(struct acpi_device 
*device)
 static int acpi_scan_hot_remove(struct acpi_device *device)
 {
        acpi_handle handle = device->handle;
+       struct acpi_device *child;
        unsigned long long sta;
        acpi_status status;
 
        if (device->handler && device->handler->hotplug.demand_offline
            && !acpi_force_hot_remove) {
-               if (!acpi_scan_is_offline(device, true))
-                       return -EBUSY;
+               list_for_each_entry(child, &device->children, node)
+                       if (!acpi_scan_is_offline(child, false))
+                               return -EBUSY;
        } else {
                int error = acpi_scan_try_to_offline(device);
                if (error)
-- 
2.10.2

Reply via email to