int seq_store_write(struct lu_server_seq *seq,
const struct lu_context *ctx)
{
- struct dt_object *dt_obj = seq->seq_obj;
- struct dt_device *dt_dev = seq->seq_dev;
+ struct dt_object *dt_obj = seq->lss_obj;
struct seq_thread_info *info;
+ struct dt_device *dt_dev;
struct thandle *th;
loff_t pos = 0;
int rc;
ENTRY;
+ dt_dev = lu2dt_dev(seq->lss_obj->do_lu.lo_dev);
info = lu_context_key_get(ctx, &seq_thread_key);
LASSERT(info != NULL);
th = dt_dev->dd_ops->dt_trans_start(ctx, dt_dev, &info->sti_txn);
if (!IS_ERR(th)) {
/* store ranges in le format */
- range_to_le(&info->sti_record.ssr_space, &seq->seq_space);
- range_to_le(&info->sti_record.ssr_super, &seq->seq_super);
-
+ range_cpu_to_le(&info->sti_record.ssr_space, &seq->lss_space);
+ range_cpu_to_le(&info->sti_record.ssr_super, &seq->lss_super);
+
rc = dt_obj->do_body_ops->dbo_write(ctx, dt_obj,
(char *)&info->sti_record,
sizeof(info->sti_record),
&pos, th);
if (rc == sizeof(info->sti_record)) {
+ CDEBUG(D_INFO|D_WARNING, "store %s ranges: space - "
+ DRANGE", super - "DRANGE"\n",
+ (seq->lss_type == LUSTRE_SEQ_SERVER ?
+ "server" : "controller"),
+ PRANGE(&seq->lss_space), PRANGE(&seq->lss_super));
+
rc = 0;
} else if (rc >= 0) {
rc = -EIO;
int seq_store_read(struct lu_server_seq *seq,
const struct lu_context *ctx)
{
- struct dt_object *dt_obj = seq->seq_obj;
+ struct dt_object *dt_obj = seq->lss_obj;
struct seq_thread_info *info;
loff_t pos = 0;
int rc;
rc = dt_obj->do_body_ops->dbo_read(ctx, dt_obj,
(char *)&info->sti_record,
sizeof(info->sti_record), &pos);
+
if (rc == sizeof(info->sti_record)) {
- seq->seq_space = info->sti_record.ssr_space;
- lustre_swab_lu_range(&seq->seq_space);
-
- seq->seq_super = info->sti_record.ssr_super;
- lustre_swab_lu_range(&seq->seq_super);
+ range_le_to_cpu(&seq->lss_space, &info->sti_record.ssr_space);
+ range_le_to_cpu(&seq->lss_super, &info->sti_record.ssr_super);
+
+ CDEBUG(D_INFO|D_WARNING, "read %s ranges: space - "DRANGE", super "
+ "- "DRANGE"\n", (seq->lss_type == LUSTRE_SEQ_SERVER ?
+ "server" : "controller"),
+ PRANGE(&seq->lss_space), PRANGE(&seq->lss_super));
rc = 0;
} else if (rc == 0) {
rc = -ENODATA;
} else if (rc >= 0) {
- CERROR("read only %d bytes of %d\n",
- rc, sizeof(info->sti_record));
+ CERROR("read only %d bytes of %d\n", rc, sizeof(info->sti_record));
rc = -EIO;
}
}
int seq_store_init(struct lu_server_seq *seq,
- const struct lu_context *ctx)
+ const struct lu_context *ctx,
+ struct dt_device *dt)
{
- struct dt_device *dt = seq->seq_dev;
struct dt_object *dt_obj;
struct lu_fid fid;
+ const char *name;
int rc;
ENTRY;
- LASSERT(seq->seq_service == NULL);
-
- dt_obj = dt_store_open(ctx, dt, "seq", &fid);
+ name = seq->lss_type == LUSTRE_SEQ_SERVER ?
+ "seq_srv" : "seq_ctl";
+
+ dt_obj = dt_store_open(ctx, dt, name, &fid);
if (!IS_ERR(dt_obj)) {
- seq->seq_obj = dt_obj;
+ seq->lss_obj = dt_obj;
rc = 0;
} else {
CERROR("cannot find \"seq\" obj %d\n",
const struct lu_context *ctx)
{
ENTRY;
- if (seq->seq_obj != NULL) {
- lu_object_put(ctx, &seq->seq_obj->do_lu);
- seq->seq_obj = NULL;
+
+ if (seq->lss_obj != NULL) {
+ if (!IS_ERR(seq->lss_obj))
+ lu_object_put(ctx, &seq->lss_obj->do_lu);
+ seq->lss_obj = NULL;
}
+
EXIT;
}
#endif