* GPL HEADER END
*/
/*
- * Copyright (c) 2012, 2013, Intel Corporation.
+ * Copyright (c) 2012, 2014, Intel Corporation.
* Use is subject to license terms.
*
* Author: Johann Lombardi <johann.lombardi@intel.com>
{
struct qsd_instance *qsd = m->private;
char enabled[5];
- int rc;
LASSERT(qsd != NULL);
if (strlen(enabled) == 0)
strcat(enabled, "none");
- rc = seq_printf(m, "target name: %s\n"
- "pool ID: %d\n"
- "type: %s\n"
- "quota enabled: %s\n"
- "conn to master: %s\n",
- qsd->qsd_svname, qsd->qsd_pool_id,
- qsd->qsd_is_md ? "md" : "dt", enabled,
- qsd->qsd_exp_valid ? "setup" : "not setup yet");
+ seq_printf(m, "target name: %s\n"
+ "pool ID: %d\n"
+ "type: %s\n"
+ "quota enabled: %s\n"
+ "conn to master: %s\n",
+ qsd->qsd_svname, qsd->qsd_pool_id,
+ qsd->qsd_is_md ? "md" : "dt", enabled,
+ qsd->qsd_exp_valid ? "setup" : "not setup yet");
if (qsd->qsd_prepared) {
memset(enabled, 0, sizeof(enabled));
strcat(enabled, "g");
if (strlen(enabled) == 0)
strcat(enabled, "none");
- rc += seq_printf(m, "space acct: %s\n"
- "user uptodate: glb[%d],slv[%d],reint[%d]\n"
- "group uptodate: glb[%d],slv[%d],reint[%d]\n",
- enabled,
- qsd->qsd_type_array[USRQUOTA]->qqi_glb_uptodate,
- qsd->qsd_type_array[USRQUOTA]->qqi_slv_uptodate,
- qsd->qsd_type_array[USRQUOTA]->qqi_reint,
- qsd->qsd_type_array[GRPQUOTA]->qqi_glb_uptodate,
- qsd->qsd_type_array[GRPQUOTA]->qqi_slv_uptodate,
- qsd->qsd_type_array[GRPQUOTA]->qqi_reint);
+ seq_printf(m, "space acct: %s\n"
+ "user uptodate: glb[%d],slv[%d],reint[%d]\n"
+ "group uptodate: glb[%d],slv[%d],reint[%d]\n",
+ enabled,
+ qsd->qsd_type_array[USRQUOTA]->qqi_glb_uptodate,
+ qsd->qsd_type_array[USRQUOTA]->qqi_slv_uptodate,
+ qsd->qsd_type_array[USRQUOTA]->qqi_reint,
+ qsd->qsd_type_array[GRPQUOTA]->qqi_glb_uptodate,
+ qsd->qsd_type_array[GRPQUOTA]->qqi_slv_uptodate,
+ qsd->qsd_type_array[GRPQUOTA]->qqi_reint);
}
- return rc;
+ return 0;
}
LPROC_SEQ_FOPS_RO(qsd_state);
if (strlen(enabled) == 0)
strcat(enabled, "none");
- return seq_printf(m, "%s\n", enabled);
+ seq_printf(m, "%s\n", enabled);
+ return 0;
}
LPROC_SEQ_FOPS_RO(qsd_enabled);
/* force reintegration procedure to be executed.
* Used for test/debugging purpose */
static ssize_t
-lprocfs_force_reint_seq_write(struct file *file, const char *buffer,
+lprocfs_force_reint_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct qsd_instance *qsd = ((struct seq_file *)file->private_data)->private;
rc = -EAGAIN;
} else {
/* mark all indexes as stale */
- for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) {
qsd->qsd_type_array[qtype]->qqi_glb_uptodate = false;
qsd->qsd_type_array[qtype]->qqi_slv_uptodate = false;
}
return rc;
/* kick off reintegration */
- for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) {
rc = qsd_start_reint_thread(qsd->qsd_type_array[qtype]);
if (rc)
break;
struct qsd_instance *qsd = m->private;
LASSERT(qsd != NULL);
- return seq_printf(m, "%d\n", qsd_wait_timeout(qsd));
+ seq_printf(m, "%d\n", qsd_wait_timeout(qsd));
+ return 0;
}
static ssize_t
-qsd_timeout_seq_write(struct file *file, const char *buffer,
+qsd_timeout_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct qsd_instance *qsd = ((struct seq_file *)file->private_data)->private;
- int timeout, rc;
+ int rc;
+ __s64 timeout;
LASSERT(qsd != NULL);
- rc = lprocfs_write_helper(buffer, count, &timeout);
+ rc = lprocfs_str_to_s64(buffer, count, &timeout);
if (rc)
return rc;
- if (timeout < 0)
+ if (timeout < 0 || timeout > INT_MAX)
return -EINVAL;
qsd->qsd_timeout = timeout;
* reintegration procedure (i.e. global lock enqueue and slave
* index transfer) since the space usage reconciliation (i.e.
* step 3) will have to wait for qsd_start() to be called */
- for (type = USRQUOTA; type < MAXQUOTAS; type++) {
+ for (type = USRQUOTA; type < LL_MAXQUOTAS; type++) {
struct qsd_qtype_info *qqi = qsd->qsd_type_array[type];
wake_up(&qqi->qqi_reint_thread.t_ctl_waitq);
}
CDEBUG(D_QUOTA, "qqi reference count %u, repeat: %d\n",
atomic_read(&qqi->qqi_ref), repeat);
repeat++;
- schedule_timeout_and_set_state(TASK_INTERRUPTIBLE,
- cfs_time_seconds(1));
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(cfs_time_seconds(1));
}
/* by now, all qqi users should have gone away */
qsd_stop_upd_thread(qsd);
/* shutdown the reintegration threads */
- for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) {
if (qsd->qsd_type_array[qtype] == NULL)
continue;
qsd_stop_reint_thread(qsd->qsd_type_array[qtype]);
}
/* free per-quota type data */
- for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++)
+ for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++)
qsd_qtype_fini(env, qsd, qtype);
/* deregister connection to the quota master */
/* register procfs directory */
qsd->qsd_proc = lprocfs_register(QSD_DIR, osd_proc,
- lprocfs_quota_qsd_vars, qsd);
+ lprocfs_quota_qsd_vars, qsd);
if (IS_ERR(qsd->qsd_proc)) {
rc = PTR_ERR(qsd->qsd_proc);
qsd->qsd_proc = NULL;
}
/* initialize per-quota type data */
- for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) {
rc = qsd_qtype_init(env, qsd, qtype);
if (rc)
RETURN(rc);
write_unlock(&qsd->qsd_lock);
/* start reintegration thread for each type, if required */
- for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) {
struct qsd_qtype_info *qqi = qsd->qsd_type_array[qtype];
if (qsd_type_enabled(qsd, qtype) && qsd->qsd_acct_failed) {
/* Trigger the 3rd step of reintegration: If usage > granted, acquire
* up to usage; If usage < granted, release down to usage. */
- for (type = USRQUOTA; type < MAXQUOTAS; type++) {
+ for (type = USRQUOTA; type < LL_MAXQUOTAS; type++) {
struct qsd_qtype_info *qqi = qsd->qsd_type_array[type];
wake_up(&qqi->qqi_reint_thread.t_ctl_waitq);
}