list_first_entry is essentially a wrapper over cotnainer_of. The latter
can never return null even if it's working on inconsistent list since it
will either crash or return some offset in the wrong struct.
Additionally, for the dirty_bgs list the iteration is done under
dirty_bgs_lock which ensures consistency of the list.
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
                cache = list_first_entry(&cur_trans->dirty_bgs,
                                         struct btrfs_block_group_cache,
                                         dirty_list);
-               if (!cache) {
-                       btrfs_err(fs_info, "orphan block group dirty_bgs list");
-                       spin_unlock(&cur_trans->dirty_bgs_lock);
-                       return;
-               }
 
                if (!list_empty(&cache->io_list)) {
                        spin_unlock(&cur_trans->dirty_bgs_lock);
                cache = list_first_entry(&cur_trans->io_bgs,
                                         struct btrfs_block_group_cache,
                                         io_list);
-               if (!cache) {
-                       btrfs_err(fs_info, "orphan block group on io_bgs list");
-                       return;
-               }
 
                list_del_init(&cache->io_list);
                spin_lock(&cache->lock);