--- /dev/null
+From: Shaohua Li <shaohua.li@intel.com>
+Subject: fix for bay in a dock station
+Patch-mainline: submitted 2008-08-28
+References: fate#304731,bnc#401740
+
+an ATA bay can be in a dock and itself can be ejected separately. The
+patch handles such eject bay. Found by Holger.
+
+Signed-off-by: Shaohua Li <shaohua.li@intel.com>
+Signed-off-by: Holger Macht <hmacht@suse.de>
+---
+
+---
+ drivers/acpi/dock.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+--- a/drivers/acpi/dock.c
++++ b/drivers/acpi/dock.c
+@@ -609,6 +609,7 @@ register_hotplug_dock_device(acpi_handle
+ {
+ struct dock_dependent_device *dd;
+ struct dock_station *dock_station;
++ int ret = -EINVAL;
+
+ if (!dock_station_count)
+ return -ENODEV;
+@@ -618,16 +619,21 @@ register_hotplug_dock_device(acpi_handle
+ * this would include the dock station itself
+ */
+ list_for_each_entry(dock_station, &dock_stations, sibiling) {
++ /*
++ * An ATA bay can be in a dock and itself can be ejected
++ * seperately, so there are two 'dock stations' which need the
++ * ops
++ */
+ dd = find_dock_dependent_device(dock_station, handle);
+ if (dd) {
+ dd->ops = ops;
+ dd->context = context;
+ dock_add_hotplug_device(dock_station, dd);
+- return 0;
++ ret = 0;
+ }
+ }
+
+- return -EINVAL;
++ return ret;
+ }
+
+ EXPORT_SYMBOL_GPL(register_hotplug_dock_device);
+@@ -1076,8 +1082,8 @@ find_dock(acpi_handle handle, u32 lvl, v
+ static acpi_status
+ find_bay(acpi_handle handle, u32 lvl, void *context, void **rv)
+ {
+- /* If bay is in a dock, it's already handled */
+- if (is_ejectable_bay(handle) && !is_dock_device(handle))
++ /* If bay is a dock, it's already handled */
++ if (is_ejectable_bay(handle) && !is_dock(handle))
+ dock_add(handle);
+ return AE_OK;
+ }