Lines Matching refs:zone

228 	struct reada_zone *zone;  in reada_find_zone()  local
234 zone = NULL; in reada_find_zone()
236 ret = radix_tree_gang_lookup(&dev->reada_zones, (void **)&zone, in reada_find_zone()
238 if (ret == 1 && logical >= zone->start && logical <= zone->end) { in reada_find_zone()
239 kref_get(&zone->refcnt); in reada_find_zone()
241 return zone; in reada_find_zone()
254 zone = kzalloc(sizeof(*zone), GFP_KERNEL); in reada_find_zone()
255 if (!zone) in reada_find_zone()
260 kfree(zone); in reada_find_zone()
264 zone->start = start; in reada_find_zone()
265 zone->end = end; in reada_find_zone()
266 INIT_LIST_HEAD(&zone->list); in reada_find_zone()
267 spin_lock_init(&zone->lock); in reada_find_zone()
268 zone->locked = 0; in reada_find_zone()
269 kref_init(&zone->refcnt); in reada_find_zone()
270 zone->elems = 0; in reada_find_zone()
271 zone->device = dev; /* our device always sits at index 0 */ in reada_find_zone()
274 zone->devs[i] = bbio->stripes[i].dev; in reada_find_zone()
276 zone->ndevs = bbio->num_stripes; in reada_find_zone()
280 (unsigned long)(zone->end >> PAGE_SHIFT), in reada_find_zone()
281 zone); in reada_find_zone()
284 kfree(zone); in reada_find_zone()
285 ret = radix_tree_gang_lookup(&dev->reada_zones, (void **)&zone, in reada_find_zone()
287 if (ret == 1 && logical >= zone->start && logical <= zone->end) in reada_find_zone()
288 kref_get(&zone->refcnt); in reada_find_zone()
290 zone = NULL; in reada_find_zone()
295 return zone; in reada_find_zone()
352 struct reada_zone *zone; in reada_find_extent() local
360 zone = reada_find_zone(dev, logical, bbio); in reada_find_extent()
361 if (!zone) in reada_find_extent()
364 re->zones[re->nzones++] = zone; in reada_find_extent()
365 spin_lock(&zone->lock); in reada_find_extent()
366 if (!zone->elems) in reada_find_extent()
367 kref_get(&zone->refcnt); in reada_find_extent()
368 ++zone->elems; in reada_find_extent()
369 spin_unlock(&zone->lock); in reada_find_extent()
371 kref_put(&zone->refcnt, reada_zone_release); in reada_find_extent()
456 struct reada_zone *zone; in reada_find_extent() local
458 zone = re->zones[nzones]; in reada_find_extent()
459 kref_get(&zone->refcnt); in reada_find_extent()
460 spin_lock(&zone->lock); in reada_find_extent()
461 --zone->elems; in reada_find_extent()
462 if (zone->elems == 0) { in reada_find_extent()
467 kref_put(&zone->refcnt, reada_zone_release); in reada_find_extent()
469 spin_unlock(&zone->lock); in reada_find_extent()
472 kref_put(&zone->refcnt, reada_zone_release); in reada_find_extent()
494 struct reada_zone *zone = re->zones[i]; in reada_extent_put() local
496 radix_tree_delete(&zone->device->reada_extents, index); in reada_extent_put()
502 struct reada_zone *zone = re->zones[i]; in reada_extent_put() local
504 kref_get(&zone->refcnt); in reada_extent_put()
505 spin_lock(&zone->lock); in reada_extent_put()
506 --zone->elems; in reada_extent_put()
507 if (zone->elems == 0) { in reada_extent_put()
510 kref_put(&zone->refcnt, reada_zone_release); in reada_extent_put()
512 spin_unlock(&zone->lock); in reada_extent_put()
515 kref_put(&zone->refcnt, reada_zone_release); in reada_extent_put()
524 struct reada_zone *zone = container_of(kref, struct reada_zone, refcnt); in reada_zone_release() local
526 radix_tree_delete(&zone->device->reada_zones, in reada_zone_release()
527 zone->end >> PAGE_SHIFT); in reada_zone_release()
529 kfree(zone); in reada_zone_release()
574 static void reada_peer_zones_set_lock(struct reada_zone *zone, int lock) in reada_peer_zones_set_lock() argument
577 unsigned long index = zone->end >> PAGE_SHIFT; in reada_peer_zones_set_lock()
579 for (i = 0; i < zone->ndevs; ++i) { in reada_peer_zones_set_lock()
581 peer = radix_tree_lookup(&zone->devs[i]->reada_zones, index); in reada_peer_zones_set_lock()
582 if (peer && peer->device != zone->device) in reada_peer_zones_set_lock()
606 struct reada_zone *zone; in reada_pick_zone() local
609 (void **)&zone, index, 1); in reada_pick_zone()
612 index = (zone->end >> PAGE_SHIFT) + 1; in reada_pick_zone()
613 if (zone->locked) { in reada_pick_zone()
614 if (zone->elems > top_locked_elems) { in reada_pick_zone()
615 top_locked_elems = zone->elems; in reada_pick_zone()
616 top_locked_zone = zone; in reada_pick_zone()
619 if (zone->elems > top_elems) { in reada_pick_zone()
620 top_elems = zone->elems; in reada_pick_zone()
621 top_zone = zone; in reada_pick_zone()
812 struct reada_zone *zone; in dump_devs() local
814 (void **)&zone, index, 1); in dump_devs()
818 zone->start, zone->end, zone->elems, in dump_devs()
819 zone->locked); in dump_devs()
820 for (j = 0; j < zone->ndevs; ++j) { in dump_devs()
822 zone->devs[j]->devid); in dump_devs()
824 if (device->reada_curr_zone == zone) in dump_devs()
826 device->reada_next - zone->start); in dump_devs()
828 index = (zone->end >> PAGE_SHIFT) + 1; in dump_devs()