For proper 3.10+ kernel support we migrate the quota proc
file handling to use only seq_files.
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: I50b1e5372dfad4e06f7e4dec95cc3efa83a3f902
Reviewed-on: http://review.whamcloud.com/7931
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
static int lprocfs_quota_seq_open(struct inode *inode, struct file *file)
{
static int lprocfs_quota_seq_open(struct inode *inode, struct file *file)
{
- struct proc_dir_entry *dp = PDE(inode);
struct seq_file *seq;
int rc;
struct lquota_procfs *lqp;
struct seq_file *seq;
int rc;
struct lquota_procfs *lqp;
return -ENOMEM;
/* store pointer to object we would like to iterate over */
return -ENOMEM;
/* store pointer to object we would like to iterate over */
- lqp->lqp_obj = (struct dt_object *)dp->data;
+ lqp->lqp_obj = (struct dt_object *)PDE_DATA(inode);
/* Initialize the common environment to be used in the seq operations */
rc = lu_env_init(&lqp->lqp_env, LCT_LOCAL);
/* Initialize the common environment to be used in the seq operations */
rc = lu_env_init(&lqp->lqp_env, LCT_LOCAL);
- if (LPROCFS_ENTRY_CHECK(dp)) {
+ if (LPROCFS_ENTRY_CHECK(PDE(inode))) {
rc = -ENOENT;
goto out_env;
}
rc = -ENOENT;
goto out_env;
}
LASSERT(type != NULL);
/* register proc directory associated with this qmt */
LASSERT(type != NULL);
/* register proc directory associated with this qmt */
- qmt->qmt_proc = lprocfs_register(qmt->qmt_svname, type->typ_procroot,
- NULL, NULL);
+ qmt->qmt_proc = lprocfs_seq_register(qmt->qmt_svname, type->typ_procroot,
+ NULL, NULL);
if (IS_ERR(qmt->qmt_proc)) {
rc = PTR_ERR(qmt->qmt_proc);
CERROR("%s: failed to create qmt proc entry (%d)\n",
if (IS_ERR(qmt->qmt_proc)) {
rc = PTR_ERR(qmt->qmt_proc);
CERROR("%s: failed to create qmt proc entry (%d)\n",
};
/* some procfs helpers */
};
/* some procfs helpers */
-static int lprocfs_qpi_rd_state(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+static int qpi_state_seq_show(struct seq_file *m, void *data)
- struct qmt_pool_info *pool = (struct qmt_pool_info *)data;
- int type, i = 0;
+ struct qmt_pool_info *pool = m->private;
+ int type;
- i = snprintf(page, count,
- "pool:\n"
- " id: %u\n"
- " type: %s\n"
- " ref: %d\n"
- " least qunit: %lu\n",
- pool->qpi_key & 0x0000ffff,
- RES_NAME(pool->qpi_key >> 16),
- cfs_atomic_read(&pool->qpi_ref),
- pool->qpi_least_qunit);
-
+ seq_printf(m, "pool:\n"
+ " id: %u\n"
+ " type: %s\n"
+ " ref: %d\n"
+ " least qunit: %lu\n",
+ pool->qpi_key & 0x0000ffff,
+ RES_NAME(pool->qpi_key >> 16),
+ cfs_atomic_read(&pool->qpi_ref),
+ pool->qpi_least_qunit);
for (type = 0; type < MAXQUOTAS; type++)
for (type = 0; type < MAXQUOTAS; type++)
- i += snprintf(page + i, count - i,
- " %s:\n"
- " #slv: %d\n"
- " #lqe: %d\n",
- QTYPE_NAME(type),
- pool->qpi_slv_nr[type],
+ seq_printf(m, " %s:\n"
+ " #slv: %d\n"
+ " #lqe: %d\n",
+ QTYPE_NAME(type),
+ pool->qpi_slv_nr[type],
cfs_atomic_read(&pool->qpi_site[type]->lqs_hash->hs_count));
cfs_atomic_read(&pool->qpi_site[type]->lqs_hash->hs_count));
+LPROC_SEQ_FOPS_RO(qpi_state);
-static struct lprocfs_vars lprocfs_quota_qpi_vars[] = {
- { "info", lprocfs_qpi_rd_state, 0, 0},
+static struct lprocfs_seq_vars lprocfs_quota_qpi_vars[] = {
+ { "info", &qpi_state_fops },
/* create pool proc directory */
sprintf(qti->qti_buf, "%s-0x%x", RES_NAME(pool_type), pool_id);
/* create pool proc directory */
sprintf(qti->qti_buf, "%s-0x%x", RES_NAME(pool_type), pool_id);
- pool->qpi_proc = lprocfs_register(qti->qti_buf, qmt->qmt_proc,
- lprocfs_quota_qpi_vars, pool);
+ pool->qpi_proc = lprocfs_seq_register(qti->qti_buf, qmt->qmt_proc,
+ lprocfs_quota_qpi_vars, pool);
if (IS_ERR(pool->qpi_proc)) {
rc = PTR_ERR(pool->qpi_proc);
CERROR("%s: failed to create proc entry for pool %s (%d)\n",
if (IS_ERR(pool->qpi_proc)) {
rc = PTR_ERR(pool->qpi_proc);
CERROR("%s: failed to create proc entry for pool %s (%d)\n",
LU_KEY_INIT_GENERIC(qsd);
/* some procfs helpers */
LU_KEY_INIT_GENERIC(qsd);
/* some procfs helpers */
-static int lprocfs_qsd_rd_state(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+static int qsd_state_seq_show(struct seq_file *m, void *data)
- struct qsd_instance *qsd = (struct qsd_instance *)data;
+ struct qsd_instance *qsd = m->private;
if (strlen(enabled) == 0)
strcat(enabled, "none");
if (strlen(enabled) == 0)
strcat(enabled, "none");
- rc = snprintf(page, count,
- "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");
+ 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");
if (qsd->qsd_prepared) {
memset(enabled, 0, sizeof(enabled));
if (qsd->qsd_prepared) {
memset(enabled, 0, sizeof(enabled));
strcat(enabled, "g");
if (strlen(enabled) == 0)
strcat(enabled, "none");
strcat(enabled, "g");
if (strlen(enabled) == 0)
strcat(enabled, "none");
- rc += snprintf(page + rc, count - rc,
- "space acct: %s\n"
+ 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,
"user uptodate: glb[%d],slv[%d],reint[%d]\n"
"group uptodate: glb[%d],slv[%d],reint[%d]\n",
enabled,
+LPROC_SEQ_FOPS_RO(qsd_state);
-static int lprocfs_qsd_rd_enabled(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+static int qsd_enabled_seq_show(struct seq_file *m, void *data)
- struct qsd_instance *qsd = (struct qsd_instance *)data;
+ struct qsd_instance *qsd = m->private;
char enabled[5];
LASSERT(qsd != NULL);
char enabled[5];
LASSERT(qsd != NULL);
if (strlen(enabled) == 0)
strcat(enabled, "none");
if (strlen(enabled) == 0)
strcat(enabled, "none");
- return snprintf(page, count, "%s\n", enabled);
+ return seq_printf(m, "%s\n", enabled);
+LPROC_SEQ_FOPS_RO(qsd_enabled);
/* force reintegration procedure to be executed.
* Used for test/debugging purpose */
/* force reintegration procedure to be executed.
* Used for test/debugging purpose */
-static int lprocfs_qsd_wr_force_reint(struct file *file, const char *buffer,
- unsigned long count, void *data)
+static ssize_t
+lprocfs_force_reint_seq_write(struct file *file, const char *buffer,
+ size_t count, loff_t *off)
- struct qsd_instance *qsd = (struct qsd_instance *)data;
- int rc = 0, qtype;
+ struct qsd_instance *qsd = ((struct seq_file *)file->private_data)->private;
+ int rc = 0, qtype;
}
return rc == 0 ? count : rc;
}
}
return rc == 0 ? count : rc;
}
+LPROC_SEQ_FOPS_WO_TYPE(qsd, force_reint);
-static int lprocfs_qsd_rd_timeout(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+static int qsd_timeout_seq_show(struct seq_file *m, void *data)
- struct qsd_instance *qsd = (struct qsd_instance *)data;
+ struct qsd_instance *qsd = m->private;
- return snprintf(page, count, "%d\n", qsd_wait_timeout(qsd));
+ return seq_printf(m, "%d\n", qsd_wait_timeout(qsd));
-static int lprocfs_qsd_wr_timeout(struct file *file, const char *buffer,
- unsigned long count, void *data)
+static ssize_t
+qsd_timeout_seq_write(struct file *file, const char *buffer,
+ size_t count, loff_t *off)
- struct qsd_instance *qsd = (struct qsd_instance *)data;
- int timeout, rc;
+ struct qsd_instance *qsd = ((struct seq_file *)file->private_data)->private;
+ int timeout, rc;
LASSERT(qsd != NULL);
rc = lprocfs_write_helper(buffer, count, &timeout);
LASSERT(qsd != NULL);
rc = lprocfs_write_helper(buffer, count, &timeout);
qsd->qsd_timeout = timeout;
return count;
}
qsd->qsd_timeout = timeout;
return count;
}
+LPROC_SEQ_FOPS(qsd_timeout);
-static struct lprocfs_vars lprocfs_quota_qsd_vars[] = {
- { "info", lprocfs_qsd_rd_state, 0, 0},
- { "enabled", lprocfs_qsd_rd_enabled, 0, 0},
- { "force_reint", 0, lprocfs_qsd_wr_force_reint, 0},
- { "timeout", lprocfs_qsd_rd_timeout, lprocfs_qsd_wr_timeout, 0},
+static struct lprocfs_seq_vars lprocfs_quota_qsd_vars[] = {
+ { "info", &qsd_state_fops },
+ { "enabled", &qsd_enabled_fops },
+ { "force_reint", &qsd_force_reint_fops },
+ { "timeout", &qsd_timeout_fops },
up(&qsd->qsd_fsinfo->qfs_sem);
/* register procfs directory */
up(&qsd->qsd_fsinfo->qfs_sem);
/* register procfs directory */
- qsd->qsd_proc = lprocfs_register(QSD_DIR, osd_proc,
- lprocfs_quota_qsd_vars, qsd);
+ qsd->qsd_proc = lprocfs_seq_register(QSD_DIR, osd_proc,
+ lprocfs_quota_qsd_vars, qsd);
if (IS_ERR(qsd->qsd_proc)) {
rc = PTR_ERR(qsd->qsd_proc);
qsd->qsd_proc = NULL;
if (IS_ERR(qsd->qsd_proc)) {
rc = PTR_ERR(qsd->qsd_proc);
qsd->qsd_proc = NULL;