In order to support 3.10+ kernels for clients we adapt
the FLD proc handling to using seq_files.
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: I056d4dcc15b82263880949a0928fc04bd6b2f0b7
Reviewed-on: http://review.whamcloud.com/7140
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
- fld->lsf_proc_dir = lprocfs_register(fld->lsf_name,
- fld_type_proc_dir,
- fld_server_proc_list, fld);
- if (IS_ERR(fld->lsf_proc_dir)) {
- rc = PTR_ERR(fld->lsf_proc_dir);
- RETURN(rc);
- }
+ fld->lsf_proc_dir = lprocfs_seq_register(fld->lsf_name,
+ fld_type_proc_dir,
+ fld_server_proc_list, fld);
+ if (IS_ERR(fld->lsf_proc_dir)) {
+ rc = PTR_ERR(fld->lsf_proc_dir);
+ RETURN(rc);
+ }
rc = lprocfs_seq_create(fld->lsf_proc_dir, "fldb", 0444,
&fld_proc_seq_fops, fld);
rc = lprocfs_seq_create(fld->lsf_proc_dir, "fldb", 0444,
&fld_proc_seq_fops, fld);
extern struct proc_dir_entry *fld_type_proc_dir;
extern struct proc_dir_entry *fld_type_proc_dir;
-extern struct lprocfs_vars fld_client_proc_list[];
-# endif
+extern struct lprocfs_seq_vars fld_client_proc_list[];
+#endif
# ifdef HAVE_SERVER_SUPPORT
struct fld_thread_info {
# ifdef HAVE_SERVER_SUPPORT
struct fld_thread_info {
int fld_server_read(const struct lu_env *env, struct lu_server_fld *fld,
struct lu_seq_range *range, void *data, int data_len);
int fld_server_read(const struct lu_env *env, struct lu_server_fld *fld,
struct lu_seq_range *range, void *data, int data_len);
extern const struct file_operations fld_proc_seq_fops;
extern const struct file_operations fld_proc_seq_fops;
-extern struct lprocfs_vars fld_server_proc_list[];
-# endif
+extern struct lprocfs_seq_vars fld_server_proc_list[];
+#endif
# endif /* HAVE_SERVER_SUPPORT */
# endif /* HAVE_SERVER_SUPPORT */
#ifdef LPROCFS
static int fld_client_proc_init(struct lu_client_fld *fld)
{
#ifdef LPROCFS
static int fld_client_proc_init(struct lu_client_fld *fld)
{
- int rc;
- ENTRY;
-
- fld->lcf_proc_dir = lprocfs_register(fld->lcf_name,
- fld_type_proc_dir,
- NULL, NULL);
- if (IS_ERR(fld->lcf_proc_dir)) {
- CERROR("%s: LProcFS failed in fld-init\n",
- fld->lcf_name);
- rc = PTR_ERR(fld->lcf_proc_dir);
- RETURN(rc);
- }
+ fld->lcf_proc_dir = lprocfs_seq_register(fld->lcf_name,
+ fld_type_proc_dir,
+ NULL, NULL);
+ if (IS_ERR(fld->lcf_proc_dir)) {
+ CERROR("%s: LProcFS failed in fld-init\n",
+ fld->lcf_name);
+ rc = PTR_ERR(fld->lcf_proc_dir);
+ RETURN(rc);
+ }
- rc = lprocfs_add_vars(fld->lcf_proc_dir,
- fld_client_proc_list, fld);
- if (rc) {
- CERROR("%s: Can't init FLD proc, rc %d\n",
- fld->lcf_name, rc);
- GOTO(out_cleanup, rc);
- }
+ rc = lprocfs_seq_add_vars(fld->lcf_proc_dir,
+ fld_client_proc_list, fld);
+ if (rc) {
+ CERROR("%s: Can't init FLD proc, rc %d\n",
+ fld->lcf_name, rc);
+ GOTO(out_cleanup, rc);
+ }
- fld_client_proc_fini(fld);
- return rc;
+ fld_client_proc_fini(fld);
+ return rc;
}
void fld_client_proc_fini(struct lu_client_fld *fld)
}
void fld_client_proc_fini(struct lu_client_fld *fld)
static int __init fld_mod_init(void)
{
static int __init fld_mod_init(void)
{
- fld_type_proc_dir = lprocfs_register(LUSTRE_FLD_NAME,
- proc_lustre_root,
- NULL, NULL);
+ fld_type_proc_dir = lprocfs_seq_register(LUSTRE_FLD_NAME,
+ proc_lustre_root,
+ NULL, NULL);
if (IS_ERR(fld_type_proc_dir))
return PTR_ERR(fld_type_proc_dir);
if (IS_ERR(fld_type_proc_dir))
return PTR_ERR(fld_type_proc_dir);
#ifdef LPROCFS
static int
#ifdef LPROCFS
static int
-fld_proc_read_targets(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+fld_proc_targets_seq_show(struct seq_file *m, void *unused)
- struct lu_client_fld *fld = (struct lu_client_fld *)data;
+ struct lu_client_fld *fld = (struct lu_client_fld *)m->private;
struct lu_fld_target *target;
struct lu_fld_target *target;
ENTRY;
LASSERT(fld != NULL);
ENTRY;
LASSERT(fld != NULL);
spin_lock(&fld->lcf_lock);
cfs_list_for_each_entry(target,
&fld->lcf_targets, ft_chain)
spin_lock(&fld->lcf_lock);
cfs_list_for_each_entry(target,
&fld->lcf_targets, ft_chain)
- {
- rc = snprintf(page, count, "%s\n",
- fld_target_name(target));
- page += rc;
- count -= rc;
- total += rc;
- if (count == 0)
- break;
- }
+ seq_printf(m, "%s\n", fld_target_name(target));
spin_unlock(&fld->lcf_lock);
spin_unlock(&fld->lcf_lock);
-fld_proc_read_hash(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+fld_proc_hash_seq_show(struct seq_file *m, void *unused)
- struct lu_client_fld *fld = (struct lu_client_fld *)data;
- int rc;
+ struct lu_client_fld *fld = (struct lu_client_fld *)m->private;
ENTRY;
LASSERT(fld != NULL);
spin_lock(&fld->lcf_lock);
ENTRY;
LASSERT(fld != NULL);
spin_lock(&fld->lcf_lock);
- rc = snprintf(page, count, "%s\n", fld->lcf_hash->fh_name);
+ seq_printf(m, "%s\n", fld->lcf_hash->fh_name);
spin_unlock(&fld->lcf_lock);
spin_unlock(&fld->lcf_lock);
-static int
-fld_proc_write_hash(struct file *file, const char *buffer,
- unsigned long count, void *data)
+static ssize_t
+fld_proc_hash_seq_write(struct file *file, const char *buffer,
+ size_t count, loff_t *off)
- struct lu_client_fld *fld = (struct lu_client_fld *)data;
+ struct lu_client_fld *fld = ((struct seq_file *)file->private_data)->private;
struct lu_fld_hash *hash = NULL;
int i;
ENTRY;
struct lu_fld_hash *hash = NULL;
int i;
ENTRY;
-static int
-fld_proc_write_cache_flush(struct file *file, const char *buffer,
- unsigned long count, void *data)
+static ssize_t
+lprocfs_cache_flush_seq_write(struct file *file, const char *buffer,
+ size_t count, loff_t *pos)
- struct lu_client_fld *fld = (struct lu_client_fld *)data;
+ struct lu_client_fld *fld = ((struct seq_file *)file->private_data)->private;
ENTRY;
LASSERT(fld != NULL);
ENTRY;
LASSERT(fld != NULL);
+LPROC_SEQ_FOPS_RO(fld_proc_targets);
+LPROC_SEQ_FOPS(fld_proc_hash);
+LPROC_SEQ_FOPS_WO_TYPE(fld, cache_flush);
+
+struct lprocfs_seq_vars fld_client_proc_list[] = {
+ { .name = "targets",
+ .fops = &fld_proc_targets_fops },
+ { .name = "hash",
+ .fops = &fld_proc_hash_fops },
+ { .name = "cache_flush",
+ .fops = &fld_cache_flush_fops },
+ { NULL }
+};
+
+#ifdef HAVE_SERVER_SUPPORT
struct fld_seq_param {
struct lu_env fsp_env;
struct dt_it *fsp_it;
struct fld_seq_param {
struct lu_env fsp_env;
struct dt_it *fsp_it;
unsigned int fsp_stop:1;
};
unsigned int fsp_stop:1;
};
-struct lprocfs_vars fld_client_proc_list[] = {
- { "targets", fld_proc_read_targets, NULL, NULL },
- { "hash", fld_proc_read_hash, fld_proc_write_hash, NULL },
- { "cache_flush", NULL, fld_proc_write_cache_flush, NULL },
- { NULL }
-};
-
-# ifdef HAVE_SERVER_SUPPORT
static void *fldb_seq_start(struct seq_file *p, loff_t *pos)
{
struct fld_seq_param *param = p->private;
static void *fldb_seq_start(struct seq_file *p, loff_t *pos)
{
struct fld_seq_param *param = p->private;
static int fldb_seq_open(struct inode *inode, struct file *file)
{
static int fldb_seq_open(struct inode *inode, struct file *file)
{
- struct proc_dir_entry *dp = PDE(inode);
- struct lu_server_fld *fld = (struct lu_server_fld *)dp->data;
+ struct lu_server_fld *fld = (struct lu_server_fld *)PDE_DATA(inode);
struct dt_object *obj;
const struct dt_it_ops *iops;
struct fld_seq_param *param = NULL;
int env_init = 0;
int rc;
struct dt_object *obj;
const struct dt_it_ops *iops;
struct fld_seq_param *param = NULL;
int env_init = 0;
int rc;
- LPROCFS_ENTRY_CHECK(dp);
+ LPROCFS_ENTRY_CHECK(PDE(inode));
rc = seq_open(file, &fldb_sops);
if (rc)
GOTO(out, rc);
rc = seq_open(file, &fldb_sops);
if (rc)
GOTO(out, rc);
.release = fldb_seq_release,
};
.release = fldb_seq_release,
};
-struct lprocfs_vars fld_server_proc_list[] = {
+struct lprocfs_seq_vars fld_server_proc_list[] = {