free_irq(hwif->irq, hwgroup);
 
        spin_lock_irq(&ide_lock);
-       /*
-        * Note that we only release the standard ports,
-        * and do not even try to handle any extra ports
-        * allocated for weird IDE interface chipsets.
-        */
-       ide_hwif_release_regions(hwif);
-
        /*
         * Remove us from the hwgroup, and free
         * the hwgroup if we were the only member
                hwif->extra_ports = 0;
        }
 
+       /*
+        * Note that we only release the standard ports,
+        * and do not even try to handle any extra ports
+        * allocated for weird IDE interface chipsets.
+        */
+       ide_hwif_release_regions(hwif);
+
        /* copy original settings */
        tmp_hwif = *hwif;