Lines Matching defs:zone
60 uint64_t zone_capacity; /* zone capacity */
190 struct block_zone *zone = zone_block_get_zone_containing_lba(bdev_node, start_lba);
192 if (zone && zone->zone_info.zone_id == start_lba) {
193 return zone;
202 struct block_zone *zone;
211 zone = zone_block_get_zone_by_slba(bdev_node, zone_id);
212 if (!zone) {
215 memcpy(&zone_info[i], &zone->zone_info, sizeof(*zone_info));
223 zone_block_open_zone(struct block_zone *zone, struct spdk_bdev_io *bdev_io)
225 pthread_spin_lock(&zone->lock);
227 switch (zone->zone_info.state) {
231 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_OPEN;
232 pthread_spin_unlock(&zone->lock);
236 pthread_spin_unlock(&zone->lock);
256 struct block_zone *zone, struct spdk_bdev_io *bdev_io)
258 pthread_spin_lock(&zone->lock);
260 switch (zone->zone_info.state) {
262 pthread_spin_unlock(&zone->lock);
268 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_EMPTY;
269 zone->zone_info.write_pointer = zone->zone_info.zone_id;
270 pthread_spin_unlock(&zone->lock);
280 zone->zone_info.zone_id, zone->zone_info.capacity,
283 pthread_spin_unlock(&zone->lock);
289 zone_block_close_zone(struct block_zone *zone, struct spdk_bdev_io *bdev_io)
291 pthread_spin_lock(&zone->lock);
293 switch (zone->zone_info.state) {
296 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_CLOSED;
297 pthread_spin_unlock(&zone->lock);
301 pthread_spin_unlock(&zone->lock);
307 zone_block_finish_zone(struct block_zone *zone, struct spdk_bdev_io *bdev_io)
309 pthread_spin_lock(&zone->lock);
311 zone->zone_info.write_pointer = zone->zone_info.zone_id + zone->zone_info.capacity;
312 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_FULL;
314 pthread_spin_unlock(&zone->lock);
323 struct block_zone *zone;
325 zone = zone_block_get_zone_by_slba(bdev_node, bdev_io->u.zone_mgmt.zone_id);
326 if (!zone) {
332 return zone_block_reset_zone(bdev_node, ch, zone, bdev_io);
334 return zone_block_open_zone(zone, bdev_io);
336 return zone_block_close_zone(zone, bdev_io);
338 return zone_block_finish_zone(zone, bdev_io);
365 struct block_zone *zone;
373 zone = zone_block_get_zone_by_slba(bdev_node, lba);
375 zone = zone_block_get_zone_containing_lba(bdev_node, lba);
377 if (!zone) {
378 SPDK_ERRLOG("Trying to write to invalid zone (lba 0x%" PRIx64 ")\n", lba);
382 pthread_spin_lock(&zone->lock);
384 switch (zone->zone_info.state) {
388 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_OPEN;
391 SPDK_ERRLOG("Trying to write to zone in invalid state %u\n", zone->zone_info.state);
396 wp = zone->zone_info.write_pointer;
401 SPDK_ERRLOG("Trying to write to zone with invalid address (lba 0x%" PRIx64 ", wp 0x%" PRIx64 ")\n",
408 num_blocks_left = zone->zone_info.zone_id + zone->zone_info.capacity - wp;
410 SPDK_ERRLOG("Write exceeds zone capacity (lba 0x%" PRIx64 ", len 0x%" PRIx64 ", wp 0x%" PRIx64
416 zone->zone_info.write_pointer += bdev_io->u.bdev.num_blocks;
417 assert(zone->zone_info.write_pointer <= zone->zone_info.zone_id + zone->zone_info.capacity);
418 if (zone->zone_info.write_pointer == zone->zone_info.zone_id + zone->zone_info.capacity) {
419 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_FULL;
421 pthread_spin_unlock(&zone->lock);
432 pthread_spin_unlock(&zone->lock);
453 struct block_zone *zone;
458 zone = zone_block_get_zone_containing_lba(bdev_node, lba);
459 if (!zone) {
460 SPDK_ERRLOG("Trying to read from invalid zone (lba 0x%" PRIx64 ")\n", lba);
464 if ((lba + len) > (zone->zone_info.zone_id + zone->zone_info.capacity)) {
465 SPDK_ERRLOG("Read exceeds zone capacity (lba 0x%" PRIx64 ", len 0x%" PRIx64 ")\n", lba, len);
662 struct block_zone *zone;
666 zone = &bdev_node->zones[i];
667 zone->zone_info.zone_id = bdev_node->bdev.zone_size * i;
668 zone->zone_info.capacity = bdev_node->zone_capacity;
669 zone->zone_info.write_pointer = zone->zone_info.zone_id + zone->zone_info.capacity;
670 zone->zone_info.state = SPDK_BDEV_ZONE_STATE_FULL;
671 zone->zone_info.type = SPDK_BDEV_ZONE_TYPE_SEQWR;
672 if (pthread_spin_init(&zone->lock, PTHREAD_PROCESS_PRIVATE)) {
746 SPDK_ERRLOG("invalid zone size\n");
772 "Lost %" PRIu64 " blocks due to zone capacity and base bdev size misalignment\n",
794 SPDK_ERRLOG("Unable to generate new UUID for zone block bdev\n");
806 SPDK_ERRLOG("could not init zone info\n");