X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fnodemap_range.c;h=da7143f14e3b11f6ed011a6f15e1322143723fa1;hb=7aa58847b94d0ebb2796774a2de2183ba7f8cc4b;hp=e8b5a247c343067ca8357516bf355c38af2726d9;hpb=2e0d4e010eb4c2e28507f55c1b649d70bccd06a0;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/nodemap_range.c b/lustre/ptlrpc/nodemap_range.c index e8b5a24..da7143f 100644 --- a/lustre/ptlrpc/nodemap_range.c +++ b/lustre/ptlrpc/nodemap_range.c @@ -71,9 +71,10 @@ static enum interval_iter range_cb(struct interval_node *n, void *data) */ struct lu_nid_range *range_create(struct nodemap_range_tree *nm_range_tree, lnet_nid_t start_nid, lnet_nid_t end_nid, - struct lu_nodemap *nodemap) + struct lu_nodemap *nodemap, unsigned range_id) { struct lu_nid_range *range; + int rc; if (LNET_NIDNET(start_nid) != LNET_NIDNET(end_nid) || LNET_NIDADDR(start_nid) > LNET_NIDADDR(end_nid)) @@ -86,10 +87,23 @@ struct lu_nid_range *range_create(struct nodemap_range_tree *nm_range_tree, return NULL; } - nm_range_tree->nmrt_range_highest_id++; - range->rn_id = nm_range_tree->nmrt_range_highest_id; + /* if we are loading from save, use on disk id num */ + if (range_id != 0) { + if (nm_range_tree->nmrt_range_highest_id < range_id) + nm_range_tree->nmrt_range_highest_id = range_id; + range->rn_id = range_id; + } else { + nm_range_tree->nmrt_range_highest_id++; + range->rn_id = nm_range_tree->nmrt_range_highest_id; + } range->rn_nodemap = nodemap; - interval_set(&range->rn_node, start_nid, end_nid); + + rc = interval_set(&range->rn_node, start_nid, end_nid); + if (rc < 0) { + OBD_FREE_PTR(range); + return NULL; + } + INIT_LIST_HEAD(&range->rn_list); return range;