RETURN(-ENOMEM);
}
+ rc = lov_ost_pool_add(&lov->lov_packed, index, lov->lov_tgt_size);
+ if (rc) {
+ mutex_up(&lov->lov_lock);
+ OBD_FREE_PTR(tgt);
+ RETURN(rc);
+ }
+
memset(tgt, 0, sizeof(*tgt));
tgt->ltd_uuid = *uuidp;
/* XXX - add a sanity check on the generation number. */
if (index >= lov->desc.ld_tgt_count)
lov->desc.ld_tgt_count = index + 1;
- rc = lov_ost_pool_add(&lov->lov_packed, index, lov->lov_tgt_size);
- if (rc)
- RETURN(rc);
-
mutex_up(&lov->lov_lock);
CDEBUG(D_CONFIG, "idx=%d ltd_gen=%d ld_tgt_count=%d\n",
rc = lov_notify(obd, tgt->ltd_exp->exp_obd,
active ? OBD_NOTIFY_CONNECT : OBD_NOTIFY_INACTIVE,
(void *)&index);
-
out:
if (rc) {
- CERROR("add failed (%d), deleting %s\n", rc,
+ /* connect or notify failed - we can try connect later
+ * instead of complete delete target */
+ CERROR("connect or notify failed (%d) for %s\n", rc,
obd_uuid2str(&tgt->ltd_uuid));
- lov_del_target(obd, index, 0, 0);
}
lov_putref(obd);
RETURN(rc);