struct lustre_dquot *dquot = NULL;
ENTRY;
- OBD_SLAB_ALLOC(dquot, lustre_dquot_cachep, CFS_ALLOC_IO, sizeof(*dquot));
+ OBD_SLAB_ALLOC_PTR_GFP(dquot, lustre_dquot_cachep, CFS_ALLOC_IO);
if (dquot == NULL)
RETURN(NULL);
}
if (rc2)
- CDEBUG(rc2 == -EAGAIN ? D_QUOTA: D_ERROR,
- "mds adjust qunit failed! (opc:%d rc:%d)\n", opc, rc2);
+ CDEBUG(rc2 == QUOTA_REQ_RETURNED ? D_QUOTA: D_ERROR,
+ "mds adjust qunit %ssuccessfully! (opc:%d rc:%d)\n",
+ rc2 == QUOTA_REQ_RETURNED ? "" : "un", opc, rc2);
RETURN(0);
}
if (rc || rc2) {
if (!rc)
rc = rc2;
- CDEBUG(rc == -EAGAIN ? D_QUOTA: D_ERROR,
- "filter adjust qunit failed! (opc:%d rc%d)\n",
- opc, rc);
+ CDEBUG(rc == QUOTA_REQ_RETURNED ? D_QUOTA: D_ERROR,
+ "filter adjust qunit %ssuccessfully! (opc:%d rc%d)\n",
+ QUOTA_REQ_RETURNED ? "" : "un", opc, rc);
}
RETURN(0);
{
struct qmaster_recov_thread_data *data = arg;
struct obd_device *obd = data->obd;
+ struct mds_obd *mds = &obd->u.mds;
+ struct lustre_quota_info *qinfo = &mds->mds_quota_info;
int rc = 0;
unsigned short type;
ENTRY;
ptlrpc_daemonize("qmaster_recovd");
+ /* for mds */
+ class_incref(obd, "qmaster_recovd_mds", obd);
+ /* for lov */
+ class_incref(mds->mds_osc_obd, "qmaster_recovd_lov", mds->mds_osc_obd);
+
complete(&data->comp);
for (type = USRQUOTA; type < MAXQUOTAS; type++) {
- struct mds_obd *mds = &obd->u.mds;
- struct lustre_quota_info *qinfo = &mds->mds_quota_info;
struct list_head id_list;
struct dquot_id *dqid, *tmp;
kfree(dqid);
}
}
+ class_decref(mds->mds_osc_obd, "qmaster_recovd_lov", mds->mds_osc_obd);
+ class_decref(obd, "qmaster_recovd_mds", obd);
RETURN(rc);
}
int mds_quota_recovery(struct obd_device *obd)
{
struct mds_obd *mds = &obd->u.mds;
- struct lov_obd *lov = &mds->mds_osc_obd->u.lov;
struct qmaster_recov_thread_data data;
int rc = 0;
ENTRY;
- if (unlikely(!mds->mds_quota))
+ if (unlikely(!mds->mds_quota || obd->obd_stopping))
RETURN(rc);
- mutex_down(&lov->lov_lock);
- if (lov->desc.ld_tgt_count != lov->desc.ld_active_tgt_count) {
- CWARN("Not all osts are active, abort quota recovery\n");
- mutex_up(&lov->lov_lock);
+ mutex_down(&obd->obd_dev_sem);
+ if (mds->mds_lov_desc.ld_active_tgt_count != mds->mds_lov_objid_count) {
+ CWARN("Only %u/%u OSTs are active, abort quota recovery\n",
+ mds->mds_lov_desc.ld_active_tgt_count,
+ mds->mds_lov_objid_count);
+ mutex_up(&obd->obd_dev_sem);
RETURN(rc);
}
- mutex_up(&lov->lov_lock);
+ mutex_up(&obd->obd_dev_sem);
data.obd = obd;
init_completion(&data.comp);