b=17752
i=yury.umanets
i=tianzy
Disable quota support for CMD case temporary.
- /* disable quota for CMD case temporary. */
- if (cmm_dev->cmm_tgt_count)
- RETURN(-EOPNOTSUPP);
-
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_notify(env,
cmm_dev->cmm_child);
RETURN(rc);
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_notify(env,
cmm_dev->cmm_child);
RETURN(rc);
- /* disable quota for CMD case temporary. */
- if (cmm_dev->cmm_tgt_count)
- RETURN(-EOPNOTSUPP);
-
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_setup(env,
cmm_dev->cmm_child,
data);
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_setup(env,
cmm_dev->cmm_child,
data);
- /* disable quota for CMD case temporary. */
- if (cmm_dev->cmm_tgt_count)
- RETURN(-EOPNOTSUPP);
-
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_cleanup(env,
cmm_dev->cmm_child);
RETURN(rc);
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_cleanup(env,
cmm_dev->cmm_child);
RETURN(rc);
- /* disable quota for CMD case temporary. */
- if (cmm_dev->cmm_tgt_count)
- RETURN(-EOPNOTSUPP);
-
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_recovery(env,
cmm_dev->cmm_child);
RETURN(rc);
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_recovery(env,
cmm_dev->cmm_child);
RETURN(rc);
}
static int cmm_quota_on(const struct lu_env *env, struct md_device *m,
}
static int cmm_quota_on(const struct lu_env *env, struct md_device *m,
{
struct cmm_device *cmm_dev = md2cmm_dev(m);
int rc;
{
struct cmm_device *cmm_dev = md2cmm_dev(m);
int rc;
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_on(env,
cmm_dev->cmm_child,
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_on(env,
cmm_dev->cmm_child,
RETURN(rc);
}
static int cmm_quota_off(const struct lu_env *env, struct md_device *m,
RETURN(rc);
}
static int cmm_quota_off(const struct lu_env *env, struct md_device *m,
{
struct cmm_device *cmm_dev = md2cmm_dev(m);
int rc;
{
struct cmm_device *cmm_dev = md2cmm_dev(m);
int rc;
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_off(env,
cmm_dev->cmm_child,
rc = cmm_child_ops(cmm_dev)->mdo_quota.mqo_off(env,
cmm_dev->cmm_child,
mdsno_t mdc_num;
struct lu_site *site = cmm2lu_dev(cm)->ld_site;
int rc;
mdsno_t mdc_num;
struct lu_site *site = cmm2lu_dev(cm)->ld_site;
int rc;
+#ifdef HAVE_QUOTA_SUPPORT
+ int first;
+#endif
ENTRY;
/* find out that there is no such mdc */
ENTRY;
/* find out that there is no such mdc */
mc = lu2mdc_dev(ld);
list_add_tail(&mc->mc_linkage, &cm->cmm_targets);
cm->cmm_tgt_count++;
mc = lu2mdc_dev(ld);
list_add_tail(&mc->mc_linkage, &cm->cmm_targets);
cm->cmm_tgt_count++;
+#ifdef HAVE_QUOTA_SUPPORT
+ first = cm->cmm_tgt_count;
+#endif
spin_unlock(&cm->cmm_tgt_guard);
lu_device_get(cmm_lu);
spin_unlock(&cm->cmm_tgt_guard);
lu_device_get(cmm_lu);
lu_site2md(site)->ms_server_fld->lsf_control_exp =
mc->mc_desc.cl_exp;
}
lu_site2md(site)->ms_server_fld->lsf_control_exp =
mc->mc_desc.cl_exp;
}
+#ifdef HAVE_QUOTA_SUPPORT
+ /* XXX: Disable quota for CMD case temporary. */
+ if (first == 1) {
+ CWARN("Disable quota for CMD case temporary!\n");
+ cmm_child_ops(cm)->mdo_quota.mqo_off(env, cm->cmm_child, UGQUOTA);
+ }
+#endif
/* Set max md size for the mdc. */
rc = cmm_post_init_mdc(env, cm);
RETURN(rc);
/* Set max md size for the mdc. */
rc = cmm_post_init_mdc(env, cm);
RETURN(rc);
int (*mqo_on)(const struct lu_env *env,
struct md_device *m,
int (*mqo_on)(const struct lu_env *env,
struct md_device *m,
- __u32 type,
- __u32 id);
int (*mqo_off)(const struct lu_env *env,
struct md_device *m,
int (*mqo_off)(const struct lu_env *env,
struct md_device *m,
- __u32 type,
- __u32 id);
int (*mqo_setinfo)(const struct lu_env *env,
struct md_device *m,
int (*mqo_setinfo)(const struct lu_env *env,
struct md_device *m,
int mdd_quota_check(const struct lu_env *env, struct md_device *m,
struct obd_export *exp, __u32 type);
int mdd_quota_on(const struct lu_env *env, struct md_device *m,
int mdd_quota_check(const struct lu_env *env, struct md_device *m,
struct obd_export *exp, __u32 type);
int mdd_quota_on(const struct lu_env *env, struct md_device *m,
int mdd_quota_off(const struct lu_env *env, struct md_device *m,
int mdd_quota_off(const struct lu_env *env, struct md_device *m,
int mdd_quota_setinfo(const struct lu_env *env, struct md_device *m,
__u32 type, __u32 id, struct obd_dqinfo *dqinfo);
int mdd_quota_getinfo(const struct lu_env *env, const struct md_device *m,
int mdd_quota_setinfo(const struct lu_env *env, struct md_device *m,
__u32 type, __u32 id, struct obd_dqinfo *dqinfo);
int mdd_quota_getinfo(const struct lu_env *env, const struct md_device *m,
}
int mdd_quota_on(const struct lu_env *env, struct md_device *m,
}
int mdd_quota_on(const struct lu_env *env, struct md_device *m,
{
struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev);
struct obd_device *obd = mdd->mdd_obd_dev;
{
struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev);
struct obd_device *obd = mdd->mdd_obd_dev;
oqctl->qc_cmd = Q_QUOTAON;
oqctl->qc_type = type;
oqctl->qc_cmd = Q_QUOTAON;
oqctl->qc_type = type;
rc = lquota_ctl(mds_quota_interface_ref, obd, oqctl);
RETURN(rc);
}
int mdd_quota_off(const struct lu_env *env, struct md_device *m,
rc = lquota_ctl(mds_quota_interface_ref, obd, oqctl);
RETURN(rc);
}
int mdd_quota_off(const struct lu_env *env, struct md_device *m,
{
struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev);
struct obd_device *obd = mdd->mdd_obd_dev;
{
struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev);
struct obd_device *obd = mdd->mdd_obd_dev;
oqctl->qc_cmd = Q_QUOTAOFF;
oqctl->qc_type = type;
oqctl->qc_cmd = Q_QUOTAOFF;
oqctl->qc_type = type;
rc = lquota_ctl(mds_quota_interface_ref, obd, oqctl);
RETURN(rc);
}
rc = lquota_ctl(mds_quota_interface_ref, obd, oqctl);
RETURN(rc);
}
switch (oqctl->qc_cmd) {
case Q_QUOTAON:
switch (oqctl->qc_cmd) {
case Q_QUOTAON:
- rc = mqo->mqo_on(info->mti_env, next, oqctl->qc_type, id);
+ rc = mqo->mqo_on(info->mti_env, next, oqctl->qc_type);
- rc = mqo->mqo_off(info->mti_env, next, oqctl->qc_type, id);
+ rc = mqo->mqo_off(info->mti_env, next, oqctl->qc_type);
break;
case Q_SETINFO:
rc = mqo->mqo_setinfo(info->mti_env, next, oqctl->qc_type, id,
break;
case Q_SETINFO:
rc = mqo->mqo_setinfo(info->mti_env, next, oqctl->qc_type, id,
+ if (unlikely(mds->mds_quota)) {
+ CWARN("try to reinitialize quota context!\n");
+ RETURN(0);
+ }
+
init_rwsem(&obt->obt_rwsem);
obt->obt_qfmt = LUSTRE_QUOTA_V2;
mds->mds_quota_info.qi_version = LUSTRE_QUOTA_V2;
init_rwsem(&obt->obt_rwsem);
obt->obt_qfmt = LUSTRE_QUOTA_V2;
mds->mds_quota_info.qi_version = LUSTRE_QUOTA_V2;
static int mds_quota_cleanup(struct obd_device *obd)
{
ENTRY;
static int mds_quota_cleanup(struct obd_device *obd)
{
ENTRY;
- obd->u.mds.mds_quota = 0;
+ if (unlikely(!obd->u.mds.mds_quota))
+ RETURN(0);
+
qctxt_cleanup(&obd->u.obt.obt_qctxt, 0);
RETURN(0);
}
qctxt_cleanup(&obd->u.obt.obt_qctxt, 0);
RETURN(0);
}
struct lustre_quota_ctxt *qctxt = &obd->u.obt.obt_qctxt;
ENTRY;
struct lustre_quota_ctxt *qctxt = &obd->u.obt.obt_qctxt;
ENTRY;
+ if (unlikely(!obd->u.mds.mds_quota))
+ RETURN(0);
+
if (data != NULL)
QUOTA_MASTER_READY(qctxt);
else
if (data != NULL)
QUOTA_MASTER_READY(qctxt);
else
struct obd_quotactl oqctl;
ENTRY;
struct obd_quotactl oqctl;
ENTRY;
+ if (unlikely(!mds->mds_quota))
+ RETURN(0);
+
+ mds->mds_quota = 0;
memset(&oqctl, 0, sizeof(oqctl));
oqctl.qc_type = UGQUOTA;
memset(&oqctl, 0, sizeof(oqctl));
oqctl.qc_type = UGQUOTA;
int mds_quota_recovery(struct obd_device *obd)
{
int mds_quota_recovery(struct obd_device *obd)
{
- struct lov_obd *lov = &obd->u.mds.mds_osc_obd->u.lov;
+ 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;
struct qmaster_recov_thread_data data;
int rc = 0;
ENTRY;
+ if (unlikely(!mds->mds_quota))
+ 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_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");
. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
DIRECTIO=${DIRECTIO:-$LUSTRE/tests/directio}
. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
DIRECTIO=${DIRECTIO:-$LUSTRE/tests/directio}
+[ $MDSCOUNT -gt 1 ] && skip "CMD case" && exit 0
remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0
remote_ost_nodsh && skip "remote OST with nodsh" && exit 0
remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0
remote_ost_nodsh && skip "remote OST with nodsh" && exit 0