X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosp%2Fosp_dev.c;h=af6ef02adb1ddc25b996d0c79735cc731863272a;hb=eca3d26005c16ba7b7cd74d17ad51f94ac7c482f;hp=b2db05e2311ee4f76eb4a4519202fb29bda9f602;hpb=1012193babecb36ce331880188aed4f4db5b1daf;p=fs%2Flustre-release.git diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c index b2db05e..af6ef02 100644 --- a/lustre/osp/osp_dev.c +++ b/lustre/osp/osp_dev.c @@ -351,9 +351,6 @@ static int osp_shutdown(const struct lu_env *env, struct osp_device *d) ENTRY; LASSERT(env); - /* release last_used file */ - if (!d->opd_connect_mdt) - osp_last_used_fini(env, d); rc = osp_disconnect(d); @@ -363,6 +360,9 @@ static int osp_shutdown(const struct lu_env *env, struct osp_device *d) /* stop sync thread */ osp_sync_fini(d); + + /* release last_used file */ + osp_last_used_fini(env, d); } obd_fid_fini(d->opd_obd); @@ -598,6 +598,7 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, RETURN(-EINVAL); } m->opd_index = idx; + m->opd_group = 0; idx = tgt - src; } else { /* New OSC name fsname-OSTXXXX-osc-MDTXXXX */ @@ -608,8 +609,18 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, RETURN(-EINVAL); } + idx = simple_strtol(tgt + 4, &mdt, 16); + if (*mdt != '\0' || idx > INT_MAX || idx < 0) { + CERROR("%s: invalid OST index in '%s'\n", + m->opd_obd->obd_name, src); + RETURN(-EINVAL); + } + + /* Get MDT index from the name and set it to opd_group, + * which will be used by OSP to connect with OST */ + m->opd_group = idx; if (tgt - src <= 12) { - CERROR("%s: invalid target name %s\n", + CERROR("%s: invalid mdt index retrieve from %s\n", m->opd_obd->obd_name, lustre_cfg_string(cfg, 0)); RETURN(-EINVAL); } @@ -684,6 +695,14 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, rc = osp_last_used_init(env, m); if (rc) GOTO(out_proc, rc); + + rc = obd_fid_init(m->opd_obd, NULL, LUSTRE_SEQ_DATA); + if (rc) { + CERROR("%s: fid init error: rc = %d\n", + m->opd_obd->obd_name, rc); + GOTO(out_last_used, rc); + } + /* Initialize precreation thread, it handles new * connections as well. */ rc = osp_init_precreate(m); @@ -698,12 +717,6 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, if (rc) GOTO(out_precreat, rc); - rc = obd_fid_init(m->opd_obd, NULL, LUSTRE_SEQ_DATA); - if (rc) { - CERROR("%s: fid init error: rc = %d\n", - m->opd_obd->obd_name, rc); - GOTO(out, rc); - } } /* * Initiate connect to OST @@ -729,11 +742,14 @@ out_precreat: if (!m->opd_connect_mdt) osp_precreate_fini(m); out_last_used: - osp_last_used_fini(env, m); + if (!m->opd_connect_mdt) + osp_last_used_fini(env, m); out_proc: ptlrpc_lprocfs_unregister_obd(obd); lprocfs_obd_cleanup(obd); - class_destroy_import(obd->u.cli.cl_import); + obd_cleanup_client_import(obd); + if (m->opd_symlink) + lprocfs_remove(&m->opd_symlink); client_obd_cleanup(obd); out_ref: ptlrpcd_decref();