X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flov%2Flov_obd.c;h=2965c1da24d3ecf3def8c25340c6dd872068b841;hp=0f15c627a74ea41382496e1aeede699bbad2df6d;hb=42e83c44eb5a22cbacf1ed4c6d4d6b588e07faa9;hpb=925ce153979d6ac793a65e193181ec14a8281640 diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index 0f15c62..2965c1d 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -361,25 +361,8 @@ static int lov_set_osc_active(struct obd_device *obd, struct obd_uuid *uuid, tgt = lov->lov_tgts[index]; if (!tgt) continue; - /* - * LU-642, initially inactive OSC could miss the obd_connect, - * we make up for it here. - */ - if (ev == OBD_NOTIFY_ACTIVATE && tgt->ltd_exp == NULL && - obd_uuid_equals(uuid, &tgt->ltd_uuid)) { - struct obd_uuid lov_osc_uuid = {"LOV_OSC_UUID"}; - - obd_connect(NULL, &tgt->ltd_exp, tgt->ltd_obd, - &lov_osc_uuid, &lov->lov_ocd, NULL); - } - if (!tgt->ltd_exp) - continue; - - CDEBUG(D_INFO, "lov idx %d is %s conn %#llx\n", - index, obd_uuid2str(&tgt->ltd_uuid), - tgt->ltd_exp->exp_handle.h_cookie); - if (obd_uuid_equals(uuid, &tgt->ltd_uuid)) - break; + if (obd_uuid_equals(uuid, &tgt->ltd_uuid)) + break; } if (index == lov->desc.ld_tgt_count) @@ -388,6 +371,27 @@ static int lov_set_osc_active(struct obd_device *obd, struct obd_uuid *uuid, if (ev == OBD_NOTIFY_DEACTIVATE || ev == OBD_NOTIFY_ACTIVATE) { activate = (ev == OBD_NOTIFY_ACTIVATE) ? 1 : 0; + /* + * LU-642, initially inactive OSC could miss the obd_connect, + * we make up for it here. + */ + if (activate && !tgt->ltd_exp) { + int rc; + struct obd_uuid lov_osc_uuid = {"LOV_OSC_UUID"}; + + rc = obd_connect(NULL, &tgt->ltd_exp, tgt->ltd_obd, + &lov_osc_uuid, &lov->lov_ocd, NULL); + if (rc || tgt->ltd_exp == NULL) + GOTO(out, index = rc); + rc = obd_set_info_async(NULL, tgt->ltd_exp, + sizeof(KEY_CACHE_SET), + KEY_CACHE_SET, + sizeof(struct cl_client_cache), + lov->lov_cache, NULL); + if (rc < 0) + GOTO(out, index = rc); + } + if (lov->lov_tgts[index]->ltd_activate == activate) { CDEBUG(D_INFO, "OSC %s already %sactivate!\n", uuid->uuid, activate ? "" : "de"); @@ -422,6 +426,10 @@ static int lov_set_osc_active(struct obd_device *obd, struct obd_uuid *uuid, ev, uuid->uuid); } + if (tgt->ltd_exp) + CDEBUG(D_INFO, "%s: lov idx %d conn %llx\n", obd_uuid2str(uuid), + index, tgt->ltd_exp->exp_handle.h_cookie); + out: lov_tgts_putref(obd); RETURN(index);