[lustre-devel] [PATCH 392/622] lustre: lu_object: Add missed qos_rr_init

James Simmons jsimmons at infradead.org
Thu Feb 27 13:14:20 PST 2020


From: Patrick Farrell <pfarrell at whamcloud.com>

The new lmv space hash code uses the lu_qos_rr struct, but
forgot to init it fully.  Specifically, the spin lock isn't
inited, causing failures.

WC-bug-id: https://jira.whamcloud.com/browse/LU-12538
Lustre-commit: 5e6a30cc2f34 ("LU-12538 lod: Add missed qos_rr_init")
Signed-off-by: Patrick Farrell <pfarrell at whamcloud.com>
Reviewed-on: https://review.whamcloud.com/35490
Reviewed-by: Andreas Dilger <adilger at whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao at whamcloud.com>
Signed-off-by: James Simmons <jsimmons at infradead.org>
---
 fs/lustre/include/lu_object.h | 1 +
 fs/lustre/lmv/lmv_obd.c       | 3 ++-
 fs/lustre/obdclass/lu_qos.c   | 7 +++++++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/fs/lustre/include/lu_object.h b/fs/lustre/include/lu_object.h
index 6b1064a..d2e84a3 100644
--- a/fs/lustre/include/lu_object.h
+++ b/fs/lustre/include/lu_object.h
@@ -1388,6 +1388,7 @@ struct lu_qos {
 				 lq_reset:1;     /* zero current penalties */
 };
 
+void lu_qos_rr_init(struct lu_qos_rr *lqr);
 int lqos_add_tgt(struct lu_qos *qos, struct lu_tgt_desc *ltd);
 int lqos_del_tgt(struct lu_qos *qos, struct lu_tgt_desc *ltd);
 u64 lu_prandom_u64_max(u64 ep_ro);
diff --git a/fs/lustre/lmv/lmv_obd.c b/fs/lustre/lmv/lmv_obd.c
index ae799db..e9f9c36 100644
--- a/fs/lustre/lmv/lmv_obd.c
+++ b/fs/lustre/lmv/lmv_obd.c
@@ -1295,13 +1295,14 @@ static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
 	INIT_LIST_HEAD(&lmv->lmv_qos.lq_svr_list);
 	init_rwsem(&lmv->lmv_qos.lq_rw_sem);
 	lmv->lmv_qos.lq_dirty = 1;
-	lmv->lmv_qos.lq_rr.lqr_dirty = 1;
 	lmv->lmv_qos.lq_reset = 1;
 	/* Default priority is toward free space balance */
 	lmv->lmv_qos.lq_prio_free = 232;
 	/* Default threshold for rr (roughly 17%) */
 	lmv->lmv_qos.lq_threshold_rr = 43;
 
+	lu_qos_rr_init(&lmv->lmv_qos.lq_rr);
+
 	/*
 	 * initialize rr_index to lower 32bit of netid, so that client
 	 * can distribute subdirs evenly from the beginning.
diff --git a/fs/lustre/obdclass/lu_qos.c b/fs/lustre/obdclass/lu_qos.c
index 9fdcbc2..d4803e8 100644
--- a/fs/lustre/obdclass/lu_qos.c
+++ b/fs/lustre/obdclass/lu_qos.c
@@ -42,6 +42,13 @@
 #include <lustre_fid.h>
 #include <lu_object.h>
 
+void lu_qos_rr_init(struct lu_qos_rr *lqr)
+{
+	spin_lock_init(&lqr->lqr_alloc);
+	lqr->lqr_dirty = 1;
+}
+EXPORT_SYMBOL(lu_qos_rr_init);
+
 /**
  * Add a new target to Quality of Service (QoS) target table.
  *
-- 
1.8.3.1



More information about the lustre-devel mailing list