Skip to content

Commit

Permalink
Make mappings?
Browse files Browse the repository at this point in the history
Signed-off-by: Paul Dagnelie <pcd@delphix.com>
  • Loading branch information
pcd1193182 committed Oct 17, 2023
1 parent 91c67ad commit 42c1255
Show file tree
Hide file tree
Showing 9 changed files with 414 additions and 43 deletions.
6 changes: 5 additions & 1 deletion cmd/zpool/zpool_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -11061,8 +11061,12 @@ zpool_do_rebalance(int argc, char **argv)

int err = zpool_rebalance(zhp, vdev);

int ret = 0;
if (err != 0)
ret = 1;

zpool_close(zhp);
return (err);
return (ret);
}

static int
Expand Down
2 changes: 2 additions & 0 deletions include/sys/metaslab.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
int);
int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
dva_t *, int, dva_t *, uint64_t, int, zio_alloc_list_t *, int);
uint64_t metaslab_group_alloc(metaslab_group_t *, zio_alloc_list_t *,
uint64_t, uint64_t, boolean_t, dva_t *, int, int, boolean_t);
void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);
void metaslab_free_concrete(vdev_t *, uint64_t, uint64_t, boolean_t);
void metaslab_free_dva(spa_t *, const dva_t *, boolean_t);
Expand Down
1 change: 1 addition & 0 deletions include/sys/spa_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ struct spa {
uint64_t spa_nonallocating_dspace;
spa_removing_phys_t spa_removing_phys;
spa_vdev_removal_t *spa_vdev_removal;
spa_vdev_rebalance_t *spa_vdev_rebalance;

spa_condensing_indirect_phys_t spa_condensing_indirect_phys;
spa_condensing_indirect_t *spa_condensing_indirect;
Expand Down
4 changes: 3 additions & 1 deletion include/sys/vdev_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,6 @@ typedef struct vdev_rebalance_node {
uint64_t vrn_offset;
uint64_t vrn_size;
dva_t vrn_dest;
uint64_t vrn_txg;
} vdev_rebalance_node_t;


Expand Down Expand Up @@ -654,6 +653,9 @@ extern uint_t zfs_vdev_max_auto_ashift;
int param_set_min_auto_ashift(ZFS_MODULE_PARAM_ARGS);
int param_set_max_auto_ashift(ZFS_MODULE_PARAM_ARGS);


extern int vdev_rebalance_node_cmp(void *a, void *b);

#ifdef __cplusplus
}
#endif
Expand Down
4 changes: 3 additions & 1 deletion include/sys/vdev_removal.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ typedef struct spa_vdev_rebalance {
uint64_t svr_vdev_id;
int svr_target;
list_t svr_sources;

uint64_t svr_start_offset;
range_tree_t *svr_allocd_segs;
} spa_vdev_rebalance_t;

typedef struct spa_condensing_indirect {
Expand All @@ -95,6 +96,7 @@ extern int spa_vdev_remove(spa_t *, uint64_t, boolean_t);
extern void free_from_removing_vdev(vdev_t *, uint64_t, uint64_t);
extern int spa_removal_get_stats(spa_t *, pool_removal_stat_t *);
extern void svr_sync(spa_t *, dmu_tx_t *);
extern void spa_rebalance_some(spa_t *, dmu_tx_t *);
extern void spa_vdev_remove_suspend(spa_t *);
extern int spa_vdev_remove_cancel(spa_t *);
extern void spa_vdev_removal_destroy(spa_vdev_removal_t *);
Expand Down
2 changes: 1 addition & 1 deletion module/zfs/metaslab.c
Original file line number Diff line number Diff line change
Expand Up @@ -5098,7 +5098,7 @@ metaslab_group_alloc_normal(metaslab_group_t *mg, zio_alloc_list_t *zal,
return (offset);
}

static uint64_t
uint64_t
metaslab_group_alloc(metaslab_group_t *mg, zio_alloc_list_t *zal,
uint64_t asize, uint64_t txg, boolean_t want_unique, dva_t *dva, int d,
int allocator, boolean_t try_hard)
Expand Down
1 change: 1 addition & 0 deletions module/zfs/spa.c
Original file line number Diff line number Diff line change
Expand Up @@ -9261,6 +9261,7 @@ spa_sync_iterate_to_convergence(spa_t *spa, dmu_tx_t *tx)
dsl_scan_sync(dp, tx);
dsl_errorscrub_sync(dp, tx);
svr_sync(spa, tx);
spa_rebalance_some(spa, tx);
spa_sync_upgrades(spa, tx);

spa_flush_metaslabs(spa, tx);
Expand Down
12 changes: 7 additions & 5 deletions module/zfs/vdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ vdev_prop_get_int(vdev_t *vd, vdev_prop_t prop, uint64_t *value)
return (err);
}

static int
int
vdev_rebalance_node_cmp(void *a, void *b)
{
vdev_rebalance_node_t *c1 = a;
Expand Down Expand Up @@ -1209,16 +1209,18 @@ typedef struct remap_segment {
uint64_t rs_asize;
uint64_t rs_split_offset;
list_node_t rs_node;
uint64_t rs_birth;
} remap_segment_t;

static remap_segment_t *
rs_alloc(vdev_t *vd, uint64_t offset, uint64_t asize, uint64_t split_offset)
rs_alloc(vdev_t *vd, uint64_t offset, uint64_t asize, uint64_t split_offset, uint64_t birth)
{
remap_segment_t *rs = kmem_alloc(sizeof (remap_segment_t), KM_SLEEP);
rs->rs_vd = vd;
rs->rs_offset = offset;
rs->rs_asize = asize;
rs->rs_split_offset = split_offset;
rs->rs_birth = birth;
return (rs);
}

Expand Down Expand Up @@ -1459,7 +1461,7 @@ vdev_indirect_remap(vdev_t *vd, uint64_t birth, uint64_t offset, uint64_t asize,
list_create(&stack, sizeof (remap_segment_t),
offsetof(remap_segment_t, rs_node));

for (remap_segment_t *rs = rs_alloc(vd, offset, asize, 0);
for (remap_segment_t *rs = rs_alloc(vd, offset, asize, 0, birth);
rs != NULL; rs = list_remove_head(&stack)) {
vdev_t *v = rs->rs_vd;

Expand Down Expand Up @@ -1489,7 +1491,7 @@ vdev_indirect_remap(vdev_t *vd, uint64_t birth, uint64_t offset, uint64_t asize,
avl_tree_t *t = vd->vdev_rebalance_tree;

vdev_rebalance_node_t *idx =
vdev_rebalance_get_first(v, birth,
vdev_rebalance_get_first(v, rs->rs_birth,
rs->rs_offset, rs->rs_asize);
vdev_rebalance_node_t *next;
if (rs->rs_offset < idx->vrn_offset) {
Expand Down Expand Up @@ -1525,7 +1527,7 @@ vdev_indirect_remap(vdev_t *vd, uint64_t birth, uint64_t offset, uint64_t asize,
if (dst_v->vdev_rebalance_tree) {
list_insert_head(&stack,
rs_alloc(dst_v, dst_offset + inner_offset,
inner_size, rs->rs_split_offset));
inner_size, rs->rs_split_offset, idx->vrn_birth));

}
func(rs->rs_split_offset, dst_v,
Expand Down
Loading

0 comments on commit 42c1255

Please sign in to comment.