diff --git a/apps/glusterfs/allocator_simple_ring.go b/apps/glusterfs/allocator_simple_ring.go
index 51abe83b4218dea274e65cc3ce7f8866138a37e9..f2d25238d3745c3f71db6e3c4c31ce3c12a2a647 100644
--- a/apps/glusterfs/allocator_simple_ring.go
+++ b/apps/glusterfs/allocator_simple_ring.go
@@ -134,20 +134,26 @@ func (s *SimpleAllocatorRing) Rebalance() {
 	var device *SimpleDevice
 	for i := 0; len(zones) != 0; i++ {
 		zone := i % len(zones)
-		node := i % len(zones[zone])
+		nodes := zones[zone]
+		node := i % len(nodes)
+		devices := nodes[node]
 
 		// pop device
-		device, zones[zone][node] = zones[zone][node][len(zones[zone][node])-1], zones[zone][node][:len(zones[zone][node])-1]
+		device = devices[len(devices)-1]
+		devices = devices[:len(devices)-1]
+		nodes[node] = devices
+
 		list = append(list, *device)
 
-		// delete node
-		if len(zones[zone][node]) == 0 {
-			zones[zone] = append(zones[zone][:node], zones[zone][node+1:]...)
+		if len(devices) == 0 {
+			// delete node
+			nodes = append(nodes[:node], nodes[node+1:]...)
+			zones[zone] = nodes
+		}
 
+		if len(nodes) == 0 {
 			// delete zone
-			if len(zones[zone]) == 0 {
-				zones = append(zones[:zone], zones[zone+1:]...)
-			}
+			zones = append(zones[:zone], zones[zone+1:]...)
 		}
 	}