* say caller that everything is okay. Real connection will be performed
* later. */
static int lmv_connect(struct lustre_handle *conn, struct obd_device *obd,
- struct obd_uuid *cluuid)
+ struct obd_uuid *cluuid, unsigned long connect_flags)
{
struct lmv_obd *lmv = &obd->u.lmv;
struct obd_export *exp;
}
lmv->cluuid = *cluuid;
+ lmv->connect_flags = connect_flags;
lmv->connected = 0;
lmv->exp = exp;
}
/* Performs a check if passed obd is connected. If no - connect it. */
-int lmv_check_connect(struct obd_device *obd) {
+int lmv_check_connect(struct obd_device *obd)
+{
struct lmv_obd *lmv = &obd->u.lmv;
struct obd_uuid *cluuid;
struct lmv_tgt_desc *tgts;
GOTO(out_disc, rc = -EINVAL);
}
- rc = obd_connect(&conn, tgt_obd, &lmv_osc_uuid);
+ rc = obd_connect(&conn, tgt_obd, &lmv_osc_uuid, lmv->connect_flags);
if (rc) {
CERROR("Target %s connect error %d\n",
tgts->uuid.uuid, rc);
}
lmv_set_timeouts(obd);
-
class_export_put(exp);
return 0;
if (lmv->refcount != 0)
goto out_local;
- lmv->connected = 0;
-
for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
if (lmv->tgts[i].ltd_exp == NULL)
continue;
if (!lmv->connected)
class_export_put(exp);
rc = class_disconnect(exp, 0);
+ if (lmv->refcount == 0)
+ lmv->connected = 0;
RETURN(rc);
}
obj = lmv_grab_obj(obd, pfid);
if (obj) {
/* directory is splitted. look for right mds for this name. */
- mds = raw_name2idx(obj->objcount, name, len);
+ mds = raw_name2idx(obj->hashtype, obj->objcount, name, len);
mds = obj->objs[mds].fid.mds;
lmv_put_obj(obj);
}
LASSERT(++loop <= 2);
obj = lmv_grab_obj(obd, &op_data->fid1);
if (obj) {
- mds = raw_name2idx(obj->objcount, op_data->name,
+ mds = raw_name2idx(obj->hashtype, obj->objcount, op_data->name,
op_data->namelen);
op_data->fid1 = obj->objs[mds].fid;
lmv_put_obj(obj);
if (obj) {
/* directory is splitted. look for right mds for this
* name */
- mds = raw_name2idx(obj->objcount, (char *)data->name,
- data->namelen);
+ mds = raw_name2idx(obj->hashtype, obj->objcount,
+ (char *)data->name, data->namelen);
data->fid1 = obj->objs[mds].fid;
lmv_put_obj(obj);
}
obj = lmv_grab_obj(obd, fid);
if (obj) {
/* directory is splitted. look for right mds for this name */
- mds = raw_name2idx(obj->objcount, filename, namelen - 1);
+ mds = raw_name2idx(obj->hashtype, obj->objcount, filename, namelen - 1);
rfid = obj->objs[mds].fid;
lmv_put_obj(obj);
}
/* usual link request */
obj = lmv_grab_obj(obd, &data->fid1);
if (obj) {
- rc = raw_name2idx(obj->objcount, data->name,
+ rc = raw_name2idx(obj->hashtype, obj->objcount, data->name,
data->namelen);
data->fid1 = obj->objs[rc].fid;
lmv_put_obj(obj);
if (obj) {
/* directory is already splitted, so we have to forward request
* to the right MDS */
- mds = raw_name2idx(obj->objcount, (char *)old, oldlen);
+ mds = raw_name2idx(obj->hashtype, obj->objcount, (char *)old, oldlen);
data->fid1 = obj->objs[mds].fid;
CDEBUG(D_OTHER, "forward to MDS #%u (%lu/%lu/%lu)\n", mds,
(unsigned long)obj->objs[mds].fid.mds,
if (obj) {
/* directory is already splitted, so we have to forward request
* to the right MDS */
- mds = raw_name2idx(obj->objcount, (char *)new, newlen);
+ mds = raw_name2idx(obj->hashtype, obj->objcount, (char *)new, newlen);
data->fid2 = obj->objs[mds].fid;
CDEBUG(D_OTHER, "forward to MDS #%u (%lu/%lu/%lu)\n", mds,
(unsigned long)obj->objs[mds].fid.mds,
obj = lmv_grab_obj(obd, &data->fid1);
if (obj) {
- i = raw_name2idx(obj->objcount, data->name,
+ i = raw_name2idx(obj->hashtype, obj->objcount, data->name,
data->namelen);
data->fid1 = obj->objs[i].fid;
lmv_put_obj(obj);
mea = (struct mea *)*ea;
if (!mea->mea_count || mea->mea_count > lmv->desc.ld_tgt_count)
mea->mea_count = lmv->desc.ld_tgt_count;
+ mea->mea_magic = MEA_MAGIC_ALL_CHARS;
mea->mea_master = -1;
lcount = lmv->desc.ld_tgt_count;
}
lmv = &obd->u.lmv;
- if (keylen >= strlen("client") && strcmp(key, "client") == 0) {
- struct lmv_tgt_desc *tgts;
- int i, rc;
-
- rc = lmv_check_connect(obd);
- if (rc)
- RETURN(rc);
-
- for (i = 0, tgts = lmv->tgts;
- i < lmv->desc.ld_tgt_count; i++, tgts++) {
- rc = obd_set_info(tgts->ltd_exp, keylen, key, vallen, val);
- if (rc)
- RETURN(rc);
- }
- RETURN(0);
- } else if (keylen >= strlen("inter_mds") && strcmp(key, "inter_mds") == 0) {
+ if (keylen >= strlen("inter_mds") && strcmp(key, "inter_mds") == 0) {
lmv->server_timeout = 1;
lmv_set_timeouts(obd);
RETURN(0);