00533efa8758cecac62404d5e698787ceeeb1dcd
[zfs.git] / zfs / lib / libzpool / metaslab.c
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25
26 #pragma ident   "@(#)metaslab.c 1.17    07/11/27 SMI"
27
28 #include <sys/zfs_context.h>
29 #include <sys/spa_impl.h>
30 #include <sys/dmu.h>
31 #include <sys/dmu_tx.h>
32 #include <sys/space_map.h>
33 #include <sys/metaslab_impl.h>
34 #include <sys/vdev_impl.h>
35 #include <sys/zio.h>
36
37 uint64_t metaslab_aliquot = 512ULL << 10;
38 uint64_t metaslab_gang_bang = SPA_MAXBLOCKSIZE + 1;     /* force gang blocks */
39
40 /*
41  * ==========================================================================
42  * Metaslab classes
43  * ==========================================================================
44  */
45 metaslab_class_t *
46 metaslab_class_create(void)
47 {
48         metaslab_class_t *mc;
49
50         mc = kmem_zalloc(sizeof (metaslab_class_t), KM_SLEEP);
51
52         mc->mc_rotor = NULL;
53
54         return (mc);
55 }
56
57 void
58 metaslab_class_destroy(metaslab_class_t *mc)
59 {
60         metaslab_group_t *mg;
61
62         while ((mg = mc->mc_rotor) != NULL) {
63                 metaslab_class_remove(mc, mg);
64                 metaslab_group_destroy(mg);
65         }
66
67         kmem_free(mc, sizeof (metaslab_class_t));
68 }
69
70 void
71 metaslab_class_add(metaslab_class_t *mc, metaslab_group_t *mg)
72 {
73         metaslab_group_t *mgprev, *mgnext;
74
75         ASSERT(mg->mg_class == NULL);
76
77         if ((mgprev = mc->mc_rotor) == NULL) {
78                 mg->mg_prev = mg;
79                 mg->mg_next = mg;
80         } else {
81                 mgnext = mgprev->mg_next;
82                 mg->mg_prev = mgprev;
83                 mg->mg_next = mgnext;
84                 mgprev->mg_next = mg;
85                 mgnext->mg_prev = mg;
86         }
87         mc->mc_rotor = mg;
88         mg->mg_class = mc;
89 }
90
91 void
92 metaslab_class_remove(metaslab_class_t *mc, metaslab_group_t *mg)
93 {
94         metaslab_group_t *mgprev, *mgnext;
95
96         ASSERT(mg->mg_class == mc);
97
98         mgprev = mg->mg_prev;
99         mgnext = mg->mg_next;
100
101         if (mg == mgnext) {
102                 mc->mc_rotor = NULL;
103         } else {
104                 mc->mc_rotor = mgnext;
105                 mgprev->mg_next = mgnext;
106                 mgnext->mg_prev = mgprev;
107         }
108
109         mg->mg_prev = NULL;
110         mg->mg_next = NULL;
111         mg->mg_class = NULL;
112 }
113
114 /*
115  * ==========================================================================
116  * Metaslab groups
117  * ==========================================================================
118  */
119 static int
120 metaslab_compare(const void *x1, const void *x2)
121 {
122         const metaslab_t *m1 = x1;
123         const metaslab_t *m2 = x2;
124
125         if (m1->ms_weight < m2->ms_weight)
126                 return (1);
127         if (m1->ms_weight > m2->ms_weight)
128                 return (-1);
129
130         /*
131          * If the weights are identical, use the offset to force uniqueness.
132          */
133         if (m1->ms_map.sm_start < m2->ms_map.sm_start)
134                 return (-1);
135         if (m1->ms_map.sm_start > m2->ms_map.sm_start)
136                 return (1);
137
138         ASSERT3P(m1, ==, m2);
139
140         return (0);
141 }
142
143 metaslab_group_t *
144 metaslab_group_create(metaslab_class_t *mc, vdev_t *vd)
145 {
146         metaslab_group_t *mg;
147
148         mg = kmem_zalloc(sizeof (metaslab_group_t), KM_SLEEP);
149         mutex_init(&mg->mg_lock, NULL, MUTEX_DEFAULT, NULL);
150         avl_create(&mg->mg_metaslab_tree, metaslab_compare,
151             sizeof (metaslab_t), offsetof(struct metaslab, ms_group_node));
152         mg->mg_aliquot = metaslab_aliquot * MAX(1, vd->vdev_children);
153         mg->mg_vd = vd;
154         metaslab_class_add(mc, mg);
155
156         return (mg);
157 }
158
159 void
160 metaslab_group_destroy(metaslab_group_t *mg)
161 {
162         avl_destroy(&mg->mg_metaslab_tree);
163         mutex_destroy(&mg->mg_lock);
164         kmem_free(mg, sizeof (metaslab_group_t));
165 }
166
167 static void
168 metaslab_group_add(metaslab_group_t *mg, metaslab_t *msp)
169 {
170         mutex_enter(&mg->mg_lock);
171         ASSERT(msp->ms_group == NULL);
172         msp->ms_group = mg;
173         msp->ms_weight = 0;
174         avl_add(&mg->mg_metaslab_tree, msp);
175         mutex_exit(&mg->mg_lock);
176 }
177
178 static void
179 metaslab_group_remove(metaslab_group_t *mg, metaslab_t *msp)
180 {
181         mutex_enter(&mg->mg_lock);
182         ASSERT(msp->ms_group == mg);
183         avl_remove(&mg->mg_metaslab_tree, msp);
184         msp->ms_group = NULL;
185         mutex_exit(&mg->mg_lock);
186 }
187
188 static void
189 metaslab_group_sort(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight)
190 {
191         /*
192          * Although in principle the weight can be any value, in
193          * practice we do not use values in the range [1, 510].
194          */
195         ASSERT(weight >= SPA_MINBLOCKSIZE-1 || weight == 0);
196         ASSERT(MUTEX_HELD(&msp->ms_lock));
197
198         mutex_enter(&mg->mg_lock);
199         ASSERT(msp->ms_group == mg);
200         avl_remove(&mg->mg_metaslab_tree, msp);
201         msp->ms_weight = weight;
202         avl_add(&mg->mg_metaslab_tree, msp);
203         mutex_exit(&mg->mg_lock);
204 }
205
206 /*
207  * ==========================================================================
208  * The first-fit block allocator
209  * ==========================================================================
210  */
211 static void
212 metaslab_ff_load(space_map_t *sm)
213 {
214         ASSERT(sm->sm_ppd == NULL);
215         sm->sm_ppd = kmem_zalloc(64 * sizeof (uint64_t), KM_SLEEP);
216 }
217
218 static void
219 metaslab_ff_unload(space_map_t *sm)
220 {
221         kmem_free(sm->sm_ppd, 64 * sizeof (uint64_t));
222         sm->sm_ppd = NULL;
223 }
224
225 static uint64_t
226 metaslab_ff_alloc(space_map_t *sm, uint64_t size)
227 {
228         avl_tree_t *t = &sm->sm_root;
229         uint64_t align = size & -size;
230         uint64_t *cursor = (uint64_t *)sm->sm_ppd + highbit(align) - 1;
231         space_seg_t *ss, ssearch;
232         avl_index_t where;
233
234         ssearch.ss_start = *cursor;
235         ssearch.ss_end = *cursor + size;
236
237         ss = avl_find(t, &ssearch, &where);
238         if (ss == NULL)
239                 ss = avl_nearest(t, where, AVL_AFTER);
240
241         while (ss != NULL) {
242                 uint64_t offset = P2ROUNDUP(ss->ss_start, align);
243
244                 if (offset + size <= ss->ss_end) {
245                         *cursor = offset + size;
246                         return (offset);
247                 }
248                 ss = AVL_NEXT(t, ss);
249         }
250
251         /*
252          * If we know we've searched the whole map (*cursor == 0), give up.
253          * Otherwise, reset the cursor to the beginning and try again.
254          */
255         if (*cursor == 0)
256                 return (-1ULL);
257
258         *cursor = 0;
259         return (metaslab_ff_alloc(sm, size));
260 }
261
262 /* ARGSUSED */
263 static void
264 metaslab_ff_claim(space_map_t *sm, uint64_t start, uint64_t size)
265 {
266         /* No need to update cursor */
267 }
268
269 /* ARGSUSED */
270 static void
271 metaslab_ff_free(space_map_t *sm, uint64_t start, uint64_t size)
272 {
273         /* No need to update cursor */
274 }
275
276 static space_map_ops_t metaslab_ff_ops = {
277         metaslab_ff_load,
278         metaslab_ff_unload,
279         metaslab_ff_alloc,
280         metaslab_ff_claim,
281         metaslab_ff_free
282 };
283
284 /*
285  * ==========================================================================
286  * Metaslabs
287  * ==========================================================================
288  */
289 metaslab_t *
290 metaslab_init(metaslab_group_t *mg, space_map_obj_t *smo,
291         uint64_t start, uint64_t size, uint64_t txg)
292 {
293         vdev_t *vd = mg->mg_vd;
294         metaslab_t *msp;
295
296         msp = kmem_zalloc(sizeof (metaslab_t), KM_SLEEP);
297         mutex_init(&msp->ms_lock, NULL, MUTEX_DEFAULT, NULL);
298
299         msp->ms_smo_syncing = *smo;
300
301         /*
302          * We create the main space map here, but we don't create the
303          * allocmaps and freemaps until metaslab_sync_done().  This serves
304          * two purposes: it allows metaslab_sync_done() to detect the
305          * addition of new space; and for debugging, it ensures that we'd
306          * data fault on any attempt to use this metaslab before it's ready.
307          */
308         space_map_create(&msp->ms_map, start, size,
309             vd->vdev_ashift, &msp->ms_lock);
310
311         metaslab_group_add(mg, msp);
312
313         /*
314          * If we're opening an existing pool (txg == 0) or creating
315          * a new one (txg == TXG_INITIAL), all space is available now.
316          * If we're adding space to an existing pool, the new space
317          * does not become available until after this txg has synced.
318          */
319         if (txg <= TXG_INITIAL)
320                 metaslab_sync_done(msp, 0);
321
322         if (txg != 0) {
323                 /*
324                  * The vdev is dirty, but the metaslab isn't -- it just needs
325                  * to have metaslab_sync_done() invoked from vdev_sync_done().
326                  * [We could just dirty the metaslab, but that would cause us
327                  * to allocate a space map object for it, which is wasteful
328                  * and would mess up the locality logic in metaslab_weight().]
329                  */
330                 ASSERT(TXG_CLEAN(txg) == spa_last_synced_txg(vd->vdev_spa));
331                 vdev_dirty(vd, 0, NULL, txg);
332                 vdev_dirty(vd, VDD_METASLAB, msp, TXG_CLEAN(txg));
333         }
334
335         return (msp);
336 }
337
338 void
339 metaslab_fini(metaslab_t *msp)
340 {
341         metaslab_group_t *mg = msp->ms_group;
342         int t;
343
344         vdev_space_update(mg->mg_vd, -msp->ms_map.sm_size,
345             -msp->ms_smo.smo_alloc, B_TRUE);
346
347         metaslab_group_remove(mg, msp);
348
349         mutex_enter(&msp->ms_lock);
350
351         space_map_unload(&msp->ms_map);
352         space_map_destroy(&msp->ms_map);
353
354         for (t = 0; t < TXG_SIZE; t++) {
355                 space_map_destroy(&msp->ms_allocmap[t]);
356                 space_map_destroy(&msp->ms_freemap[t]);
357         }
358
359         mutex_exit(&msp->ms_lock);
360         mutex_destroy(&msp->ms_lock);
361
362         kmem_free(msp, sizeof (metaslab_t));
363 }
364
365 #define METASLAB_WEIGHT_PRIMARY         (1ULL << 63)
366 #define METASLAB_WEIGHT_SECONDARY       (1ULL << 62)
367 #define METASLAB_ACTIVE_MASK            \
368         (METASLAB_WEIGHT_PRIMARY | METASLAB_WEIGHT_SECONDARY)
369 #define METASLAB_SMO_BONUS_MULTIPLIER   2
370
371 static uint64_t
372 metaslab_weight(metaslab_t *msp)
373 {
374         metaslab_group_t *mg = msp->ms_group;
375         space_map_t *sm = &msp->ms_map;
376         space_map_obj_t *smo = &msp->ms_smo;
377         vdev_t *vd = mg->mg_vd;
378         uint64_t weight, space;
379
380         ASSERT(MUTEX_HELD(&msp->ms_lock));
381
382         /*
383          * The baseline weight is the metaslab's free space.
384          */
385         space = sm->sm_size - smo->smo_alloc;
386         weight = space;
387
388         /*
389          * Modern disks have uniform bit density and constant angular velocity.
390          * Therefore, the outer recording zones are faster (higher bandwidth)
391          * than the inner zones by the ratio of outer to inner track diameter,
392          * which is typically around 2:1.  We account for this by assigning
393          * higher weight to lower metaslabs (multiplier ranging from 2x to 1x).
394          * In effect, this means that we'll select the metaslab with the most
395          * free bandwidth rather than simply the one with the most free space.
396          */
397         weight = 2 * weight -
398             ((sm->sm_start >> vd->vdev_ms_shift) * weight) / vd->vdev_ms_count;
399         ASSERT(weight >= space && weight <= 2 * space);
400
401         /*
402          * For locality, assign higher weight to metaslabs we've used before.
403          */
404         if (smo->smo_object != 0)
405                 weight *= METASLAB_SMO_BONUS_MULTIPLIER;
406         ASSERT(weight >= space &&
407             weight <= 2 * METASLAB_SMO_BONUS_MULTIPLIER * space);
408
409         /*
410          * If this metaslab is one we're actively using, adjust its weight to
411          * make it preferable to any inactive metaslab so we'll polish it off.
412          */
413         weight |= (msp->ms_weight & METASLAB_ACTIVE_MASK);
414
415         return (weight);
416 }
417
418 static int
419 metaslab_activate(metaslab_t *msp, uint64_t activation_weight)
420 {
421         space_map_t *sm = &msp->ms_map;
422
423         ASSERT(MUTEX_HELD(&msp->ms_lock));
424
425         if ((msp->ms_weight & METASLAB_ACTIVE_MASK) == 0) {
426                 int error = space_map_load(sm, &metaslab_ff_ops,
427                     SM_FREE, &msp->ms_smo,
428                     msp->ms_group->mg_vd->vdev_spa->spa_meta_objset);
429                 if (error) {
430                         metaslab_group_sort(msp->ms_group, msp, 0);
431                         return (error);
432                 }
433                 metaslab_group_sort(msp->ms_group, msp,
434                     msp->ms_weight | activation_weight);
435         }
436         ASSERT(sm->sm_loaded);
437         ASSERT(msp->ms_weight & METASLAB_ACTIVE_MASK);
438
439         return (0);
440 }
441
442 static void
443 metaslab_passivate(metaslab_t *msp, uint64_t size)
444 {
445         /*
446          * If size < SPA_MINBLOCKSIZE, then we will not allocate from
447          * this metaslab again.  In that case, it had better be empty,
448          * or we would be leaving space on the table.
449          */
450         ASSERT(size >= SPA_MINBLOCKSIZE || msp->ms_map.sm_space == 0);
451         metaslab_group_sort(msp->ms_group, msp, MIN(msp->ms_weight, size));
452         ASSERT((msp->ms_weight & METASLAB_ACTIVE_MASK) == 0);
453 }
454
455 /*
456  * Write a metaslab to disk in the context of the specified transaction group.
457  */
458 void
459 metaslab_sync(metaslab_t *msp, uint64_t txg)
460 {
461         vdev_t *vd = msp->ms_group->mg_vd;
462         spa_t *spa = vd->vdev_spa;
463         objset_t *mos = spa->spa_meta_objset;
464         space_map_t *allocmap = &msp->ms_allocmap[txg & TXG_MASK];
465         space_map_t *freemap = &msp->ms_freemap[txg & TXG_MASK];
466         space_map_t *freed_map = &msp->ms_freemap[TXG_CLEAN(txg) & TXG_MASK];
467         space_map_t *sm = &msp->ms_map;
468         space_map_obj_t *smo = &msp->ms_smo_syncing;
469         dmu_buf_t *db;
470         dmu_tx_t *tx;
471         int t;
472
473         tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg);
474
475         /*
476          * The only state that can actually be changing concurrently with
477          * metaslab_sync() is the metaslab's ms_map.  No other thread can
478          * be modifying this txg's allocmap, freemap, freed_map, or smo.
479          * Therefore, we only hold ms_lock to satify space_map ASSERTs.
480          * We drop it whenever we call into the DMU, because the DMU
481          * can call down to us (e.g. via zio_free()) at any time.
482          */
483         mutex_enter(&msp->ms_lock);
484
485         if (smo->smo_object == 0) {
486                 ASSERT(smo->smo_objsize == 0);
487                 ASSERT(smo->smo_alloc == 0);
488                 mutex_exit(&msp->ms_lock);
489                 smo->smo_object = dmu_object_alloc(mos,
490                     DMU_OT_SPACE_MAP, 1 << SPACE_MAP_BLOCKSHIFT,
491                     DMU_OT_SPACE_MAP_HEADER, sizeof (*smo), tx);
492                 ASSERT(smo->smo_object != 0);
493                 dmu_write(mos, vd->vdev_ms_array, sizeof (uint64_t) *
494                     (sm->sm_start >> vd->vdev_ms_shift),
495                     sizeof (uint64_t), &smo->smo_object, tx);
496                 mutex_enter(&msp->ms_lock);
497         }
498
499         space_map_walk(freemap, space_map_add, freed_map);
500
501         if (sm->sm_loaded && spa_sync_pass(spa) == 1 && smo->smo_objsize >=
502             2 * sizeof (uint64_t) * avl_numnodes(&sm->sm_root)) {
503                 /*
504                  * The in-core space map representation is twice as compact
505                  * as the on-disk one, so it's time to condense the latter
506                  * by generating a pure allocmap from first principles.
507                  *
508                  * This metaslab is 100% allocated,
509                  * minus the content of the in-core map (sm),
510                  * minus what's been freed this txg (freed_map),
511                  * minus allocations from txgs in the future
512                  * (because they haven't been committed yet).
513                  */
514                 space_map_vacate(allocmap, NULL, NULL);
515                 space_map_vacate(freemap, NULL, NULL);
516
517                 space_map_add(allocmap, allocmap->sm_start, allocmap->sm_size);
518
519                 space_map_walk(sm, space_map_remove, allocmap);
520                 space_map_walk(freed_map, space_map_remove, allocmap);
521
522                 for (t = 1; t < TXG_CONCURRENT_STATES; t++)
523                         space_map_walk(&msp->ms_allocmap[(txg + t) & TXG_MASK],
524                             space_map_remove, allocmap);
525
526                 mutex_exit(&msp->ms_lock);
527                 space_map_truncate(smo, mos, tx);
528                 mutex_enter(&msp->ms_lock);
529         }
530
531         space_map_sync(allocmap, SM_ALLOC, smo, mos, tx);
532         space_map_sync(freemap, SM_FREE, smo, mos, tx);
533
534         mutex_exit(&msp->ms_lock);
535
536         VERIFY(0 == dmu_bonus_hold(mos, smo->smo_object, FTAG, &db));
537         dmu_buf_will_dirty(db, tx);
538         ASSERT3U(db->db_size, >=, sizeof (*smo));
539         bcopy(smo, db->db_data, sizeof (*smo));
540         dmu_buf_rele(db, FTAG);
541
542         dmu_tx_commit(tx);
543 }
544
545 /*
546  * Called after a transaction group has completely synced to mark
547  * all of the metaslab's free space as usable.
548  */
549 void
550 metaslab_sync_done(metaslab_t *msp, uint64_t txg)
551 {
552         space_map_obj_t *smo = &msp->ms_smo;
553         space_map_obj_t *smosync = &msp->ms_smo_syncing;
554         space_map_t *sm = &msp->ms_map;
555         space_map_t *freed_map = &msp->ms_freemap[TXG_CLEAN(txg) & TXG_MASK];
556         metaslab_group_t *mg = msp->ms_group;
557         vdev_t *vd = mg->mg_vd;
558         int t;
559
560         mutex_enter(&msp->ms_lock);
561
562         /*
563          * If this metaslab is just becoming available, initialize its
564          * allocmaps and freemaps and add its capacity to the vdev.
565          */
566         if (freed_map->sm_size == 0) {
567                 for (t = 0; t < TXG_SIZE; t++) {
568                         space_map_create(&msp->ms_allocmap[t], sm->sm_start,
569                             sm->sm_size, sm->sm_shift, sm->sm_lock);
570                         space_map_create(&msp->ms_freemap[t], sm->sm_start,
571                             sm->sm_size, sm->sm_shift, sm->sm_lock);
572                 }
573                 vdev_space_update(vd, sm->sm_size, 0, B_TRUE);
574         }
575
576         vdev_space_update(vd, 0, smosync->smo_alloc - smo->smo_alloc, B_TRUE);
577
578         ASSERT(msp->ms_allocmap[txg & TXG_MASK].sm_space == 0);
579         ASSERT(msp->ms_freemap[txg & TXG_MASK].sm_space == 0);
580
581         /*
582          * If there's a space_map_load() in progress, wait for it to complete
583          * so that we have a consistent view of the in-core space map.
584          * Then, add everything we freed in this txg to the map.
585          */
586         space_map_load_wait(sm);
587         space_map_vacate(freed_map, sm->sm_loaded ? space_map_free : NULL, sm);
588
589         *smo = *smosync;
590
591         /*
592          * If the map is loaded but no longer active, evict it as soon as all
593          * future allocations have synced.  (If we unloaded it now and then
594          * loaded a moment later, the map wouldn't reflect those allocations.)
595          */
596         if (sm->sm_loaded && (msp->ms_weight & METASLAB_ACTIVE_MASK) == 0) {
597                 int evictable = 1;
598
599                 for (t = 1; t < TXG_CONCURRENT_STATES; t++)
600                         if (msp->ms_allocmap[(txg + t) & TXG_MASK].sm_space)
601                                 evictable = 0;
602
603                 if (evictable)
604                         space_map_unload(sm);
605         }
606
607         metaslab_group_sort(mg, msp, metaslab_weight(msp));
608
609         mutex_exit(&msp->ms_lock);
610 }
611
612 static uint64_t
613 metaslab_distance(metaslab_t *msp, dva_t *dva)
614 {
615         uint64_t ms_shift = msp->ms_group->mg_vd->vdev_ms_shift;
616         uint64_t offset = DVA_GET_OFFSET(dva) >> ms_shift;
617         uint64_t start = msp->ms_map.sm_start >> ms_shift;
618
619         if (msp->ms_group->mg_vd->vdev_id != DVA_GET_VDEV(dva))
620                 return (1ULL << 63);
621
622         if (offset < start)
623                 return ((start - offset) << ms_shift);
624         if (offset > start)
625                 return ((offset - start) << ms_shift);
626         return (0);
627 }
628
629 static uint64_t
630 metaslab_group_alloc(metaslab_group_t *mg, uint64_t size, uint64_t txg,
631     uint64_t min_distance, dva_t *dva, int d)
632 {
633         metaslab_t *msp = NULL;
634         uint64_t offset = -1ULL;
635         avl_tree_t *t = &mg->mg_metaslab_tree;
636         uint64_t activation_weight;
637         uint64_t target_distance;
638         int i;
639
640         activation_weight = METASLAB_WEIGHT_PRIMARY;
641         for (i = 0; i < d; i++)
642                 if (DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id)
643                         activation_weight = METASLAB_WEIGHT_SECONDARY;
644
645         for (;;) {
646                 mutex_enter(&mg->mg_lock);
647                 for (msp = avl_first(t); msp; msp = AVL_NEXT(t, msp)) {
648                         if (msp->ms_weight < size) {
649                                 mutex_exit(&mg->mg_lock);
650                                 return (-1ULL);
651                         }
652
653                         if (activation_weight == METASLAB_WEIGHT_PRIMARY)
654                                 break;
655
656                         target_distance = min_distance +
657                             (msp->ms_smo.smo_alloc ? 0 : min_distance >> 1);
658
659                         for (i = 0; i < d; i++)
660                                 if (metaslab_distance(msp, &dva[i]) <
661                                     target_distance)
662                                         break;
663                         if (i == d)
664                                 break;
665                 }
666                 mutex_exit(&mg->mg_lock);
667                 if (msp == NULL)
668                         return (-1ULL);
669
670                 mutex_enter(&msp->ms_lock);
671
672                 /*
673                  * Ensure that the metaslab we have selected is still
674                  * capable of handling our request. It's possible that
675                  * another thread may have changed the weight while we
676                  * were blocked on the metaslab lock.
677                  */
678                 if (msp->ms_weight < size) {
679                         mutex_exit(&msp->ms_lock);
680                         continue;
681                 }
682
683                 if ((msp->ms_weight & METASLAB_WEIGHT_SECONDARY) &&
684                     activation_weight == METASLAB_WEIGHT_PRIMARY) {
685                         metaslab_passivate(msp,
686                             msp->ms_weight & ~METASLAB_ACTIVE_MASK);
687                         mutex_exit(&msp->ms_lock);
688                         continue;
689                 }
690
691                 if (metaslab_activate(msp, activation_weight) != 0) {
692                         mutex_exit(&msp->ms_lock);
693                         continue;
694                 }
695
696                 if ((offset = space_map_alloc(&msp->ms_map, size)) != -1ULL)
697                         break;
698
699                 metaslab_passivate(msp, size - 1);
700
701                 mutex_exit(&msp->ms_lock);
702         }
703
704         if (msp->ms_allocmap[txg & TXG_MASK].sm_space == 0)
705                 vdev_dirty(mg->mg_vd, VDD_METASLAB, msp, txg);
706
707         space_map_add(&msp->ms_allocmap[txg & TXG_MASK], offset, size);
708
709         mutex_exit(&msp->ms_lock);
710
711         return (offset);
712 }
713
714 /*
715  * Allocate a block for the specified i/o.
716  */
717 static int
718 metaslab_alloc_dva(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
719     dva_t *dva, int d, dva_t *hintdva, uint64_t txg, boolean_t hintdva_avoid)
720 {
721         metaslab_group_t *mg, *rotor;
722         vdev_t *vd;
723         int dshift = 3;
724         int all_zero;
725         uint64_t offset = -1ULL;
726         uint64_t asize;
727         uint64_t distance;
728
729         ASSERT(!DVA_IS_VALID(&dva[d]));
730
731         /*
732          * For testing, make some blocks above a certain size be gang blocks.
733          */
734         if (psize >= metaslab_gang_bang && (lbolt & 3) == 0)
735                 return (ENOSPC);
736
737         /*
738          * Start at the rotor and loop through all mgs until we find something.
739          * Note that there's no locking on mc_rotor or mc_allocated because
740          * nothing actually breaks if we miss a few updates -- we just won't
741          * allocate quite as evenly.  It all balances out over time.
742          *
743          * If we are doing ditto or log blocks, try to spread them across
744          * consecutive vdevs.  If we're forced to reuse a vdev before we've
745          * allocated all of our ditto blocks, then try and spread them out on
746          * that vdev as much as possible.  If it turns out to not be possible,
747          * gradually lower our standards until anything becomes acceptable.
748          * Also, allocating on consecutive vdevs (as opposed to random vdevs)
749          * gives us hope of containing our fault domains to something we're
750          * able to reason about.  Otherwise, any two top-level vdev failures
751          * will guarantee the loss of data.  With consecutive allocation,
752          * only two adjacent top-level vdev failures will result in data loss.
753          *
754          * If we are doing gang blocks (hintdva is non-NULL), try to keep
755          * ourselves on the same vdev as our gang block header.  That
756          * way, we can hope for locality in vdev_cache, plus it makes our
757          * fault domains something tractable.
758          */
759         if (hintdva) {
760                 vd = vdev_lookup_top(spa, DVA_GET_VDEV(&hintdva[d]));
761                 if (hintdva_avoid)
762                         mg = vd->vdev_mg->mg_next;
763                 else
764                         mg = vd->vdev_mg;
765         } else if (d != 0) {
766                 vd = vdev_lookup_top(spa, DVA_GET_VDEV(&dva[d - 1]));
767                 mg = vd->vdev_mg->mg_next;
768         } else {
769                 mg = mc->mc_rotor;
770         }
771
772         /*
773          * If the hint put us into the wrong class, just follow the rotor.
774          */
775         if (mg->mg_class != mc)
776                 mg = mc->mc_rotor;
777
778         rotor = mg;
779 top:
780         all_zero = B_TRUE;
781         do {
782                 vd = mg->mg_vd;
783                 /*
784                  * Dont allocate from faulted devices
785                  */
786                 if (!vdev_writeable(vd))
787                         goto next;
788                 /*
789                  * Avoid writing single-copy data to a failing vdev
790                  */
791                 if ((vd->vdev_stat.vs_write_errors > 0 ||
792                     vd->vdev_state < VDEV_STATE_HEALTHY) &&
793                     d == 0 && dshift == 3) {
794                         all_zero = B_FALSE;
795                         goto next;
796                 }
797
798                 ASSERT(mg->mg_class == mc);
799
800                 distance = vd->vdev_asize >> dshift;
801                 if (distance <= (1ULL << vd->vdev_ms_shift))
802                         distance = 0;
803                 else
804                         all_zero = B_FALSE;
805
806                 asize = vdev_psize_to_asize(vd, psize);
807                 ASSERT(P2PHASE(asize, 1ULL << vd->vdev_ashift) == 0);
808
809                 offset = metaslab_group_alloc(mg, asize, txg, distance, dva, d);
810                 if (offset != -1ULL) {
811                         /*
812                          * If we've just selected this metaslab group,
813                          * figure out whether the corresponding vdev is
814                          * over- or under-used relative to the pool,
815                          * and set an allocation bias to even it out.
816                          */
817                         if (mc->mc_allocated == 0) {
818                                 vdev_stat_t *vs = &vd->vdev_stat;
819                                 uint64_t alloc, space;
820                                 int64_t vu, su;
821
822                                 alloc = spa_get_alloc(spa);
823                                 space = spa_get_space(spa);
824
825                                 /*
826                                  * Determine percent used in units of 0..1024.
827                                  * (This is just to avoid floating point.)
828                                  */
829                                 vu = (vs->vs_alloc << 10) / (vs->vs_space + 1);
830                                 su = (alloc << 10) / (space + 1);
831
832                                 /*
833                                  * Bias by at most +/- 25% of the aliquot.
834                                  */
835                                 mg->mg_bias = ((su - vu) *
836                                     (int64_t)mg->mg_aliquot) / (1024 * 4);
837                         }
838
839                         if (atomic_add_64_nv(&mc->mc_allocated, asize) >=
840                             mg->mg_aliquot + mg->mg_bias) {
841                                 mc->mc_rotor = mg->mg_next;
842                                 mc->mc_allocated = 0;
843                         }
844
845                         DVA_SET_VDEV(&dva[d], vd->vdev_id);
846                         DVA_SET_OFFSET(&dva[d], offset);
847                         DVA_SET_GANG(&dva[d], 0);
848                         DVA_SET_ASIZE(&dva[d], asize);
849
850                         return (0);
851                 }
852 next:
853                 mc->mc_rotor = mg->mg_next;
854                 mc->mc_allocated = 0;
855         } while ((mg = mg->mg_next) != rotor);
856
857         if (!all_zero) {
858                 dshift++;
859                 ASSERT(dshift < 64);
860                 goto top;
861         }
862
863         bzero(&dva[d], sizeof (dva_t));
864
865         return (ENOSPC);
866 }
867
868 /*
869  * Free the block represented by DVA in the context of the specified
870  * transaction group.
871  */
872 static void
873 metaslab_free_dva(spa_t *spa, const dva_t *dva, uint64_t txg, boolean_t now)
874 {
875         uint64_t vdev = DVA_GET_VDEV(dva);
876         uint64_t offset = DVA_GET_OFFSET(dva);
877         uint64_t size = DVA_GET_ASIZE(dva);
878         vdev_t *vd;
879         metaslab_t *msp;
880
881         ASSERT(DVA_IS_VALID(dva));
882
883         if (txg > spa_freeze_txg(spa))
884                 return;
885
886         if ((vd = vdev_lookup_top(spa, vdev)) == NULL ||
887             (offset >> vd->vdev_ms_shift) >= vd->vdev_ms_count) {
888                 cmn_err(CE_WARN, "metaslab_free_dva(): bad DVA %llu:%llu",
889                     (u_longlong_t)vdev, (u_longlong_t)offset);
890                 ASSERT(0);
891                 return;
892         }
893
894         msp = vd->vdev_ms[offset >> vd->vdev_ms_shift];
895
896         if (DVA_GET_GANG(dva))
897                 size = vdev_psize_to_asize(vd, SPA_GANGBLOCKSIZE);
898
899         mutex_enter(&msp->ms_lock);
900
901         if (now) {
902                 space_map_remove(&msp->ms_allocmap[txg & TXG_MASK],
903                     offset, size);
904                 space_map_free(&msp->ms_map, offset, size);
905         } else {
906                 if (msp->ms_freemap[txg & TXG_MASK].sm_space == 0)
907                         vdev_dirty(vd, VDD_METASLAB, msp, txg);
908                 space_map_add(&msp->ms_freemap[txg & TXG_MASK], offset, size);
909
910                 /*
911                  * verify that this region is actually allocated in
912                  * either a ms_allocmap or the ms_map
913                  */
914                 if (msp->ms_map.sm_loaded) {
915                         boolean_t allocd = B_FALSE;
916                         int i;
917
918                         if (!space_map_contains(&msp->ms_map, offset, size)) {
919                                 allocd = B_TRUE;
920                         } else {
921                                 for (i = 0; i < TXG_CONCURRENT_STATES; i++) {
922                                         space_map_t *sm = &msp->ms_allocmap
923                                             [(txg - i) & TXG_MASK];
924                                         if (space_map_contains(sm,
925                                             offset, size)) {
926                                                 allocd = B_TRUE;
927                                                 break;
928                                         }
929                                 }
930                         }
931
932                         if (!allocd) {
933                                 zfs_panic_recover("freeing free segment "
934                                     "(vdev=%llu offset=%llx size=%llx)",
935                                     (longlong_t)vdev, (longlong_t)offset,
936                                     (longlong_t)size);
937                         }
938                 }
939
940
941         }
942
943         mutex_exit(&msp->ms_lock);
944 }
945
946 /*
947  * Intent log support: upon opening the pool after a crash, notify the SPA
948  * of blocks that the intent log has allocated for immediate write, but
949  * which are still considered free by the SPA because the last transaction
950  * group didn't commit yet.
951  */
952 static int
953 metaslab_claim_dva(spa_t *spa, const dva_t *dva, uint64_t txg)
954 {
955         uint64_t vdev = DVA_GET_VDEV(dva);
956         uint64_t offset = DVA_GET_OFFSET(dva);
957         uint64_t size = DVA_GET_ASIZE(dva);
958         vdev_t *vd;
959         metaslab_t *msp;
960         int error;
961
962         ASSERT(DVA_IS_VALID(dva));
963
964         if ((vd = vdev_lookup_top(spa, vdev)) == NULL ||
965             (offset >> vd->vdev_ms_shift) >= vd->vdev_ms_count)
966                 return (ENXIO);
967
968         msp = vd->vdev_ms[offset >> vd->vdev_ms_shift];
969
970         if (DVA_GET_GANG(dva))
971                 size = vdev_psize_to_asize(vd, SPA_GANGBLOCKSIZE);
972
973         mutex_enter(&msp->ms_lock);
974
975         error = metaslab_activate(msp, METASLAB_WEIGHT_SECONDARY);
976         if (error) {
977                 mutex_exit(&msp->ms_lock);
978                 return (error);
979         }
980
981         if (msp->ms_allocmap[txg & TXG_MASK].sm_space == 0)
982                 vdev_dirty(vd, VDD_METASLAB, msp, txg);
983
984         space_map_claim(&msp->ms_map, offset, size);
985         space_map_add(&msp->ms_allocmap[txg & TXG_MASK], offset, size);
986
987         mutex_exit(&msp->ms_lock);
988
989         return (0);
990 }
991
992 int
993 metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize, blkptr_t *bp,
994     int ndvas, uint64_t txg, blkptr_t *hintbp, boolean_t hintbp_avoid)
995 {
996         dva_t *dva = bp->blk_dva;
997         dva_t *hintdva = hintbp->blk_dva;
998         int d;
999         int error = 0;
1000
1001         if (mc->mc_rotor == NULL)       /* no vdevs in this class */
1002                 return (ENOSPC);
1003
1004         ASSERT(ndvas > 0 && ndvas <= spa_max_replication(spa));
1005         ASSERT(BP_GET_NDVAS(bp) == 0);
1006         ASSERT(hintbp == NULL || ndvas <= BP_GET_NDVAS(hintbp));
1007
1008         for (d = 0; d < ndvas; d++) {
1009                 error = metaslab_alloc_dva(spa, mc, psize, dva, d, hintdva,
1010                     txg, hintbp_avoid);
1011                 if (error) {
1012                         for (d--; d >= 0; d--) {
1013                                 metaslab_free_dva(spa, &dva[d], txg, B_TRUE);
1014                                 bzero(&dva[d], sizeof (dva_t));
1015                         }
1016                         return (error);
1017                 }
1018         }
1019         ASSERT(error == 0);
1020         ASSERT(BP_GET_NDVAS(bp) == ndvas);
1021
1022         return (0);
1023 }
1024
1025 void
1026 metaslab_free(spa_t *spa, const blkptr_t *bp, uint64_t txg, boolean_t now)
1027 {
1028         const dva_t *dva = bp->blk_dva;
1029         int ndvas = BP_GET_NDVAS(bp);
1030         int d;
1031
1032         ASSERT(!BP_IS_HOLE(bp));
1033
1034         for (d = 0; d < ndvas; d++)
1035                 metaslab_free_dva(spa, &dva[d], txg, now);
1036 }
1037
1038 int
1039 metaslab_claim(spa_t *spa, const blkptr_t *bp, uint64_t txg)
1040 {
1041         const dva_t *dva = bp->blk_dva;
1042         int ndvas = BP_GET_NDVAS(bp);
1043         int d, error;
1044         int last_error = 0;
1045
1046         ASSERT(!BP_IS_HOLE(bp));
1047
1048         for (d = 0; d < ndvas; d++)
1049                 if ((error = metaslab_claim_dva(spa, &dva[d], txg)) != 0)
1050                         last_error = error;
1051
1052         return (last_error);
1053 }