> +static inline unsigned int *blk_alloc_zone_wp_ofst(unsigned int nr_zones) > +{ > + return kvcalloc(nr_zones, sizeof(unsigned int), GFP_NOIO); > +} This helper seems a bit pointless. > +int blk_get_zone_wp_offset(struct blk_zone *zone, unsigned int *wp_ofst) > +{ > + switch (zone->cond) { > + case BLK_ZONE_COND_EMPTY: > + *wp_ofst = 0; > + return 0; > + case BLK_ZONE_COND_IMP_OPEN: > + case BLK_ZONE_COND_EXP_OPEN: > + case BLK_ZONE_COND_CLOSED: > + *wp_ofst = zone->wp - zone->start; > + return 0; > + case BLK_ZONE_COND_FULL: > + *wp_ofst = zone->len; > + return 0; > + case BLK_ZONE_COND_NOT_WP: > + case BLK_ZONE_COND_OFFLINE: > + case BLK_ZONE_COND_READONLY: > + /* > + * Conventional, offline and read-only zones do not have a valid > + * write pointer. Use 0 as a dummy value. > + */ > + *wp_ofst = 0; > + return 0; > + default: > + return -ENODEV; > + } Why not just return the offset? The error case is impossible anyway.