On 31/01/2021 02:20, Anand Jain wrote:
>> +static int emulate_report_zones(struct btrfs_device *device, u64 pos,
>> +                            struct blk_zone *zones, unsigned int nr_zones)
>> +{
>> +    const sector_t zone_sectors =
>> +            device->fs_info->zone_size >> SECTOR_SHIFT;
>> +    sector_t bdev_size = bdev_nr_sectors(device->bdev);
>> +    unsigned int i;
>> +
>> +    pos >>= SECTOR_SHIFT;
>> +    for (i = 0; i < nr_zones; i++) {
>> +            zones[i].start = i * zone_sectors + pos;
>> +            zones[i].len = zone_sectors;
>> +            zones[i].capacity = zone_sectors;
>> +            zones[i].wp = zones[i].start + zone_sectors;
> I missed something.
> Hmm, why write-point is again at a zone_sector offset from the start? 
> Should it be just...
> 
>   zones[i].wp = zones[i].start;
> 
> Also, a typo is below.
> 
>> +            zones[i].type = BLK_ZONE_TYPE_CONVENTIONAL;
>> +            zones[i].cond = BLK_ZONE_COND_NOT_WP;
>> +

It doesn't really matter. The emulation code emulates conventional zones,
which don't have a write pointer. A read drive will report a wp value of -1
AFAIR. null_blk uses the zone's end so we opted for this as well in the 
emulation
code, hence also the 'zones[i].cond = BLK_ZONE_COND_NOT_WP;' line.

Hope this helps,
        Johannes

Reply via email to