Whamcloud - gitweb
LU-9679 lustre: avoid cast of file->private_data
[fs/lustre-release.git] / lustre / quota / qsd_lib.c
index 6aaed49..cbdd74e 100644 (file)
@@ -90,12 +90,14 @@ static int qsd_state_seq_show(struct seq_file *m, void *data)
        if (strlen(enabled) == 0)
                strcat(enabled, "none");
 
+       /* TODO: further pool ID should be removed or
+        * replaced with pool Name */
        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_svname, 0,
                   qsd->qsd_is_md ? "md" : "dt", enabled,
                   qsd->qsd_exp_valid ? "setup" : "not setup yet");
 
@@ -137,13 +139,13 @@ static int qsd_enabled_seq_show(struct seq_file *m, void *data)
 
        memset(enabled, 0, sizeof(enabled));
        if (qsd_type_enabled(qsd, USRQUOTA))
-               strcat(enabled, "u");
+               strncat(enabled, "u", sizeof(enabled) - strlen(enabled));
        if (qsd_type_enabled(qsd, GRPQUOTA))
-               strcat(enabled, "g");
+               strncat(enabled, "g", sizeof(enabled) - strlen(enabled));
        if (qsd_type_enabled(qsd, PRJQUOTA))
-               strncat(enabled, "p", 1);
+               strncat(enabled, "p", sizeof(enabled) - strlen(enabled));
        if (strlen(enabled) == 0)
-               strcat(enabled, "none");
+               strncat(enabled, "none", sizeof(enabled) - strlen(enabled));
 
        seq_printf(m, "%s\n", enabled);
        return 0;
@@ -166,6 +168,7 @@ static ssize_t qsd_enabled_seq_write(struct file *file,
        if (copy_from_user(valstr, buffer, count))
                GOTO(out, count = -EFAULT);
 
+       valstr[sizeof(valstr) - 1] = 0;
        if (strchr(valstr, 'u'))
                enabled |= BIT(USRQUOTA);
        if (strchr(valstr, 'g'))
@@ -198,7 +201,8 @@ static ssize_t
 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;
+       struct seq_file     *m = file->private_data;
+       struct qsd_instance *qsd = m->private;
        int                  rc = 0, qtype;
 
        LASSERT(qsd != NULL);
@@ -245,7 +249,8 @@ static ssize_t
 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;
+       struct seq_file *m = file->private_data;
+       struct qsd_instance *qsd = m->private;
        time64_t timeout;
        int rc;
 
@@ -472,8 +477,7 @@ static int qsd_qtype_init(const struct lu_env *env, struct qsd_instance *qsd,
        thread_set_flags(&qqi->qqi_reint_thread, SVC_STOPPED);
        INIT_LIST_HEAD(&qqi->qqi_deferred_glb);
        INIT_LIST_HEAD(&qqi->qqi_deferred_slv);
-       lquota_generate_fid(&qqi->qqi_fid, qsd->qsd_pool_id,
-                           QSD_RES_TYPE(qsd), qtype);
+       lquota_generate_fid(&qqi->qqi_fid, QSD_RES_TYPE(qsd), qtype);
 
        /* open accounting object */
        LASSERT(qqi->qqi_acct_obj == NULL);
@@ -589,14 +593,6 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd)
                qsd->qsd_ns = NULL;
        }
 
-       /* free per-quota type data */
-       for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++)
-               qsd_qtype_fini(env, qsd, qtype);
-
-       /* deregister connection to the quota master */
-       qsd->qsd_exp_valid = false;
-       lustre_deregister_lwp_item(&qsd->qsd_exp);
-
        /* release per-filesystem information */
        if (qsd->qsd_fsinfo != NULL) {
                mutex_lock(&qsd->qsd_fsinfo->qfs_mutex);
@@ -607,6 +603,14 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd)
                qsd->qsd_fsinfo = NULL;
        }
 
+       /* free per-quota type data */
+       for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++)
+               qsd_qtype_fini(env, qsd, qtype);
+
+       /* deregister connection to the quota master */
+       qsd->qsd_exp_valid = false;
+       lustre_deregister_lwp_item(&qsd->qsd_exp);
+
        /* release quota root directory */
        if (qsd->qsd_root != NULL) {
                dt_object_put(env, qsd->qsd_root);
@@ -680,11 +684,6 @@ struct qsd_instance *qsd_init(const struct lu_env *env, char *svname,
        lu_ref_add(&dev->dd_lu_dev.ld_reference, "qsd", qsd);
        qsd->qsd_dev = dev;
 
-       /* we only support pool ID 0 (default data or metadata pool) for the
-        * time being. A different pool ID could be assigned to this target via
-        * the configuration log in the future */
-       qsd->qsd_pool_id  = 0;
-
        /* get fsname from svname */
        rc = server_name2fsname(svname, qti->qti_buf, NULL);
        if (rc) {