}
}
- if (lu_seq_range_is_zero(&seq->lss_lowater_set))
+ if (lu_seq_range_is_zero(&seq->lss_lowater_set) && seq->lss_set_width)
__seq_set_init(env, seq);
RETURN(rc);
RETURN(rc);
}
- rc = range_alloc_set(env, out, seq);
+ if (seq->lss_set_width) {
+ rc = range_alloc_set(env, out, seq);
+ } else {
+ range_alloc(out, space, seq->lss_width);
+ rc = seq_store_update(env, seq, NULL, 1);
+ }
+
if (rc != 0) {
CERROR("%s: Allocated meta-sequence failed: rc = %d\n",
seq->lss_name, rc);
seq, &seq_fld_debugfs_seq_fops);
}
-int seq_server_init(const struct lu_env *env,
- struct lu_server_seq *seq,
- struct dt_device *dev,
- const char *prefix,
- enum lu_mgr_type type,
- struct seq_server_site *ss)
+int seq_server_init(const struct lu_env *env, struct lu_server_seq *seq,
+ struct dt_device *dev, const char *prefix,
+ enum lu_mgr_type type, struct seq_server_site *ss,
+ bool set_batch_width)
{
int rc, is_srv = (type == LUSTRE_SEQ_SERVER);
ENTRY;
lu_seq_range_init(&seq->lss_lowater_set);
lu_seq_range_init(&seq->lss_hiwater_set);
- seq->lss_set_width = LUSTRE_SEQ_BATCH_WIDTH;
+ seq->lss_set_width = set_batch_width ? LUSTRE_SEQ_BATCH_WIDTH : 0;
mutex_init(&seq->lss_mutex);
/* Server methods */
-int seq_server_init(const struct lu_env *env,
- struct lu_server_seq *seq,
- struct dt_device *dev,
- const char *prefix,
- enum lu_mgr_type type,
- struct seq_server_site *ss);
+int seq_server_init(const struct lu_env *env, struct lu_server_seq *seq,
+ struct dt_device *dev, const char *prefix,
+ enum lu_mgr_type type, struct seq_server_site *ss,
+ bool set_batch_width);
void seq_server_fini(struct lu_server_seq *seq,
const struct lu_env *env);
rc = seq_server_init(env, ss->ss_control_seq, mdt->mdt_bottom,
mdt_obd_name(mdt), LUSTRE_SEQ_CONTROLLER,
- ss);
+ ss, true);
if (rc)
GOTO(out_seq_fini, rc);
}
GOTO(out_seq_fini, rc = -ENOMEM);
rc = seq_server_init(env, ss->ss_server_seq, mdt->mdt_bottom,
- mdt_obd_name(mdt), LUSTRE_SEQ_SERVER, ss);
+ mdt_obd_name(mdt), LUSTRE_SEQ_SERVER, ss, true);
if (rc)
GOTO(out_seq_fini, rc);
GOTO(out_name, rc = -ENOMEM);
rc = seq_server_init(env, ss->ss_server_seq, ofd->ofd_osd, obd_name,
- LUSTRE_SEQ_SERVER, ss);
+ LUSTRE_SEQ_SERVER, ss, false);
if (rc) {
CERROR("%s: seq server init error: rc = %d\n", obd_name, rc);
GOTO(out_server, rc);
}
run_test 154 "expand .. on rename after MDT backup restore"
+test_155() {
+ (( OST1_VERSION >= $(version_code 2.16.50.134) )) ||
+ skip "Need OST version at least 2.16.50.134"
+
+ reformat_and_config
+ setupall
+
+ rm -rf $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
+ $LFS setstripe -c 1 -i 0 $DIR/$tdir
+
+ force_new_seq mds1
+ touch $DIR/$tdir/$tfile
+ local seq1=$($LFS getstripe --yaml $DIR/$tdir/$tfile |
+ awk -F ':' '/l_fid:/ {print $2}' | tr -d [:blank:])
+
+ stopall
+ setupall
+
+ force_new_seq mds1
+ touch $DIR/$tdir/${tfile}2
+ local seq2=$($LFS getstripe --yaml $DIR/$tdir/${tfile}2 |
+ awk -F ':' '/l_fid:/ {print $2}' | tr -d [:blank:])
+
+ (( seq2 == seq1 + 1 )) || error "gap in seq: old $seq1 new $seq2"
+}
+run_test 155 "gap in seq allocation from ofd after restarting"
+
cleanup_200() {
local modopts=$1
stopall