PFID(&info->lti_fid), rc);
RETURN(rc);
}
- } else if (lod_comp->llc_ostlist.op_array) {
+ } else if (lod_comp->llc_ostlist.op_array &&
+ lod_comp->llc_ostlist.op_count) {
/* user specified ost list */
ost_idx = lod_comp->llc_ostlist.op_array[i];
}
v3->lmm_stripe_offset = v3->lmm_objects[0].l_ost_idx;
if (lod_comp->llc_ostlist.op_array) {
- if (lod_comp->llc_ostlist.op_count ==
- v3->lmm_stripe_count)
+ if (lod_comp->llc_ostlist.op_size >=
+ v3->lmm_stripe_count * sizeof(__u32)) {
+ lod_comp->llc_ostlist.op_count =
+ v3->lmm_stripe_count;
goto skip;
+ }
OBD_FREE(lod_comp->llc_ostlist.op_array,
lod_comp->llc_ostlist.op_size);
}
__u16 comp_cnt;
__u16 mirror_cnt;
bool composite;
- int rc, i;
+ int rc, i, j;
ENTRY;
lds->lds_def_striping_set = 0;
rc = lod_comp_copy_ost_lists(lod_comp, v3);
if (rc)
RETURN(rc);
+ } else if (lod_comp->llc_ostlist.op_array &&
+ lod_comp->llc_ostlist.op_count) {
+ for (j = 0; j < lod_comp->llc_ostlist.op_count; j++)
+ lod_comp->llc_ostlist.op_array[j] = -1;
+ lod_comp->llc_ostlist.op_count = 0;
}
}
}
/* copy ost list */
- if (def_comp->llc_ostlist.op_array) {
+ if (def_comp->llc_ostlist.op_array &&
+ def_comp->llc_ostlist.op_count) {
OBD_ALLOC(obj_comp->llc_ostlist.op_array,
obj_comp->llc_ostlist.op_size);
if (!obj_comp->llc_ostlist.op_array)
memcpy(obj_comp->llc_ostlist.op_array,
def_comp->llc_ostlist.op_array,
obj_comp->llc_ostlist.op_size);
+ } else if (def_comp->llc_ostlist.op_array) {
+ obj_comp->llc_ostlist.op_array = NULL;
}
/*
LASSERT(lo->ldo_comp_cnt > comp_idx && lo->ldo_comp_entries != NULL);
lod_comp = &lo->ldo_comp_entries[comp_idx];
LASSERT(lod_comp->llc_ostlist.op_array);
+ LASSERT(lod_comp->llc_ostlist.op_count);
rc = lod_qos_ost_in_use_clear(env, lod_comp->llc_stripe_count);
if (rc < 0)
CDEBUG(D_OTHER, "tgt_count %d stripe_count %d\n",
d->lod_desc.ld_tgt_count, stripe_len);
- if (lod_comp->llc_ostlist.op_array) {
+ if (lod_comp->llc_ostlist.op_array &&
+ lod_comp->llc_ostlist.op_count) {
rc = lod_alloc_ost_list(env, lo, stripe, ost_indices,
th, comp_idx);
} else if (lod_comp->llc_stripe_offset == LOV_OFFSET_DEFAULT) {
run_test 27G "Clear OST pool from stripe"
test_27H() {
- [[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.11.53) ]] &&
- skip "Need MDS version newer than 2.11.53"
+ [[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.11.54) ]] &&
+ skip "Need MDS version newer than 2.11.54"
[[ $OSTCOUNT -lt 3 ]] && skip_env "needs >= 3 OSTs"
test_mkdir $DIR/$tdir
$LFS setstripe -o 0 -o 2 $DIR/$tdir || error "setstripe failed"
(( $($LFS getstripe -y $DIR/$tdir/$tfile |
egrep -c "l_ost_idx: [02]$") == "2" )) ||
error "expected l_ost_idx: [02]$ not matched"
+
+ # make sure ost list have been cleared
+ local stripesize=$($GETSTRIPE -S $DIR/$tdir)
+ $LFS setstripe -S $((stripesize * 4)) -i 1 \
+ -c $((OSTCOUNT - 1)) $DIR/$tdir || error "setstripe"
+ touch $DIR/$tdir/f3
+ $LVERIFY $DIR/$tdir $DIR/$tdir/f3 || error "lverify failed"
}
run_test 27H "Set specific OSTs stripe"