*gen = lad->lad_touch_gen;
list_move_tail(phase_list, phase_head);
- atomic_inc(<d->ltd_ref);
+ kref_get(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
lfsck_lfsck2name(lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
ltd->ltd_index, lad->lad_name, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
rc1 = rc;
}
spin_lock(<ds->ltd_lock);
"%s: LFSCK assistant fail to notify OST %x for %s start: rc = %d\n",
lfsck_lfsck2name(lfsck), idx,
lad->lad_name, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
}
up_read(<ds->ltd_rw_sem);
<d->ltd_namespace_phase_list);
list_del_init(<d->ltd_namespace_list);
}
- atomic_inc(<d->ltd_ref);
+ kref_get(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
(lr->lr_flags & LEF_TO_OST) ?
"OST" : "MDT", ltd->ltd_index,
lad->lad_name, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
spin_lock(<ds->ltd_lock);
}
if (ltd->ltd_synced_failures)
continue;
- atomic_inc(<d->ltd_ref);
+ kref_get(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
"%s: LFSCK assistant fail to notify MDT %x for %s phase1 done: rc = %d\n",
lfsck_lfsck2name(lfsck), ltd->ltd_index,
lad->lad_name, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
spin_lock(<ds->ltd_lock);
}
list_for_each_entry_safe(ltd, next, <ds->ltd_orphan,
ltd_orphan_list) {
list_del_init(<d->ltd_orphan_list);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
if (unlikely(!ltds->ltd_tgts_bitmap)) {
ltds->ltd_tgtnr--;
clear_bit(idx, ltds->ltd_tgts_bitmap);
lfsck_assign_tgt(ltds, NULL, idx);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
}
parent = lfsck_object_find_by_dev(env, ltd->ltd_tgt,
&LU_LPF_FID);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
if (IS_ERR(parent))
}
if (!laia->laia_shared) {
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
lfsck_component_put(env, com);
}
memset(laia, 0, sizeof(*laia));
laia->laia_com = com;
laia->laia_ltds = ltds;
- atomic_inc(<d->ltd_ref);
+ kref_get(<d->ltd_ref);
laia->laia_ltd = ltd;
laia->laia_lr = lr;
lfsck_lfsck2name(lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
ltd->ltd_index, lad->lad_name, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
} else {
rc = ptlrpc_set_wait(env, set);
}
lfsck = container_of(laia->laia_ltds, struct lfsck_instance,
li_mdt_descs);
lfsck_interpret(env, lfsck, req, laia, rc);
- lfsck_tgt_put(laia->laia_ltd);
+ kref_put(&laia->laia_ltd->ltd_ref, lfsck_tgt_free);
if (rc != 0 && laia->laia_result != -EALREADY)
laia->laia_result = rc;
(lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
ltd->ltd_index, lad->lad_name, rc);
lfsck_reset_ltd_status(ltd, com->lc_type);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
down_read(<ds->ltd_rw_sem);
}
LFSCK_NOTIFY);
if (rc != 0) {
lfsck_interpret(env, lfsck, NULL, laia, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
CERROR("%s: cannot notify MDT %x for LFSCK stop: rc = %d\n",
lfsck_lfsck2name(lfsck), idx, rc);
rc1 = rc;
LASSERT(ltd != NULL);
if (retry && !ltd->ltd_retry_start) {
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
continue;
}
LFSCK_NOTIFY);
if (rc != 0) {
lfsck_interpret(env, lfsck, NULL, laia, rc);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
CERROR("%s: cannot notify MDT %x for LFSCK start, failout: rc = %d\n",
lfsck_lfsck2name(lfsck), idx, rc);
break;
INIT_LIST_HEAD(<d->ltd_layout_phase_list);
INIT_LIST_HEAD(<d->ltd_namespace_list);
INIT_LIST_HEAD(<d->ltd_namespace_phase_list);
- atomic_set(<d->ltd_ref, 1);
+ kref_init(<d->ltd_ref);
ltd->ltd_index = index;
spin_lock(&lfsck_instance_lock);
rc = __lfsck_add_target(env, lfsck, ltd, for_ost, false);
if (rc != 0)
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
lfsck_instance_put(env, lfsck);
if (ltd->ltd_tgt == tgt) {
list_del_init(<d->ltd_orphan_list);
spin_unlock(&lfsck_instance_lock);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
return;
}
spin_unlock(<ds->ltd_lock);
lfsck_stop_notify(env, lfsck, ltds, ltd, LFSCK_TYPE_NAMESPACE);
lfsck_stop_notify(env, lfsck, ltds, ltd, LFSCK_TYPE_LAYOUT);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
lfsck_instance_put(env, lfsck);
list_for_each_entry_safe(ltd, next, &lfsck_ost_orphan_list,
ltd_orphan_list) {
list_del_init(<d->ltd_orphan_list);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
list_for_each_entry_safe(ltd, next, &lfsck_mdt_orphan_list,
ltd_orphan_list) {
list_del_init(<d->ltd_orphan_list);
- lfsck_tgt_put(ltd);
+ kref_put(<d->ltd_ref, lfsck_tgt_free);
}
lu_context_key_degister(&lfsck_thread_key);
}
+void lfsck_tgt_free(struct kref *kref)
+{
+ struct lfsck_tgt_desc *ltd = container_of(kref, struct lfsck_tgt_desc,
+ ltd_ref);
+
+ OBD_FREE_PTR(ltd);
+}
+
MODULE_AUTHOR("OpenSFS, Inc. <http://www.lustre.org/>");
MODULE_DESCRIPTION("Lustre File System Checker");
MODULE_VERSION(LUSTRE_VERSION_STRING);