CC: [email protected]
CC: [email protected]
TO: Naohiro Aota <[email protected]>
CC: David Sterba <[email protected]>
CC: Josef Bacik <[email protected]>
CC: Anand Jain <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   3498e7f2bb415e447354a3debef6738d9655768c
commit: 08e11a3db098f4ba0cfee46d7ab449cba43dea1b btrfs: zoned: load zone's 
allocation offset
date:   10 months ago
:::::: branch date: 6 hours ago
:::::: commit date: 10 months ago
config: x86_64-randconfig-m001-20211116 
(https://download.01.org/0day-ci/archive/20211128/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
fs/btrfs/zoned.c:1072 btrfs_load_block_group_zone_info() error: uninitialized 
symbol 'ret'.

Old smatch warnings:
fs/btrfs/zoned.c:303 btrfs_get_dev_zone_info() warn: should 'zone_sectors << 9' 
be a 64 bit type?
fs/btrfs/zoned.c:367 btrfs_get_dev_zone_info() warn: should 'sb_zone << 
(zone_info->zone_size_shift - 9)' be a 64 bit type?
fs/btrfs/zoned.c:683 btrfs_sb_log_location_bdev() warn: should 'sb_zone << 
zone_sectors_shift' be a 64 bit type?
fs/btrfs/zoned.c:788 btrfs_reset_sb_log_zones() warn: should 'sb_zone << 
zone_sectors_shift' be a 64 bit type?

vim +/ret +1072 fs/btrfs/zoned.c

08e11a3db098f4 Naohiro Aota 2021-02-04   929  
08e11a3db098f4 Naohiro Aota 2021-02-04   930  int 
btrfs_load_block_group_zone_info(struct btrfs_block_group *cache)
08e11a3db098f4 Naohiro Aota 2021-02-04   931  {
08e11a3db098f4 Naohiro Aota 2021-02-04   932    struct btrfs_fs_info *fs_info = 
cache->fs_info;
08e11a3db098f4 Naohiro Aota 2021-02-04   933    struct extent_map_tree *em_tree 
= &fs_info->mapping_tree;
08e11a3db098f4 Naohiro Aota 2021-02-04   934    struct extent_map *em;
08e11a3db098f4 Naohiro Aota 2021-02-04   935    struct map_lookup *map;
08e11a3db098f4 Naohiro Aota 2021-02-04   936    struct btrfs_device *device;
08e11a3db098f4 Naohiro Aota 2021-02-04   937    u64 logical = cache->start;
08e11a3db098f4 Naohiro Aota 2021-02-04   938    u64 length = cache->length;
08e11a3db098f4 Naohiro Aota 2021-02-04   939    u64 physical = 0;
08e11a3db098f4 Naohiro Aota 2021-02-04   940    int ret;
08e11a3db098f4 Naohiro Aota 2021-02-04   941    int i;
08e11a3db098f4 Naohiro Aota 2021-02-04   942    unsigned int nofs_flag;
08e11a3db098f4 Naohiro Aota 2021-02-04   943    u64 *alloc_offsets = NULL;
08e11a3db098f4 Naohiro Aota 2021-02-04   944    u32 num_sequential = 0, 
num_conventional = 0;
08e11a3db098f4 Naohiro Aota 2021-02-04   945  
08e11a3db098f4 Naohiro Aota 2021-02-04   946    if (!btrfs_is_zoned(fs_info))
08e11a3db098f4 Naohiro Aota 2021-02-04   947            return 0;
08e11a3db098f4 Naohiro Aota 2021-02-04   948  
08e11a3db098f4 Naohiro Aota 2021-02-04   949    /* Sanity check */
08e11a3db098f4 Naohiro Aota 2021-02-04   950    if (!IS_ALIGNED(length, 
fs_info->zone_size)) {
08e11a3db098f4 Naohiro Aota 2021-02-04   951            btrfs_err(fs_info,
08e11a3db098f4 Naohiro Aota 2021-02-04   952            "zoned: block group 
%llu len %llu unaligned to zone size %llu",
08e11a3db098f4 Naohiro Aota 2021-02-04   953                      logical, 
length, fs_info->zone_size);
08e11a3db098f4 Naohiro Aota 2021-02-04   954            return -EIO;
08e11a3db098f4 Naohiro Aota 2021-02-04   955    }
08e11a3db098f4 Naohiro Aota 2021-02-04   956  
08e11a3db098f4 Naohiro Aota 2021-02-04   957    /* Get the chunk mapping */
08e11a3db098f4 Naohiro Aota 2021-02-04   958    read_lock(&em_tree->lock);
08e11a3db098f4 Naohiro Aota 2021-02-04   959    em = 
lookup_extent_mapping(em_tree, logical, length);
08e11a3db098f4 Naohiro Aota 2021-02-04   960    read_unlock(&em_tree->lock);
08e11a3db098f4 Naohiro Aota 2021-02-04   961  
08e11a3db098f4 Naohiro Aota 2021-02-04   962    if (!em)
08e11a3db098f4 Naohiro Aota 2021-02-04   963            return -EINVAL;
08e11a3db098f4 Naohiro Aota 2021-02-04   964  
08e11a3db098f4 Naohiro Aota 2021-02-04   965    map = em->map_lookup;
08e11a3db098f4 Naohiro Aota 2021-02-04   966  
08e11a3db098f4 Naohiro Aota 2021-02-04   967    alloc_offsets = 
kcalloc(map->num_stripes, sizeof(*alloc_offsets), GFP_NOFS);
08e11a3db098f4 Naohiro Aota 2021-02-04   968    if (!alloc_offsets) {
08e11a3db098f4 Naohiro Aota 2021-02-04   969            free_extent_map(em);
08e11a3db098f4 Naohiro Aota 2021-02-04   970            return -ENOMEM;
08e11a3db098f4 Naohiro Aota 2021-02-04   971    }
08e11a3db098f4 Naohiro Aota 2021-02-04   972  
08e11a3db098f4 Naohiro Aota 2021-02-04   973    for (i = 0; i < 
map->num_stripes; i++) {
08e11a3db098f4 Naohiro Aota 2021-02-04   974            bool is_sequential;
08e11a3db098f4 Naohiro Aota 2021-02-04   975            struct blk_zone zone;
08e11a3db098f4 Naohiro Aota 2021-02-04   976  
08e11a3db098f4 Naohiro Aota 2021-02-04   977            device = 
map->stripes[i].dev;
08e11a3db098f4 Naohiro Aota 2021-02-04   978            physical = 
map->stripes[i].physical;
08e11a3db098f4 Naohiro Aota 2021-02-04   979  
08e11a3db098f4 Naohiro Aota 2021-02-04   980            if (device->bdev == 
NULL) {
08e11a3db098f4 Naohiro Aota 2021-02-04   981                    
alloc_offsets[i] = WP_MISSING_DEV;
08e11a3db098f4 Naohiro Aota 2021-02-04   982                    continue;
08e11a3db098f4 Naohiro Aota 2021-02-04   983            }
08e11a3db098f4 Naohiro Aota 2021-02-04   984  
08e11a3db098f4 Naohiro Aota 2021-02-04   985            is_sequential = 
btrfs_dev_is_sequential(device, physical);
08e11a3db098f4 Naohiro Aota 2021-02-04   986            if (is_sequential)
08e11a3db098f4 Naohiro Aota 2021-02-04   987                    
num_sequential++;
08e11a3db098f4 Naohiro Aota 2021-02-04   988            else
08e11a3db098f4 Naohiro Aota 2021-02-04   989                    
num_conventional++;
08e11a3db098f4 Naohiro Aota 2021-02-04   990  
08e11a3db098f4 Naohiro Aota 2021-02-04   991            if (!is_sequential) {
08e11a3db098f4 Naohiro Aota 2021-02-04   992                    
alloc_offsets[i] = WP_CONVENTIONAL;
08e11a3db098f4 Naohiro Aota 2021-02-04   993                    continue;
08e11a3db098f4 Naohiro Aota 2021-02-04   994            }
08e11a3db098f4 Naohiro Aota 2021-02-04   995  
08e11a3db098f4 Naohiro Aota 2021-02-04   996            /*
08e11a3db098f4 Naohiro Aota 2021-02-04   997             * This zone will be 
used for allocation, so mark this zone
08e11a3db098f4 Naohiro Aota 2021-02-04   998             * non-empty.
08e11a3db098f4 Naohiro Aota 2021-02-04   999             */
08e11a3db098f4 Naohiro Aota 2021-02-04  1000            
btrfs_dev_clear_zone_empty(device, physical);
08e11a3db098f4 Naohiro Aota 2021-02-04  1001  
08e11a3db098f4 Naohiro Aota 2021-02-04  1002            /*
08e11a3db098f4 Naohiro Aota 2021-02-04  1003             * The group is mapped 
to a sequential zone. Get the zone write
08e11a3db098f4 Naohiro Aota 2021-02-04  1004             * pointer to determine 
the allocation offset within the zone.
08e11a3db098f4 Naohiro Aota 2021-02-04  1005             */
08e11a3db098f4 Naohiro Aota 2021-02-04  1006            
WARN_ON(!IS_ALIGNED(physical, fs_info->zone_size));
08e11a3db098f4 Naohiro Aota 2021-02-04  1007            nofs_flag = 
memalloc_nofs_save();
08e11a3db098f4 Naohiro Aota 2021-02-04  1008            ret = 
btrfs_get_dev_zone(device, physical, &zone);
08e11a3db098f4 Naohiro Aota 2021-02-04  1009            
memalloc_nofs_restore(nofs_flag);
08e11a3db098f4 Naohiro Aota 2021-02-04  1010            if (ret == -EIO || ret 
== -EOPNOTSUPP) {
08e11a3db098f4 Naohiro Aota 2021-02-04  1011                    ret = 0;
08e11a3db098f4 Naohiro Aota 2021-02-04  1012                    
alloc_offsets[i] = WP_MISSING_DEV;
08e11a3db098f4 Naohiro Aota 2021-02-04  1013                    continue;
08e11a3db098f4 Naohiro Aota 2021-02-04  1014            } else if (ret) {
08e11a3db098f4 Naohiro Aota 2021-02-04  1015                    goto out;
08e11a3db098f4 Naohiro Aota 2021-02-04  1016            }
08e11a3db098f4 Naohiro Aota 2021-02-04  1017  
08e11a3db098f4 Naohiro Aota 2021-02-04  1018            switch (zone.cond) {
08e11a3db098f4 Naohiro Aota 2021-02-04  1019            case 
BLK_ZONE_COND_OFFLINE:
08e11a3db098f4 Naohiro Aota 2021-02-04  1020            case 
BLK_ZONE_COND_READONLY:
08e11a3db098f4 Naohiro Aota 2021-02-04  1021                    
btrfs_err(fs_info,
08e11a3db098f4 Naohiro Aota 2021-02-04  1022            "zoned: 
offline/readonly zone %llu on device %s (devid %llu)",
08e11a3db098f4 Naohiro Aota 2021-02-04  1023                              
physical >> device->zone_info->zone_size_shift,
08e11a3db098f4 Naohiro Aota 2021-02-04  1024                              
rcu_str_deref(device->name), device->devid);
08e11a3db098f4 Naohiro Aota 2021-02-04  1025                    
alloc_offsets[i] = WP_MISSING_DEV;
08e11a3db098f4 Naohiro Aota 2021-02-04  1026                    break;
08e11a3db098f4 Naohiro Aota 2021-02-04  1027            case 
BLK_ZONE_COND_EMPTY:
08e11a3db098f4 Naohiro Aota 2021-02-04  1028                    
alloc_offsets[i] = 0;
08e11a3db098f4 Naohiro Aota 2021-02-04  1029                    break;
08e11a3db098f4 Naohiro Aota 2021-02-04  1030            case BLK_ZONE_COND_FULL:
08e11a3db098f4 Naohiro Aota 2021-02-04  1031                    
alloc_offsets[i] = fs_info->zone_size;
08e11a3db098f4 Naohiro Aota 2021-02-04  1032                    break;
08e11a3db098f4 Naohiro Aota 2021-02-04  1033            default:
08e11a3db098f4 Naohiro Aota 2021-02-04  1034                    /* Partially 
used zone */
08e11a3db098f4 Naohiro Aota 2021-02-04  1035                    
alloc_offsets[i] =
08e11a3db098f4 Naohiro Aota 2021-02-04  1036                                    
((zone.wp - zone.start) << SECTOR_SHIFT);
08e11a3db098f4 Naohiro Aota 2021-02-04  1037                    break;
08e11a3db098f4 Naohiro Aota 2021-02-04  1038            }
08e11a3db098f4 Naohiro Aota 2021-02-04  1039    }
08e11a3db098f4 Naohiro Aota 2021-02-04  1040  
08e11a3db098f4 Naohiro Aota 2021-02-04  1041    if (num_conventional > 0) {
08e11a3db098f4 Naohiro Aota 2021-02-04  1042            /*
08e11a3db098f4 Naohiro Aota 2021-02-04  1043             * Since conventional 
zones do not have a write pointer, we
08e11a3db098f4 Naohiro Aota 2021-02-04  1044             * cannot determine 
alloc_offset from the pointer
08e11a3db098f4 Naohiro Aota 2021-02-04  1045             */
08e11a3db098f4 Naohiro Aota 2021-02-04  1046            ret = -EINVAL;
08e11a3db098f4 Naohiro Aota 2021-02-04  1047            goto out;
08e11a3db098f4 Naohiro Aota 2021-02-04  1048    }
08e11a3db098f4 Naohiro Aota 2021-02-04  1049  
08e11a3db098f4 Naohiro Aota 2021-02-04  1050    switch (map->type & 
BTRFS_BLOCK_GROUP_PROFILE_MASK) {
08e11a3db098f4 Naohiro Aota 2021-02-04  1051    case 0: /* single */
08e11a3db098f4 Naohiro Aota 2021-02-04  1052            cache->alloc_offset = 
alloc_offsets[0];
08e11a3db098f4 Naohiro Aota 2021-02-04  1053            break;
08e11a3db098f4 Naohiro Aota 2021-02-04  1054    case BTRFS_BLOCK_GROUP_DUP:
08e11a3db098f4 Naohiro Aota 2021-02-04  1055    case BTRFS_BLOCK_GROUP_RAID1:
08e11a3db098f4 Naohiro Aota 2021-02-04  1056    case BTRFS_BLOCK_GROUP_RAID0:
08e11a3db098f4 Naohiro Aota 2021-02-04  1057    case BTRFS_BLOCK_GROUP_RAID10:
08e11a3db098f4 Naohiro Aota 2021-02-04  1058    case BTRFS_BLOCK_GROUP_RAID5:
08e11a3db098f4 Naohiro Aota 2021-02-04  1059    case BTRFS_BLOCK_GROUP_RAID6:
08e11a3db098f4 Naohiro Aota 2021-02-04  1060            /* non-single profiles 
are not supported yet */
08e11a3db098f4 Naohiro Aota 2021-02-04  1061    default:
08e11a3db098f4 Naohiro Aota 2021-02-04  1062            btrfs_err(fs_info, 
"zoned: profile %s not yet supported",
08e11a3db098f4 Naohiro Aota 2021-02-04  1063                      
btrfs_bg_type_to_raid_name(map->type));
08e11a3db098f4 Naohiro Aota 2021-02-04  1064            ret = -EINVAL;
08e11a3db098f4 Naohiro Aota 2021-02-04  1065            goto out;
08e11a3db098f4 Naohiro Aota 2021-02-04  1066    }
08e11a3db098f4 Naohiro Aota 2021-02-04  1067  
08e11a3db098f4 Naohiro Aota 2021-02-04  1068  out:
08e11a3db098f4 Naohiro Aota 2021-02-04  1069    kfree(alloc_offsets);
08e11a3db098f4 Naohiro Aota 2021-02-04  1070    free_extent_map(em);
08e11a3db098f4 Naohiro Aota 2021-02-04  1071  
08e11a3db098f4 Naohiro Aota 2021-02-04 @1072    return ret;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to