Lines Matching refs:zone
253 struct reada_zone *zone; in reada_find_zone() local
259 zone = NULL; in reada_find_zone()
261 ret = radix_tree_gang_lookup(&dev->reada_zones, (void **)&zone, in reada_find_zone()
264 kref_get(&zone->refcnt); in reada_find_zone()
268 if (logical >= zone->start && logical < zone->end) in reada_find_zone()
269 return zone; in reada_find_zone()
271 kref_put(&zone->refcnt, reada_zone_release); in reada_find_zone()
283 zone = kzalloc(sizeof(*zone), GFP_NOFS); in reada_find_zone()
284 if (!zone) in reada_find_zone()
287 zone->start = start; in reada_find_zone()
288 zone->end = end; in reada_find_zone()
289 INIT_LIST_HEAD(&zone->list); in reada_find_zone()
290 spin_lock_init(&zone->lock); in reada_find_zone()
291 zone->locked = 0; in reada_find_zone()
292 kref_init(&zone->refcnt); in reada_find_zone()
293 zone->elems = 0; in reada_find_zone()
294 zone->device = dev; /* our device always sits at index 0 */ in reada_find_zone()
297 zone->devs[i] = bbio->stripes[i].dev; in reada_find_zone()
299 zone->ndevs = bbio->num_stripes; in reada_find_zone()
303 (unsigned long)(zone->end >> PAGE_CACHE_SHIFT), in reada_find_zone()
304 zone); in reada_find_zone()
307 kfree(zone); in reada_find_zone()
308 ret = radix_tree_gang_lookup(&dev->reada_zones, (void **)&zone, in reada_find_zone()
311 kref_get(&zone->refcnt); in reada_find_zone()
315 return zone; in reada_find_zone()
373 struct reada_zone *zone; in reada_find_extent() local
376 zone = reada_find_zone(fs_info, dev, logical, bbio); in reada_find_extent()
377 if (!zone) in reada_find_extent()
380 re->zones[nzones] = zone; in reada_find_extent()
381 spin_lock(&zone->lock); in reada_find_extent()
382 if (!zone->elems) in reada_find_extent()
383 kref_get(&zone->refcnt); in reada_find_extent()
384 ++zone->elems; in reada_find_extent()
385 spin_unlock(&zone->lock); in reada_find_extent()
387 kref_put(&zone->refcnt, reada_zone_release); in reada_find_extent()
469 struct reada_zone *zone; in reada_find_extent() local
472 zone = re->zones[nzones]; in reada_find_extent()
473 kref_get(&zone->refcnt); in reada_find_extent()
474 spin_lock(&zone->lock); in reada_find_extent()
475 --zone->elems; in reada_find_extent()
476 if (zone->elems == 0) { in reada_find_extent()
481 kref_put(&zone->refcnt, reada_zone_release); in reada_find_extent()
483 spin_unlock(&zone->lock); in reada_find_extent()
486 kref_put(&zone->refcnt, reada_zone_release); in reada_find_extent()
508 struct reada_zone *zone = re->zones[i]; in reada_extent_put() local
510 radix_tree_delete(&zone->device->reada_extents, index); in reada_extent_put()
516 struct reada_zone *zone = re->zones[i]; in reada_extent_put() local
518 kref_get(&zone->refcnt); in reada_extent_put()
519 spin_lock(&zone->lock); in reada_extent_put()
520 --zone->elems; in reada_extent_put()
521 if (zone->elems == 0) { in reada_extent_put()
524 kref_put(&zone->refcnt, reada_zone_release); in reada_extent_put()
526 spin_unlock(&zone->lock); in reada_extent_put()
529 kref_put(&zone->refcnt, reada_zone_release); in reada_extent_put()
540 struct reada_zone *zone = container_of(kref, struct reada_zone, refcnt); in reada_zone_release() local
542 radix_tree_delete(&zone->device->reada_zones, in reada_zone_release()
543 zone->end >> PAGE_CACHE_SHIFT); in reada_zone_release()
545 kfree(zone); in reada_zone_release()
589 static void reada_peer_zones_set_lock(struct reada_zone *zone, int lock) in reada_peer_zones_set_lock() argument
592 unsigned long index = zone->end >> PAGE_CACHE_SHIFT; in reada_peer_zones_set_lock()
594 for (i = 0; i < zone->ndevs; ++i) { in reada_peer_zones_set_lock()
596 peer = radix_tree_lookup(&zone->devs[i]->reada_zones, index); in reada_peer_zones_set_lock()
597 if (peer && peer->device != zone->device) in reada_peer_zones_set_lock()
621 struct reada_zone *zone; in reada_pick_zone() local
624 (void **)&zone, index, 1); in reada_pick_zone()
627 index = (zone->end >> PAGE_CACHE_SHIFT) + 1; in reada_pick_zone()
628 if (zone->locked) { in reada_pick_zone()
629 if (zone->elems > top_locked_elems) { in reada_pick_zone()
630 top_locked_elems = zone->elems; in reada_pick_zone()
631 top_locked_zone = zone; in reada_pick_zone()
634 if (zone->elems > top_elems) { in reada_pick_zone()
635 top_elems = zone->elems; in reada_pick_zone()
636 top_zone = zone; in reada_pick_zone()
821 struct reada_zone *zone; in dump_devs() local
823 (void **)&zone, index, 1); in dump_devs()
827 "%d devs", zone->start, zone->end, zone->elems, in dump_devs()
828 zone->locked); in dump_devs()
829 for (j = 0; j < zone->ndevs; ++j) { in dump_devs()
831 zone->devs[j]->devid); in dump_devs()
833 if (device->reada_curr_zone == zone) in dump_devs()
835 device->reada_next - zone->start); in dump_devs()
837 index = (zone->end >> PAGE_CACHE_SHIFT) + 1; in dump_devs()