spin_lock_init(&set->set_lock);
}
-static void lov_finish_set(struct lov_request_set *set)
+void lov_finish_set(struct lov_request_set *set)
{
struct list_head *pos, *n;
ENTRY;
} else if (set->set_lockh)
lov_llh_put(set->set_lockh);
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc ? rc : ret);
}
(flags & LDLM_FL_TEST_LOCK))
lov_llh_put(set->set_lockh);
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
if (set->set_lockh)
lov_llh_put(set->set_lockh);
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
if (set->set_completes)
rc = create_done(set->set_exp, set, lsmp);
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
-
+ lov_put_reqset(set);
RETURN(rc);
}
struct lov_request *lovreq;
lovreq = container_of(oinfo, struct lov_request, rq_oi);
- return lov_update_create_set(lovreq->rq_rqset, lovreq, rc);
+ rc= lov_update_create_set(lovreq->rq_rqset, lovreq, rc);
+ if (lov_finished_set(lovreq->rq_rqset))
+ lov_put_reqset(lovreq->rq_rqset);
+ return rc;
}
set->set_oi->oi_md = *lsmp;
set->set_oi->oi_oa = src_oa;
set->set_oti = oti;
+ lov_get_reqset(set);
rc = qos_prep_create(exp, set);
/* qos_shrink_lsm() may have allocated a new lsm */
*lsmp = oinfo->oi_md;
- if (rc)
+ if (rc) {
lov_fini_create_set(set, lsmp);
- else
+ lov_put_reqset(set);
+ } else {
*reqset = set;
+ }
RETURN(rc);
}
rc = brw_done(set);
/* FIXME update qos data here */
}
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
if (set->set_completes)
rc = common_attr_done(set);
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
/* FIXME update qos data here */
}
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(0);
}
/* FIXME update qos data here */
}
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
rc = common_attr_done(set);
}
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
/* FIXME update qos data here */
}
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
+ lov_put_reqset(set);
RETURN(rc);
}
rc = lov_fini_statfs(set->set_obd, set->set_oi->oi_osfs,
set->set_success);
}
-
- if (atomic_dec_and_test(&set->set_refcount))
- lov_finish_set(set);
-
+ lov_put_reqset(set);
RETURN(rc);
}