Print this page
NEX-10069 ZFS_READONLY is a little too strict (fix test lint)
NEX-9553 Move ss_fill gap logic from scan algorithm into range_tree.c
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
NEX-6088 ZFS scrub/resilver take excessively long due to issuing lots of random IO
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-4620 ZFS autotrim triggering is unreliable
NEX-4622 On-demand TRIM code illogically enumerates metaslabs via mg_ms_tree
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>
NEX-4619 Want kstats to monitor TRIM and UNMAP operation
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
NEX-4245 WRC: Code cleanup and refactoring to simplify merge with upstream
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
Reviewed by: Alex Aizman <alex.aizman@nexenta.com>
NEX-3984 On-demand TRIM
Reviewed by: Alek Pinchuk <alek@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Conflicts:
usr/src/common/zfs/zpool_prop.c
usr/src/uts/common/sys/fs/zfs.h
NEX-3558 KRRP Integration
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/fs/zfs/sys/metaslab.h
+++ new/usr/src/uts/common/fs/zfs/sys/metaslab.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
|
↓ open down ↓ |
12 lines elided |
↑ open up ↑ |
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
23 + * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
23 24 * Copyright (c) 2011, 2016 by Delphix. All rights reserved.
24 25 */
25 26
26 27 #ifndef _SYS_METASLAB_H
27 28 #define _SYS_METASLAB_H
28 29
29 30 #include <sys/spa.h>
30 31 #include <sys/space_map.h>
31 32 #include <sys/txg.h>
32 33 #include <sys/zio.h>
33 34 #include <sys/avl.h>
34 35
35 36 #ifdef __cplusplus
36 37 extern "C" {
37 38 #endif
38 39
39 40
40 41 typedef struct metaslab_ops {
41 42 uint64_t (*msop_alloc)(metaslab_t *, uint64_t);
42 43 } metaslab_ops_t;
43 44
44 45
45 46 extern metaslab_ops_t *zfs_metaslab_ops;
46 47
47 48 int metaslab_init(metaslab_group_t *, uint64_t, uint64_t, uint64_t,
48 49 metaslab_t **);
|
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
49 50 void metaslab_fini(metaslab_t *);
50 51
51 52 void metaslab_load_wait(metaslab_t *);
52 53 int metaslab_load(metaslab_t *);
53 54 void metaslab_unload(metaslab_t *);
54 55
55 56 void metaslab_sync(metaslab_t *, uint64_t);
56 57 void metaslab_sync_done(metaslab_t *, uint64_t);
57 58 void metaslab_sync_reassess(metaslab_group_t *);
58 59 uint64_t metaslab_block_maxsize(metaslab_t *);
60 +void metaslab_auto_trim(metaslab_t *, uint64_t);
59 61
60 -#define METASLAB_HINTBP_FAVOR 0x0
61 -#define METASLAB_HINTBP_AVOID 0x1
62 -#define METASLAB_GANG_HEADER 0x2
63 -#define METASLAB_GANG_CHILD 0x4
64 -#define METASLAB_ASYNC_ALLOC 0x8
65 -#define METASLAB_DONT_THROTTLE 0x10
62 +#define METASLAB_HINTBP_FAVOR 0x00
63 +#define METASLAB_HINTBP_AVOID 0x01
64 +#define METASLAB_GANG_HEADER 0x02
65 +#define METASLAB_GANG_CHILD 0x04
66 +#define METASLAB_ASYNC_ALLOC 0x08
67 +#define METASLAB_DONT_THROTTLE 0x10
68 +#define METASLAB_USE_WEIGHT_SECONDARY 0x20
66 69
67 70 int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
68 71 blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *);
69 -int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
70 - dva_t *, int, dva_t *, uint64_t, int, zio_alloc_list_t *);
71 72 void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);
72 -void metaslab_free_concrete(vdev_t *, uint64_t, uint64_t, uint64_t);
73 -void metaslab_free_dva(spa_t *, const dva_t *, uint64_t);
74 -void metaslab_free_impl_cb(uint64_t, vdev_t *, uint64_t, uint64_t, void *);
75 -void metaslab_unalloc_dva(spa_t *, const dva_t *, uint64_t);
73 +void metaslab_free_dva(spa_t *, const dva_t *, uint64_t, boolean_t);
76 74 int metaslab_claim(spa_t *, const blkptr_t *, uint64_t);
77 -int metaslab_claim_impl(vdev_t *, uint64_t, uint64_t, uint64_t);
78 75 void metaslab_check_free(spa_t *, const blkptr_t *);
76 +zio_t *metaslab_trim_all(metaslab_t *, uint64_t *);
79 77
80 78 void metaslab_alloc_trace_init(void);
81 79 void metaslab_alloc_trace_fini(void);
82 80 void metaslab_trace_init(zio_alloc_list_t *);
83 81 void metaslab_trace_fini(zio_alloc_list_t *);
84 82
85 83 metaslab_class_t *metaslab_class_create(spa_t *, metaslab_ops_t *);
86 84 void metaslab_class_destroy(metaslab_class_t *);
87 85 int metaslab_class_validate(metaslab_class_t *);
88 86 void metaslab_class_histogram_verify(metaslab_class_t *);
89 87 uint64_t metaslab_class_fragmentation(metaslab_class_t *);
90 88 uint64_t metaslab_class_expandable_space(metaslab_class_t *);
91 89 boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int,
92 90 zio_t *, int);
93 91 void metaslab_class_throttle_unreserve(metaslab_class_t *, int, zio_t *);
94 92
95 93 void metaslab_class_space_update(metaslab_class_t *, int64_t, int64_t,
96 94 int64_t, int64_t);
97 95 uint64_t metaslab_class_get_alloc(metaslab_class_t *);
98 96 uint64_t metaslab_class_get_space(metaslab_class_t *);
99 97 uint64_t metaslab_class_get_dspace(metaslab_class_t *);
100 98 uint64_t metaslab_class_get_deferred(metaslab_class_t *);
101 99
102 100 metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *);
103 101 void metaslab_group_destroy(metaslab_group_t *);
|
↓ open down ↓ |
15 lines elided |
↑ open up ↑ |
104 102 void metaslab_group_activate(metaslab_group_t *);
105 103 void metaslab_group_passivate(metaslab_group_t *);
106 104 boolean_t metaslab_group_initialized(metaslab_group_t *);
107 105 uint64_t metaslab_group_get_space(metaslab_group_t *);
108 106 void metaslab_group_histogram_verify(metaslab_group_t *);
109 107 uint64_t metaslab_group_fragmentation(metaslab_group_t *);
110 108 void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
111 109 void metaslab_group_alloc_decrement(spa_t *, uint64_t, void *, int);
112 110 void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, void *);
113 111
112 +void metaslab_trimstats_create(spa_t *spa);
113 +void metaslab_trimstats_destroy(spa_t *spa);
114 +
114 115 #ifdef __cplusplus
115 116 }
116 117 #endif
117 118
118 119 #endif /* _SYS_METASLAB_H */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX