|
20 | 20 | */
|
21 | 21 | /*
|
22 | 22 | * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
23 |
| - * Copyright (c) 2011 by Delphix. All rights reserved. |
| 23 | + * Copyright (c) 2012 by Delphix. All rights reserved. |
24 | 24 | * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
|
25 | 25 | */
|
26 | 26 |
|
@@ -2317,13 +2317,22 @@ zio_alloc_zil(spa_t *spa, uint64_t txg, blkptr_t *new_bp, blkptr_t *old_bp,
|
2317 | 2317 |
|
2318 | 2318 | ASSERT(txg > spa_syncing_txg(spa));
|
2319 | 2319 |
|
2320 |
| - if (use_slog) |
| 2320 | + /* |
| 2321 | + * ZIL blocks are always contiguous (i.e. not gang blocks) so we |
| 2322 | + * set the METASLAB_GANG_AVOID flag so that they don't "fast gang" |
| 2323 | + * when allocating them. |
| 2324 | + */ |
| 2325 | + if (use_slog) { |
2321 | 2326 | error = metaslab_alloc(spa, spa_log_class(spa), size,
|
2322 |
| - new_bp, 1, txg, old_bp, METASLAB_HINTBP_AVOID); |
| 2327 | + new_bp, 1, txg, old_bp, |
| 2328 | + METASLAB_HINTBP_AVOID | METASLAB_GANG_AVOID); |
| 2329 | + } |
2323 | 2330 |
|
2324 |
| - if (error) |
| 2331 | + if (error) { |
2325 | 2332 | error = metaslab_alloc(spa, spa_normal_class(spa), size,
|
2326 |
| - new_bp, 1, txg, old_bp, METASLAB_HINTBP_AVOID); |
| 2333 | + new_bp, 1, txg, old_bp, |
| 2334 | + METASLAB_HINTBP_AVOID | METASLAB_GANG_AVOID); |
| 2335 | + } |
2327 | 2336 |
|
2328 | 2337 | if (error == 0) {
|
2329 | 2338 | BP_SET_LSIZE(new_bp, size);
|
|
0 commit comments