From: Xiubo Li <xiubli@xxxxxxxxxx>
Let the __update_latency() helper choose the correcsponding members
according to the metric_type.
URL: https://tracker.ceph.com/issues/49913
Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx>
---
fs/ceph/metric.c | 73 ++++++++++++++++++++++++++++++++++--------------
1 file changed, 52 insertions(+), 21 deletions(-)
diff --git a/fs/ceph/metric.c b/fs/ceph/metric.c
index 28b6b42ad677..f3e68db08760 100644
--- a/fs/ceph/metric.c
+++ b/fs/ceph/metric.c
@@ -285,19 +285,56 @@ void ceph_metric_destroy(struct ceph_client_metric *m)
ceph_put_mds_session(m->session);
}
-static inline void __update_latency(ktime_t *totalp, ktime_t *lsump,
- ktime_t *min, ktime_t *max,
- ktime_t *sq_sump, ktime_t lat)
-{
- ktime_t total, avg, sq, lsum;
-
- total = ++(*totalp);
- lsum = (*lsump += lat);
+typedef enum {
+ CEPH_METRIC_READ,
+ CEPH_METRIC_WRITE,
+ CEPH_METRIC_METADATA,
+} metric_type;
+
+#define METRIC_UPDATE_MIN_MAX(min, max, new) \
+{ \
+ if (unlikely(new < min)) \
+ min = new; \
+ if (unlikely(new > max)) \
+ max = new; \
+}
- if (unlikely(lat < *min))
- *min = lat;
- if (unlikely(lat > *max))
- *max = lat;
+static inline void __update_latency(struct ceph_client_metric *m,
+ metric_type type, ktime_t lat)
+{
+ ktime_t total, avg, sq, lsum, *sq_sump;
+
+ switch (type) {
+ case CEPH_METRIC_READ:
+ total = ++m->total_reads;
+ m->read_latency_sum += lat;
+ lsum = m->read_latency_sum;
+ METRIC_UPDATE_MIN_MAX(m->read_latency_min,
+ m->read_latency_max,
+ lat);
+ sq_sump = &m->read_latency_sq_sum;
+ break;
+ case CEPH_METRIC_WRITE:
+ total = ++m->total_writes;
+ m->write_latency_sum += lat;
+ lsum = m->write_latency_sum;
+ METRIC_UPDATE_MIN_MAX(m->write_latency_min,
+ m->write_latency_max,
+ lat);
+ sq_sump = &m->write_latency_sq_sum;
+ break;
+ case CEPH_METRIC_METADATA:
+ total = ++m->total_metadatas;
+ m->metadata_latency_sum += lat;
+ lsum = m->metadata_latency_sum;
+ METRIC_UPDATE_MIN_MAX(m->metadata_latency_min,
+ m->metadata_latency_max,
+ lat);
+ sq_sump = &m->metadata_latency_sq_sum;
+ break;
+ default:
+ return;
+ }