#include "cmm_internal.h"
#include "mdc_internal.h"
+/* XXX: fix layter this hack. It exists because OSD produces fids with like
+ this: seq = ROOT_SEQ + 1, etc. */
+static int cmm_special_fid(const struct lu_fid *fid)
+{
+ if (fid_seq(fid) < LUSTRE_SEQ_SPACE_START)
+ return 1;
+ return 0;
+}
+
#ifdef CMM_CODE
static int cmm_fld_lookup(struct cmm_device *cm,
const struct lu_fid *fid)
__u64 mds;
int rc;
ENTRY;
-
+
LASSERT(fid_is_sane(fid));
rc = fld_client_lookup(&cm->cmm_fld, fid_seq(fid), &mds);
if (rc) {
int mdsnum, rc;
ENTRY;
- /* get object location */
- mdsnum = cmm_fld_lookup(lu2cmm_dev(ld), fid);
+ /* XXX: is this correct? We need this to prevent FLD lookups while CMM
+ * did not initialized yet all MDCs. */
+ if (cmm_special_fid(fid))
+ mdsnum = 0;
+ else
+ /* get object location */
+ mdsnum = cmm_fld_lookup(lu2cmm_dev(ld), fid);
/* select the proper set of operations based on object location */
if (mdsnum == lu2cmm_dev(ld)->cmm_local_num) {
ENTRY;
+ /* XXX: is this correct? We need this to prevent FLD lookups while CMM
+ * did not initialized yet all MDCs. */
+ if (cmm_special_fid(fid))
+ mdsnum = 0;
+ else
+ mdsnum = cmm_fld_lookup(cd, fid);
+
/* under device can be MDD or MDC */
- mdsnum = cmm_fld_lookup(cd, fid);
c_dev = cmm_get_child(cd, mdsnum);
if (c_dev == NULL) {
rc = -ENOENT;
rc = seq_client_rpc(seq, &seq->seq_cl_range,
SEQ_ALLOC_SUPER);
if (rc == 0) {
- CDEBUG(D_INFO, "SEQ-MGR(cli): allocated super-sequence "
+ CDEBUG(D_INFO|D_WARNING, "SEQ-MGR(cli): allocated super-sequence "
"["LPX64"-"LPX64"]\n", seq->seq_cl_range.lr_start,
seq->seq_cl_range.lr_end);
}
rc = seq_client_rpc(seq, &seq->seq_cl_range,
SEQ_ALLOC_META);
if (rc == 0) {
- CDEBUG(D_INFO, "SEQ-MGR(cli): allocated meta-sequence "
+ CDEBUG(D_INFO|D_WARNING, "SEQ-MGR(cli): allocated meta-sequence "
"["LPX64"-"LPX64"]\n", seq->seq_cl_range.lr_start,
seq->seq_cl_range.lr_end);
}
up(&seq->seq_sem);
if (rc == 0) {
- CDEBUG(D_INFO, "SEQ-MGR(cli): allocated sequence "
+ CDEBUG(D_INFO|D_WARNING, "SEQ-MGR(cli): allocated sequence "
"["LPX64"]\n", *seqnr);
}
RETURN(rc);
if (rc)
seq_client_fini(seq);
else
- CDEBUG(D_INFO, "Client Sequence Manager initialized\n");
+ CDEBUG(D_INFO|D_WARNING, "Client Sequence Manager initialized\n");
return rc;
}
EXPORT_SYMBOL(seq_client_init);
class_export_put(seq->seq_exp);
seq->seq_exp = NULL;
}
- CDEBUG(D_INFO, "Client Sequence Manager finalized\n");
+ CDEBUG(D_INFO|D_WARNING, "Client Sequence Manager finalized\n");
EXIT;
}
EXPORT_SYMBOL(seq_client_fini);
}
if (rc == 0) {
- CDEBUG(D_INFO, "SEQ-MGR(srv): allocated super-sequence "
- "["LPX64"-"LPX64"]\n", range->lr_start,
- range->lr_end);
+ CDEBUG(D_INFO|D_WARNING, "SEQ-MGR(srv): allocated super-sequence "
+ "["LPX64"-"LPX64"]\n", range->lr_start, range->lr_end);
}
RETURN(rc);
range->lr_end = ms_range->lr_start;
if (rc == 0) {
- CDEBUG(D_INFO, "SEQ-MGR(srv): allocated meta-sequence "
- "["LPX64"-"LPX64"]\n", range->lr_start,
- range->lr_end);
+ CDEBUG(D_INFO|D_WARNING, "SEQ-MGR(srv): allocated meta-sequence "
+ "["LPX64"-"LPX64"]\n", range->lr_start, range->lr_end);
}
RETURN(rc);
if (rc)
seq_server_fini(seq, ctx);
else
- CDEBUG(D_INFO, "Server Sequence Manager initialized\n");
+ CDEBUG(D_INFO|D_WARNING, "Server Sequence Manager initialized\n");
return rc;
}
EXPORT_SYMBOL(seq_server_init);
seq->seq_dev = NULL;
}
- CDEBUG(D_INFO, "Server Sequence Manager finalized\n");
+ CDEBUG(D_INFO|D_WARNING, "Server Sequence Manager finalized\n");
}
EXPORT_SYMBOL(seq_server_fini);
static int fid_init(void)
{
ENTRY;
- CDEBUG(D_INFO, "Lustre Sequence Manager\n");
+ CDEBUG(D_INFO|D_WARNING, "Lustre Sequence Manager\n");
RETURN(0);
}
LASSERT(exp != NULL);
+ CWARN("adding export %s\n", exp->exp_client_uuid.uuid);
+
spin_lock(&fld->fld_lock);
list_for_each_entry(fld_exp, &fld->fld_exports, exp_fld_chain) {
if (obd_uuid_equals(&fld_exp->exp_client_uuid,
ENTRY;
fld_exp = fld_client_get_export(fld, seq);
- if (!fld_exp) {
- /* XXX: hack, should be fixed later */
- rc = 0;
- *mds = 0;
- } else {
- md_fld.mf_seq = seq;
- rc = fld_client_rpc(fld_exp,
- &md_fld, FLD_LOOKUP);
- if (rc == 0)
- *mds = md_fld.mf_mds;
- }
+ if (!fld_exp)
+ RETURN(-EINVAL);
+
+ md_fld.mf_seq = seq;
+ rc = fld_client_rpc(fld_exp,
+ &md_fld, FLD_LOOKUP);
+ if (rc == 0)
+ *mds = md_fld.mf_mds;
RETURN(rc);
}
.lct_fini = fld_key_fini
};
+/* XXX: disabled until IAM is ready */
+#if 0
static struct dt_key *fld_key(const struct lu_context *ctx,
const fidseq_t seq)
{
info->fti_rec = cpu_to_be64(mds);
RETURN((void *)&info->fti_rec);
}
+#endif
int fld_handle_insert(struct lu_server_fld *fld,
const struct lu_context *ctx,
fidseq_t seq, mdsno_t mds)
{
+#if 0
struct dt_device *dt = fld->fld_dt;
struct dt_object *dt_obj = fld->fld_obj;
struct txn_param txn;
dt->dd_ops->dt_trans_stop(ctx, th);
RETURN(rc);
+#endif
+ /* XXX: stub until IAM is ready */
+ return 0;
}
int fld_handle_delete(struct lu_server_fld *fld,
const struct lu_context *ctx,
fidseq_t seq)
{
+#if 0
struct dt_device *dt = fld->fld_dt;
struct dt_object *dt_obj = fld->fld_obj;
struct txn_param txn;
dt->dd_ops->dt_trans_stop(ctx, th);
RETURN(rc);
+#endif
+ /* XXX: stub until IAM is ready */
+ return 0;
}
int fld_handle_lookup(struct lu_server_fld *fld,
const struct lu_context *ctx,
fidseq_t seq, mdsno_t *mds)
{
+#if 0
struct dt_object *dt_obj = fld->fld_obj;
struct dt_rec *rec = fld_rec(ctx, 0);
int rc;
if (rc == 0)
*mds = be64_to_cpu(*(__u64 *)rec);
RETURN(rc);
+#endif
+ /* XXX: stub until IAM is ready */
+ *mds = 0;
+ return 0;
}
int fld_iam_init(struct lu_server_fld *fld,
//for_all_existing_mdt except current one
for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
char *mdtname;
- if (i != mti->mti_stripe_index &&
+ if (/*i != mti->mti_stripe_index &&*/
test_bit(i, fsdb->fsdb_mdt_index_map)) {
sprintf(mdt_index,"-MDT%04x",i);
{
struct inode *inode = dentry->d_inode;
int result;
+
/*
* Build fid from inode.
*/
struct dt_rec *rec, const struct dt_key *key)
{
struct osd_object *obj = osd_dt_obj(dt);
-if (!S_ISDIR(obj->oo_inode->i_mode)) {
- struct iam_path_descr *ipd;
- int rc;
+ if (!S_ISDIR(obj->oo_inode->i_mode)) {
+ struct iam_path_descr *ipd;
+ int rc;
- ENTRY;
+ ENTRY;
- LASSERT(lu_object_exists(ctxt, &dt->do_lu));
- LASSERT(obj->oo_container.ic_object == obj->oo_inode);
+ LASSERT(lu_object_exists(ctxt, &dt->do_lu));
+ LASSERT(obj->oo_container.ic_object == obj->oo_inode);
- ipd = lu_context_key_get(ctxt, obj->oo_cookie_key);
- LASSERT(ipd != NULL);
+ ipd = lu_context_key_get(ctxt, obj->oo_cookie_key);
+ LASSERT(ipd != NULL);
- rc = iam_lookup(&obj->oo_container, (const struct iam_key *)key,
- (struct iam_rec *)rec, ipd);
+ rc = iam_lookup(&obj->oo_container, (const struct iam_key *)key,
+ (struct iam_rec *)rec, ipd);
- RETURN(rc);
-} else {
- struct osd_object *obj = osd_dt_obj(dt);
- struct osd_device *osd = osd_obj2dev(obj);
- struct osd_thread_info *info = lu_context_key_get(ctxt, &osd_key);
- struct inode *dir;
+ RETURN(rc);
+ } else {
+ struct osd_object *obj = osd_dt_obj(dt);
+ struct osd_device *osd = osd_obj2dev(obj);
+ struct osd_thread_info *info = lu_context_key_get(ctxt, &osd_key);
+ struct inode *dir;
- int result;
+ int result;
- /*
- * XXX temporary solution.
- */
- struct dentry *dentry;
- struct dentry *parent;
+ /*
+ * XXX temporary solution.
+ */
+ struct dentry *dentry;
+ struct dentry *parent;
- LASSERT(osd_has_index(obj));
- LASSERT(osd->od_obj_area != NULL);
+ LASSERT(osd_has_index(obj));
+ LASSERT(osd->od_obj_area != NULL);
- info->oti_str.name = (const char *)key;
- info->oti_str.len = strlen((const char *)key);
+ info->oti_str.name = (const char *)key;
+ info->oti_str.len = strlen((const char *)key);
- dir = obj->oo_inode;
- LASSERT(dir->i_op != NULL && dir->i_op->lookup != NULL);
+ dir = obj->oo_inode;
+ LASSERT(dir->i_op != NULL && dir->i_op->lookup != NULL);
- parent = d_alloc_root(dir);
- if (parent == NULL)
- return -ENOMEM;
+ parent = d_alloc_root(dir);
+ if (parent == NULL)
+ return -ENOMEM;
- dentry = d_alloc(parent, &info->oti_str);
- if (dentry != NULL) {
- struct dentry *d;
+ dentry = d_alloc(parent, &info->oti_str);
+ if (dentry != NULL) {
+ struct dentry *d;
- /*
- * XXX passing NULL for nameidata should work for
- * ext3/ldiskfs.
- */
- d = dir->i_op->lookup(dir, dentry, NULL);
- if (d == NULL) {
/*
- * normal case, result is in @dentry.
+ * XXX passing NULL for nameidata should work for
+ * ext3/ldiskfs.
*/
- if (dentry->d_inode != NULL)
- result = osd_build_fid(osd, dentry,
- (struct lu_fid *)rec);
- else
- result = -ENOENT;
- } else {
- /* What? Disconnected alias? Ppheeeww... */
- CERROR("Aliasing where not expected\n");
- result = -EIO;
- dput(d);
- }
- dput(dentry);
- } else
- result = -ENOMEM;
- dput(parent);
- return result;
-}
+ d = dir->i_op->lookup(dir, dentry, NULL);
+ if (d == NULL) {
+ /*
+ * normal case, result is in @dentry.
+ */
+ if (dentry->d_inode != NULL)
+ result = osd_build_fid(osd, dentry,
+ (struct lu_fid *)rec);
+ else
+ result = -ENOENT;
+ } else {
+ /* What? Disconnected alias? Ppheeeww... */
+ CERROR("Aliasing where not expected\n");
+ result = -EIO;
+ dput(d);
+ }
+ dput(dentry);
+ } else
+ result = -ENOMEM;
+ dput(parent);
+ return result;
+ }
}
static int osd_add_rec(struct osd_thread_info *info, struct osd_device *dev,