X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flmv%2Flmv_obd.c;h=dadea414f07f40fa2fece8d95a4995866e2a978f;hb=960c1ec8c030cc48b3208e892849dcf5722f28aa;hp=3d04d42d8e1f0ce8fae641e66a3a75a56a4e946e;hpb=24d9df04b12d7b4d62d21f4c7677f2e2280ccf7d;p=fs%2Flustre-release.git diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c index 3d04d42..dadea41 100644 --- a/lustre/lmv/lmv_obd.c +++ b/lustre/lmv/lmv_obd.c @@ -299,7 +299,6 @@ int lmv_check_connect(struct obd_device *obd) { } lmv_set_timeouts(obd); - class_export_put(exp); return 0; @@ -377,6 +376,8 @@ out_local: if (!lmv->connected) class_export_put(exp); rc = class_disconnect(exp, 0); + if (lmv->refcount == 0) + lmv->connected = 0; RETURN(rc); } @@ -658,7 +659,7 @@ static int lmv_change_cbdata_name(struct obd_export *exp, struct ll_fid *pfid, 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); } @@ -766,7 +767,7 @@ repeat: 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); @@ -903,8 +904,8 @@ int lmv_enqueue(struct obd_export *exp, int lock_type, 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); } @@ -938,7 +939,7 @@ repeat: 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); } @@ -1003,7 +1004,7 @@ int lmv_link(struct obd_export *exp, struct mdc_op_data *data, /* 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); @@ -1081,7 +1082,7 @@ int lmv_rename(struct obd_export *exp, struct mdc_op_data *data, 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, @@ -1094,7 +1095,7 @@ int lmv_rename(struct obd_export *exp, struct mdc_op_data *data, 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, @@ -1357,7 +1358,7 @@ int lmv_unlink(struct obd_export *exp, struct mdc_op_data *data, 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); @@ -1497,6 +1498,7 @@ int lmv_obd_create(struct obd_export *exp, struct obdo *oa, 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;