struct lfsck_instance *lfsck,
const struct lu_fid *fid)
{
- struct seq_server_site *ss =
- lu_site2seq(lfsck->li_bottom->dd_lu_dev.ld_site);
+ struct seq_server_site *ss = lfsck_dev_site(lfsck);
struct lu_seq_range *range = &lfsck_env_info(env)->lti_range;
int rc;
const char *name)
{
struct dt_object *parent = lfsck->li_lpf_root_obj;
- struct dt_device *dev = lfsck->li_next;
+ struct dt_device *dev = lfsck_obj2dev(parent);
struct thandle *th;
struct lustre_handle lh = { 0 };
int rc;
if (rc != 0)
GOTO(stop, rc);
- rc = dt_trans_start(env, dev, th);
+ rc = dt_trans_start_local(env, dev, th);
if (rc != 0)
GOTO(stop, rc);
{
struct dt_insert_rec *rec = &lfsck_env_info(env)->lti_dt_rec;
struct dt_object *parent = lfsck->li_lpf_root_obj;
- struct dt_device *dev = lfsck->li_bottom;
+ struct dt_device *dev = lfsck_obj2dev(child);
struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
struct dt_object *bk_obj = lfsck->li_bookmark_obj;
const struct lu_fid *cfid = lfsck_dto2fid(child);
/* Transaction I: locally */
- dev = lfsck->li_bottom;
+ dev = lfsck_obj2dev(child);
th = dt_trans_create(env, dev);
if (IS_ERR(th))
RETURN(PTR_ERR(th));
/* Transaction II: remotely */
- dev = lfsck->li_next;
+ dev = lfsck_obj2dev(parent);
th = dt_trans_create(env, dev);
if (IS_ERR(th))
RETURN(PTR_ERR(th));
+ th->th_sync = 1;
/* 5a. insert name into parent dir */
rec->rec_fid = cfid;
rc = dt_declare_insert(env, parent, (const struct dt_rec *)rec,
if (rc != 0)
GOTO(stop, rc);
- rc = dt_trans_start(env, dev, th);
+ rc = dt_trans_start_local(env, dev, th);
if (rc != 0)
GOTO(stop, rc);
stop:
dt_trans_stop(env, dev, th);
- if (rc != 0 && dev == lfsck->li_next)
+ if (rc != 0 && dev == lfsck_obj2dev(parent))
CDEBUG(D_LFSCK, "%s: partially created the object "DFID
"for orphans, but failed to insert the name %s "
"to the .lustre/lost+found/. Such inconsistency "
struct dt_object *child = NULL;
struct lustre_handle lh = { 0 };
char name[8];
- int node = lfsck_dev_idx(lfsck->li_bottom);
+ int node = lfsck_dev_idx(lfsck);
int rc = 0;
ENTRY;
*cfid = bk->lb_lpf_fid;
}
- child = lfsck_object_find_by_dev(env, lfsck->li_bottom, cfid);
+ child = lfsck_object_find_bottom(env, lfsck, cfid);
if (IS_ERR(child))
GOTO(unlock, rc = PTR_ERR(child));
unlock:
lfsck_ibits_unlock(&lh, LCK_EX);
if (rc != 0 && child != NULL && !IS_ERR(child))
- lu_object_put(env, &child->do_lu);
+ lfsck_object_put(env, child);
return rc;
}
}
cname = lfsck_name_get_const(env, name, strlen(name));
- rc = lfsck_verify_linkea(env, lfsck->li_bottom, child, cname,
- &LU_LPF_FID);
+ rc = lfsck_verify_linkea(env, child, cname, &LU_LPF_FID);
if (rc == 0)
rc = lfsck_update_lpf_entry(env, lfsck, parent, child,
name, type);
GOTO(out_done, rc);
}
- parent2 = lfsck_object_find_by_dev(env, lfsck->li_next, fid);
+ parent2 = lfsck_object_find_bottom(env, lfsck, fid);
if (IS_ERR(parent2))
GOTO(linkea, parent2);
if (!dt_object_exists(parent2)) {
- lu_object_put(env, &parent2->do_lu);
+ lfsck_object_put(env, parent2);
GOTO(linkea, parent2 = ERR_PTR(-ENOENT));
}
if (!dt_try_as_dir(env, parent2)) {
- lu_object_put(env, &parent2->do_lu);
+ lfsck_object_put(env, parent2);
GOTO(linkea, parent2 = ERR_PTR(-ENOTDIR));
}
out_put:
if (parent2 != NULL && !IS_ERR(parent2))
- lu_object_put(env, &parent2->do_lu);
+ lfsck_object_put(env, parent2);
out_done:
return rc;
struct dt_object *child1 = NULL;
/* child2's FID is in the name entry MDTxxxx. */
struct dt_object *child2 = NULL;
- struct dt_device *dev = lfsck->li_bottom;
const struct lu_name *cname;
char name[8];
- int node = lfsck_dev_idx(dev);
+ int node = lfsck_dev_idx(lfsck);
int rc = 0;
ENTRY;
RETURN(0);
if (node == 0) {
- parent = lfsck_object_find_by_dev(env, dev, &LU_LPF_FID);
+ parent = lfsck_object_find_by_dev(env, lfsck->li_bottom,
+ &LU_LPF_FID);
} else {
struct lfsck_tgt_desc *ltd;
LASSERT(dt_object_exists(parent));
if (unlikely(!dt_try_as_dir(env, parent))) {
- lu_object_put(env, &parent->do_lu);
+ lfsck_object_put(env, parent);
GOTO(put, rc = -ENOTDIR);
}
if (rc != 0)
GOTO(put, rc);
} else {
- child1 = lfsck_object_find_by_dev(env, dev,
+ child1 = lfsck_object_find_bottom(env, lfsck,
&bk->lb_lpf_fid);
if (IS_ERR(child1)) {
child1 = NULL;
if (rc != 0)
GOTO(put, rc);
- lu_object_put(env, &child1->do_lu);
+ lfsck_object_put(env, child1);
child1 = NULL;
} else if (unlikely(!dt_try_as_dir(env, child1))) {
GOTO(put, rc = -ENOTDIR);
goto check_child1;
}
- child2 = lfsck_object_find_by_dev(env, dev, cfid);
+ child2 = lfsck_object_find_bottom(env, lfsck, cfid);
if (IS_ERR(child2))
GOTO(put, rc = PTR_ERR(child2));
}
cname = lfsck_name_get_const(env, name, strlen(name));
- rc = lfsck_verify_linkea(env, dev, child2, cname, &LU_LPF_FID);
+ rc = lfsck_verify_linkea(env, child2, cname, &LU_LPF_FID);
}
GOTO(put, rc);
put:
if (lfsck->li_lpf_obj != NULL) {
if (unlikely(!dt_try_as_dir(env, lfsck->li_lpf_obj))) {
- lu_object_put(env, &lfsck->li_lpf_obj->do_lu);
+ lfsck_object_put(env, lfsck->li_lpf_obj);
lfsck->li_lpf_obj = NULL;
rc = -ENOTDIR;
}
}
if (child2 != NULL && !IS_ERR(child2))
- lu_object_put(env, &child2->do_lu);
+ lfsck_object_put(env, child2);
if (child1 != NULL && !IS_ERR(child1))
- lu_object_put(env, &child1->do_lu);
+ lfsck_object_put(env, child1);
return rc;
}
static int lfsck_fid_init(struct lfsck_instance *lfsck)
{
struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
- struct seq_server_site *ss;
+ struct seq_server_site *ss = lfsck_dev_site(lfsck);
char *prefix;
int rc = 0;
ENTRY;
- ss = lu_site2seq(lfsck->li_bottom->dd_lu_dev.ld_site);
if (unlikely(ss == NULL))
RETURN(-ENXIO);
LASSERT(thread_is_init(thread) || thread_is_stopped(thread));
if (lfsck->li_obj_oit != NULL) {
- lu_object_put_nocache(env, &lfsck->li_obj_oit->do_lu);
+ lfsck_object_put(env, lfsck->li_obj_oit);
lfsck->li_obj_oit = NULL;
}
lfsck_tgt_descs_fini(&lfsck->li_mdt_descs);
if (lfsck->li_lfsck_dir != NULL) {
- lu_object_put_nocache(env, &lfsck->li_lfsck_dir->do_lu);
+ lfsck_object_put(env, lfsck->li_lfsck_dir);
lfsck->li_lfsck_dir = NULL;
}
if (lfsck->li_bookmark_obj != NULL) {
- lu_object_put_nocache(env, &lfsck->li_bookmark_obj->do_lu);
+ lfsck_object_put(env, lfsck->li_bookmark_obj);
lfsck->li_bookmark_obj = NULL;
}
if (lfsck->li_lpf_obj != NULL) {
- lu_object_put(env, &lfsck->li_lpf_obj->do_lu);
+ lfsck_object_put(env, lfsck->li_lpf_obj);
lfsck->li_lpf_obj = NULL;
}
if (lfsck->li_lpf_root_obj != NULL) {
- lu_object_put(env, &lfsck->li_lpf_root_obj->do_lu);
+ lfsck_object_put(env, lfsck->li_lpf_root_obj);
lfsck->li_lpf_root_obj = NULL;
}
spin_unlock(<ds->ltd_lock);
memset(lr, 0, sizeof(*lr));
- lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
+ lr->lr_index = lfsck_dev_idx(lfsck);
lr->lr_event = LE_PEER_EXIT;
lr->lr_active = type;
lr->lr_status = LS_CO_PAUSED;
memset(lr, 0, sizeof(*lr));
lr->lr_event = LE_STOP;
- lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
+ lr->lr_index = lfsck_dev_idx(lfsck);
lr->lr_status = stop->ls_status;
lr->lr_version = bk->lb_version;
lr->lr_active = LFSCK_TYPES_ALL;
memset(lr, 0, sizeof(*lr));
lr->lr_event = LE_START;
- lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
+ lr->lr_index = lfsck_dev_idx(lfsck);
lr->lr_speed = bk->lb_speed_limit;
lr->lr_version = bk->lb_version;
lr->lr_active = start->ls_active;
lfsck->li_local_root_fid = *fid;
if (master) {
lfsck->li_master = 1;
- if (lfsck_dev_idx(key) == 0) {
+ if (lfsck_dev_idx(lfsck) == 0) {
struct lu_fid *pfid = &lfsck_env_info(env)->lti_fid2;
const struct lu_name *cname;
if (rc != 0)
GOTO(out, rc);
- lu_object_put(env, &obj->do_lu);
+ lfsck_object_put(env, obj);
obj = dt_locate(env, key, fid);
if (IS_ERR(obj))
GOTO(out, rc = PTR_ERR(obj));
cname = lfsck_name_get_const(env, dotlustre,
strlen(dotlustre));
- rc = lfsck_verify_linkea(env, key, obj, cname,
+ rc = lfsck_verify_linkea(env, obj, cname,
&lfsck->li_global_root_fid);
if (rc != 0)
GOTO(out, rc);
if (rc != 0)
GOTO(out, rc);
- lu_object_put(env, &obj->do_lu);
+ lfsck_object_put(env, obj);
obj = dt_locate(env, key, fid);
if (IS_ERR(obj))
GOTO(out, rc = PTR_ERR(obj));
cname = lfsck_name_get_const(env, lostfound,
strlen(lostfound));
- rc = lfsck_verify_linkea(env, key, obj, cname, pfid);
+ rc = lfsck_verify_linkea(env, obj, cname, pfid);
if (rc != 0)
GOTO(out, rc);
- lu_object_put(env, &obj->do_lu);
+ lfsck_object_put(env, obj);
obj = NULL;
}
}
rc = lfsck_add_target_from_orphan(env, lfsck);
out:
if (obj != NULL && !IS_ERR(obj))
- lu_object_put(env, &obj->do_lu);
+ lfsck_object_put(env, obj);
if (root != NULL && !IS_ERR(root))
- lu_object_put(env, &root->do_lu);
+ lfsck_object_put(env, root);
if (rc != 0)
lfsck_instance_cleanup(env, lfsck);
return rc;