+/* 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)
+{
+ struct qsd_instance *qsd = (struct qsd_instance *)data;
+ int rc = 0, qtype;
+
+ LASSERT(qsd != NULL);
+
+ cfs_write_lock(&qsd->qsd_lock);
+ if (qsd->qsd_stopping) {
+ /* don't mess up with shutdown procedure, it is already
+ * complicated enough */
+ rc = -ESHUTDOWN;
+ } else if (!qsd->qsd_prepared) {
+ rc = -EAGAIN;
+ } else {
+ /* mark all indexes as stale */
+ for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ qsd->qsd_type_array[qtype]->qqi_glb_uptodate = false;
+ qsd->qsd_type_array[qtype]->qqi_slv_uptodate = false;
+ }
+ }
+ cfs_write_unlock(&qsd->qsd_lock);
+
+ if (rc)
+ return rc;
+
+ /* kick off reintegration */
+ for (qtype = USRQUOTA; qtype < MAXQUOTAS; qtype++) {
+ rc = qsd_start_reint_thread(qsd->qsd_type_array[qtype]);
+ if (rc)
+ break;
+ }
+ return rc == 0 ? count : rc;
+}
+