hwgroup->hwif->next = hwif;
                spin_unlock_irq(&ide_lock);
        } else {
-               hwgroup = kmalloc_node(sizeof(ide_hwgroup_t),
-                                       GFP_KERNEL | __GFP_ZERO,
-                                       hwif_to_node(hwif->drives[0].hwif));
-               if (!hwgroup)
-                       goto out_up;
+               hwgroup = kmalloc_node(sizeof(*hwgroup), GFP_KERNEL|__GFP_ZERO,
+                                      hwif_to_node(hwif));
+               if (hwgroup == NULL)
+                       goto out_up;
 
                hwif->hwgroup = hwgroup;
+               hwgroup->hwif = hwif->next = hwif;
 
-               hwgroup->hwif     = hwif->next = hwif;
-               hwgroup->rq       = NULL;
-               hwgroup->handler  = NULL;
-               hwgroup->drive    = NULL;
-               hwgroup->busy     = 0;
                init_timer(&hwgroup->timer);
                hwgroup->timer.function = &ide_timer_expiry;
                hwgroup->timer.data = (unsigned long) hwgroup;