{
        struct btrfs_fs_info *info = trans->fs_info;
        struct btrfs_fs_devices *fs_devices = info->fs_devices;
-       struct list_head *cur;
+       struct btrfs_device *device;
        struct map_lookup *map = NULL;
        struct extent_map_tree *em_tree;
        struct extent_map *em;
        if (!devices_info)
                return -ENOMEM;
 
-       cur = fs_devices->alloc_list.next;
-
        /*
         * in the first pass through the devices list, we gather information
         * about the available holes on each device.
         */
        ndevs = 0;
-       while (cur != &fs_devices->alloc_list) {
-               struct btrfs_device *device;
+       list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) {
                u64 max_avail;
                u64 dev_offset;
 
-               device = list_entry(cur, struct btrfs_device, dev_alloc_list);
-
-               cur = cur->next;
-
                if (!device->writeable) {
                        WARN(1, KERN_ERR
                               "BTRFS: read-only device in alloc_list\n");