Updates whole tree and adds forgotten __user attribute,
syncs up prototypes and such.
This keeps sparse happy and helps to ensure user/kernel pointers
correctness.
Change-Id: I54cf7479fffbd8ce211b28f9f3a9de81f600a32e
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
Reviewed-on: http://review.whamcloud.com/17788
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Frank Zago <fzago@cray.com>
16 files changed:
extern void lprocfs_free_per_client_stats(struct obd_device *obd);
#ifdef HAVE_SERVER_SUPPORT
extern ssize_t
extern void lprocfs_free_per_client_stats(struct obd_device *obd);
#ifdef HAVE_SERVER_SUPPORT
extern ssize_t
-lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer,
+lprocfs_nid_stats_clear_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
extern int lprocfs_nid_stats_clear_seq_show(struct seq_file *file, void *data);
#endif
size_t count, loff_t *off);
extern int lprocfs_nid_stats_clear_seq_show(struct seq_file *file, void *data);
#endif
struct adaptive_timeout *at);
extern int lprocfs_timeouts_seq_show(struct seq_file *m, void *data);
extern ssize_t
struct adaptive_timeout *at);
extern int lprocfs_timeouts_seq_show(struct seq_file *m, void *data);
extern ssize_t
-lprocfs_timeouts_seq_write(struct file *file, const char *buffer,
+lprocfs_timeouts_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
#ifdef HAVE_SERVER_SUPPORT
extern ssize_t
size_t count, loff_t *off);
#ifdef HAVE_SERVER_SUPPORT
extern ssize_t
-lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
+lprocfs_evict_client_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
#endif
extern ssize_t
size_t count, loff_t *off);
#endif
extern ssize_t
-lprocfs_ping_seq_write(struct file *file, const char *buffer,
+lprocfs_ping_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
extern ssize_t
lprocfs_import_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
extern int lprocfs_pinger_recov_seq_show(struct seq_file *m, void *data);
extern ssize_t
size_t count, loff_t *off);
extern ssize_t
lprocfs_import_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
extern int lprocfs_pinger_recov_seq_show(struct seq_file *m, void *data);
extern ssize_t
-lprocfs_pinger_recov_seq_write(struct file *file, const char *buffer,
+lprocfs_pinger_recov_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
/* Statfs helpers */
size_t count, loff_t *off);
/* Statfs helpers */
/* lprocfs_status.c: IR factor */
int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data);
ssize_t
/* lprocfs_status.c: IR factor */
int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data);
ssize_t
-lprocfs_ir_factor_seq_write(struct file *file, const char *buffer,
+lprocfs_ir_factor_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
#endif
extern int lprocfs_single_release(struct inode *, struct file *);
size_t count, loff_t *off);
#endif
extern int lprocfs_single_release(struct inode *, struct file *);
cntr_init_callback fn);
int lprocfs_job_interval_seq_show(struct seq_file *m, void *data);
ssize_t
cntr_init_callback fn);
int lprocfs_job_interval_seq_show(struct seq_file *m, void *data);
ssize_t
-lprocfs_job_interval_seq_write(struct file *file, const char *buffer,
+lprocfs_job_interval_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
/* lproc_status.c */
int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data);
ssize_t lprocfs_recovery_time_soft_seq_write(struct file *file,
size_t count, loff_t *off);
/* lproc_status.c */
int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data);
ssize_t lprocfs_recovery_time_soft_seq_write(struct file *file,
+ const char __user *buffer,
size_t count, loff_t *off);
int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data);
ssize_t
size_t count, loff_t *off);
int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data);
ssize_t
-lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer,
- size_t count, loff_t *off);
+lprocfs_recovery_time_hard_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off);
int lprocfs_target_instance_seq_show(struct seq_file *m, void *data);
#endif
int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data);
ssize_t
int lprocfs_target_instance_seq_show(struct seq_file *m, void *data);
#endif
int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data);
ssize_t
-lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file, const char *buffer,
- size_t count, loff_t *off);
+lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off);
struct root_squash_info;
int lprocfs_wr_root_squash(const char __user *buffer, unsigned long count,
struct root_squash_info;
int lprocfs_wr_root_squash(const char __user *buffer, unsigned long count,
{ return; }
#ifdef HAVE_SERVER_SUPPORT
static inline
{ return; }
#ifdef HAVE_SERVER_SUPPORT
static inline
-ssize_t lprocfs_nid_stats_seq_write(struct file *file, const char *buffer,
- size_t count, loff_t *off)
+ssize_t lprocfs_nid_stats_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off)
{return 0;}
static inline
int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data)
{return 0;}
static inline
int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data)
static inline int lprocfs_timeouts_seq_show(struct seq_file *m, void *data)
{ return 0; }
static inline ssize_t
static inline int lprocfs_timeouts_seq_show(struct seq_file *m, void *data)
{ return 0; }
static inline ssize_t
-lprocfs_timeouts_seq_write(struct file *file, const char *buffer,
+lprocfs_timeouts_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{ return 0; }
#ifdef HAVE_SERVER_SUPPORT
static inline ssize_t
size_t count, loff_t *off)
{ return 0; }
#ifdef HAVE_SERVER_SUPPORT
static inline ssize_t
-lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
+lprocfs_evict_client_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{ return 0; }
#endif
size_t count, loff_t *off)
{ return 0; }
#endif
* \retval negative error code if failed
*/
static ssize_t
* \retval negative error code if failed
*/
static ssize_t
-lod_stripesize_seq_write(struct file *file, const char *buffer,
+lod_stripesize_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative error code if failed
*/
static ssize_t
* \retval negative error code if failed
*/
static ssize_t
-lod_stripeoffset_seq_write(struct file *file, const char *buffer,
+lod_stripeoffset_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative error code if failed
*/
static ssize_t
* \retval negative error code if failed
*/
static ssize_t
-lod_stripetype_seq_write(struct file *file, const char *buffer,
+lod_stripetype_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative error code otherwise
*/
static ssize_t
* \retval negative error code otherwise
*/
static ssize_t
-lod_stripecount_seq_write(struct file *file, const char *buffer,
+lod_stripecount_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative error code if failed
*/
static ssize_t
* \retval negative error code if failed
*/
static ssize_t
-lod_qos_thresholdrr_seq_write(struct file *file, const char *buffer,
+lod_qos_thresholdrr_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative error code if failed
*/
static ssize_t
* \retval negative error code if failed
*/
static ssize_t
-lod_qos_maxage_seq_write(struct file *file, const char *buffer,
+lod_qos_maxage_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative error code if failed
*/
static ssize_t
* \retval negative error code if failed
*/
static ssize_t
-lod_lmv_failout_seq_write(struct file *file, const char *buffer,
+lod_lmv_failout_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
}
static ssize_t mdc_max_mod_rpcs_in_flight_seq_write(struct file *file,
}
static ssize_t mdc_max_mod_rpcs_in_flight_seq_write(struct file *file,
+ const char __user *buffer,
size_t count,
loff_t *off)
{
size_t count,
loff_t *off)
{
#include "mdd_internal.h"
static ssize_t
#include "mdd_internal.h"
static ssize_t
-mdd_atime_diff_seq_write(struct file *file, const char *buffer,
+mdd_atime_diff_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-mdd_changelog_mask_seq_write(struct file *file, const char *buffer,
+mdd_changelog_mask_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-mdd_sync_perm_seq_write(struct file *file, const char *buffer,
+mdd_sync_perm_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
+mdd_lfsck_speed_limit_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-mdd_lfsck_async_windows_seq_write(struct file *file, const char *buffer,
+mdd_lfsck_async_windows_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-static ssize_t mgs_live_seq_write(struct file *file, const char *buf,
+static ssize_t mgs_live_seq_write(struct file *file, const char __user *buf,
size_t len, loff_t *off)
{
struct seq_file *seq = file->private_data;
size_t len, loff_t *off)
{
struct seq_file *seq = file->private_data;
void mgs_ir_fini_fs(struct mgs_device *mgs, struct fs_db *fsdb);
void mgs_ir_notify_complete(struct fs_db *fsdb);
int mgs_get_ir_logs(struct ptlrpc_request *req);
void mgs_ir_fini_fs(struct mgs_device *mgs, struct fs_db *fsdb);
void mgs_ir_notify_complete(struct fs_db *fsdb);
int mgs_get_ir_logs(struct ptlrpc_request *req);
-int lprocfs_wr_ir_state(struct file *file, const char *buffer,
+int lprocfs_wr_ir_state(struct file *file, const char __user *buffer,
size_t count, void *data);
int lprocfs_rd_ir_state(struct seq_file *seq, void *data);
ssize_t
size_t count, void *data);
int lprocfs_rd_ir_state(struct seq_file *seq, void *data);
ssize_t
-lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer,
+lprocfs_ir_timeout_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off);
int lprocfs_ir_timeout_seq_show(struct seq_file *seq, void *data);
void mgs_fsc_cleanup(struct obd_export *exp);
size_t count, loff_t *off);
int lprocfs_ir_timeout_seq_show(struct seq_file *seq, void *data);
void mgs_fsc_cleanup(struct obd_export *exp);
EXPORT_SYMBOL(lprocfs_job_interval_seq_show);
ssize_t
EXPORT_SYMBOL(lprocfs_job_interval_seq_show);
ssize_t
-lprocfs_job_interval_seq_write(struct file *file, const char *buffer,
+lprocfs_job_interval_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct obd_device *obd;
size_t count, loff_t *off)
{
struct obd_device *obd;
#define BUFLEN (UUID_MAX + 5)
ssize_t
#define BUFLEN (UUID_MAX + 5)
ssize_t
-lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
+lprocfs_evict_client_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer,
+lprocfs_nid_stats_clear_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
EXPORT_SYMBOL(lprocfs_ir_factor_seq_show);
ssize_t
EXPORT_SYMBOL(lprocfs_ir_factor_seq_show);
ssize_t
-lprocfs_ir_factor_seq_write(struct file *file, const char *buffer,
+lprocfs_ir_factor_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
EXPORT_SYMBOL(lprocfs_recovery_time_soft_seq_show);
ssize_t
EXPORT_SYMBOL(lprocfs_recovery_time_soft_seq_show);
ssize_t
-lprocfs_recovery_time_soft_seq_write(struct file *file, const char *buffer,
- size_t count, loff_t *off)
+lprocfs_recovery_time_soft_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
struct obd_device *obd = m->private;
{
struct seq_file *m = file->private_data;
struct obd_device *obd = m->private;
EXPORT_SYMBOL(lprocfs_recovery_time_hard_seq_show);
ssize_t
EXPORT_SYMBOL(lprocfs_recovery_time_hard_seq_show);
ssize_t
-lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer,
+lprocfs_recovery_time_hard_seq_write(struct file *file,
+ const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-static ssize_t osd_brw_stats_seq_write(struct file *file, const char *buf,
+static ssize_t osd_brw_stats_seq_write(struct file *file,
+ const char __user *buf,
size_t len, loff_t *off)
{
struct seq_file *seq = file->private_data;
size_t len, loff_t *off)
{
struct seq_file *seq = file->private_data;
* \retval negative number on error
*/
static ssize_t
* \retval negative number on error
*/
static ssize_t
-osp_active_seq_write(struct file *file, const char *buffer,
+osp_active_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval \a count on success
* \retval negative number on error
*/
* \retval \a count on success
* \retval negative number on error
*/
-static ssize_t osp_syn_changes_seq_write(struct file *file, const char *buffer,
+static ssize_t osp_syn_changes_seq_write(struct file *file,
+ const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative number on error
*/
static ssize_t
* \retval negative number on error
*/
static ssize_t
-osp_max_rpcs_in_flight_seq_write(struct file *file, const char *buffer,
+osp_max_rpcs_in_flight_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative number on error
*/
static ssize_t
* \retval negative number on error
*/
static ssize_t
-osp_max_rpcs_in_prog_seq_write(struct file *file, const char *buffer,
+osp_max_rpcs_in_prog_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative number on error
*/
static ssize_t
* \retval negative number on error
*/
static ssize_t
-osp_create_count_seq_write(struct file *file, const char *buffer,
+osp_create_count_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative number on error
*/
static ssize_t
* \retval negative number on error
*/
static ssize_t
-osp_max_create_count_seq_write(struct file *file, const char *buffer,
+osp_max_create_count_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
* \retval negative number on error
*/
static ssize_t
* \retval negative number on error
*/
static ssize_t
-osp_maxage_seq_write(struct file *file, const char *buffer,
+osp_maxage_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
-gss_lk_proc_dl_seq_write(struct file *file, const char *buffer,
+gss_lk_proc_dl_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
int val, rc;
size_t count, loff_t *off)
{
int val, rc;
EXPORT_SYMBOL(ptlrpc_lprocfs_unregister_obd);
ssize_t
EXPORT_SYMBOL(ptlrpc_lprocfs_unregister_obd);
ssize_t
-lprocfs_ping_seq_write(struct file *file, const char *buffer,
+lprocfs_ping_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
EXPORT_SYMBOL(lprocfs_pinger_recov_seq_show);
ssize_t
EXPORT_SYMBOL(lprocfs_pinger_recov_seq_show);
ssize_t
-lprocfs_pinger_recov_seq_write(struct file *file, const char *buffer,
+lprocfs_pinger_recov_seq_write(struct file *file, const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
*/
static ssize_t
ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file,
*/
static ssize_t
ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file,
- const char *buffer, size_t count,
+ const char __user *buffer,
+ size_t count,
loff_t *off)
{
struct ptlrpc_service *svc = ((struct seq_file *)file->private_data)->private;
loff_t *off)
{
struct ptlrpc_service *svc = ((struct seq_file *)file->private_data)->private;
* almost identical; it can be reworked and then reused for ORR/TRR.
*/
static ssize_t
* almost identical; it can be reworked and then reused for ORR/TRR.
*/
static ssize_t
-ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file, const char *buffer,
+ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file,
+ const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
*/
static ssize_t
ptlrpc_lprocfs_nrs_orr_offset_type_seq_write(struct file *file,
*/
static ssize_t
ptlrpc_lprocfs_nrs_orr_offset_type_seq_write(struct file *file,
- const char *buffer, size_t count,
+ const char __user *buffer,
+ size_t count,
loff_t *off)
{
struct seq_file *m = file->private_data;
loff_t *off)
{
struct seq_file *m = file->private_data;
*/
static ssize_t
ptlrpc_lprocfs_nrs_orr_supported_seq_write(struct file *file,
*/
static ssize_t
ptlrpc_lprocfs_nrs_orr_supported_seq_write(struct file *file,
- const char *buffer, size_t count,
+ const char __user *buffer,
+ size_t count,
loff_t *off)
{
struct seq_file *m = file->private_data;
loff_t *off)
{
struct seq_file *m = file->private_data;
extern struct nrs_core nrs_core;
#define LPROCFS_WR_NRS_TBF_MAX_CMD (4096)
static ssize_t
extern struct nrs_core nrs_core;
#define LPROCFS_WR_NRS_TBF_MAX_CMD (4096)
static ssize_t
-ptlrpc_lprocfs_nrs_tbf_rule_seq_write(struct file *file, const char *buffer,
+ptlrpc_lprocfs_nrs_tbf_rule_seq_write(struct file *file,
+ const char __user *buffer,
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
size_t count, loff_t *off)
{
struct seq_file *m = file->private_data;
/* force reintegration procedure to be executed.
* Used for test/debugging purpose */
static ssize_t
/* 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;
size_t count, loff_t *off)
{
struct qsd_instance *qsd = ((struct seq_file *)file->private_data)->private;
-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;
size_t count, loff_t *off)
{
struct qsd_instance *qsd = ((struct seq_file *)file->private_data)->private;