[PATCH 26/37] staging/lustre: use 64-bit times in ptlrpc_enc_page_pool

Arnd Bergmann arnd at arndb.de
Wed Sep 23 19:13:49 UTC 2015


ptlrpc_enc_page_pool computes time deltas using 'long' values from
get_seconds(). This is probably safe beyond y2038, but it's better
to go use monotonic times and 64-bit here for consistency.

Signed-off-by: Arnd Bergmann <arnd at arndb.de>
---
 drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
index 2ee3e8b2e879..56dab9db4157 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
@@ -92,8 +92,8 @@ static struct ptlrpc_enc_page_pool {
 	unsigned long    epp_idle_idx;
 
 	/* last shrink time due to mem tight */
-	long	     epp_last_shrink;
-	long	     epp_last_access;
+	time64_t         epp_last_shrink;
+	time64_t         epp_last_access;
 
 	/*
 	 * in-pool pages bookkeeping
@@ -153,8 +153,8 @@ int sptlrpc_proc_enc_pool_seq_show(struct seq_file *m, void *v)
 		   page_pools.epp_total_pages,
 		   page_pools.epp_free_pages,
 		   page_pools.epp_idle_idx,
-		   get_seconds() - page_pools.epp_last_shrink,
-		   get_seconds() - page_pools.epp_last_access,
+		   (long)(ktime_get_seconds() - page_pools.epp_last_shrink),
+		   (long)(ktime_get_seconds() - page_pools.epp_last_access),
 		   page_pools.epp_st_max_pages,
 		   page_pools.epp_st_grows,
 		   page_pools.epp_st_grow_fails,
@@ -226,7 +226,7 @@ static unsigned long enc_pools_shrink_count(struct shrinker *s,
 	 * if no pool access for a long time, we consider it's fully idle.
 	 * a little race here is fine.
 	 */
-	if (unlikely(get_seconds() - page_pools.epp_last_access >
+	if (unlikely(ktime_get_seconds() - page_pools.epp_last_access >
 		     CACHE_QUIESCENT_PERIOD)) {
 		spin_lock(&page_pools.epp_lock);
 		page_pools.epp_idle_idx = IDLE_IDX_MAX;
@@ -253,7 +253,7 @@ static unsigned long enc_pools_shrink_scan(struct shrinker *s,
 		       (long)sc->nr_to_scan, page_pools.epp_free_pages);
 
 		page_pools.epp_st_shrinks++;
-		page_pools.epp_last_shrink = get_seconds();
+		page_pools.epp_last_shrink = ktime_get_seconds();
 	}
 	spin_unlock(&page_pools.epp_lock);
 
@@ -261,7 +261,7 @@ static unsigned long enc_pools_shrink_scan(struct shrinker *s,
 	 * if no pool access for a long time, we consider it's fully idle.
 	 * a little race here is fine.
 	 */
-	if (unlikely(get_seconds() - page_pools.epp_last_access >
+	if (unlikely(ktime_get_seconds() - page_pools.epp_last_access >
 		     CACHE_QUIESCENT_PERIOD)) {
 		spin_lock(&page_pools.epp_lock);
 		page_pools.epp_idle_idx = IDLE_IDX_MAX;
@@ -457,7 +457,7 @@ static inline void enc_pools_wakeup(void)
 	}
 }
 
-static int enc_pools_should_grow(int page_needed, long now)
+static int enc_pools_should_grow(int page_needed, time64_t now)
 {
 	/* don't grow if someone else is growing the pools right now,
 	 * or the pools has reached its full capacity
@@ -521,7 +521,7 @@ again:
 		if (tick == 0)
 			tick = cfs_time_current();
 
-		now = get_seconds();
+		now = ktime_get_seconds();
 
 		page_pools.epp_st_missings++;
 		page_pools.epp_pages_short += desc->bd_iov_count;
@@ -600,7 +600,7 @@ again:
 				   this_idle) /
 				  (IDLE_IDX_WEIGHT + 1);
 
-	page_pools.epp_last_access = get_seconds();
+	page_pools.epp_last_access = ktime_get_seconds();
 
 	spin_unlock(&page_pools.epp_lock);
 	return 0;
@@ -725,8 +725,8 @@ int sptlrpc_enc_pool_init(void)
 	page_pools.epp_growing = 0;
 
 	page_pools.epp_idle_idx = 0;
-	page_pools.epp_last_shrink = get_seconds();
-	page_pools.epp_last_access = get_seconds();
+	page_pools.epp_last_shrink = ktime_get_seconds();
+	page_pools.epp_last_access = ktime_get_seconds();
 
 	spin_lock_init(&page_pools.epp_lock);
 	page_pools.epp_total_pages = 0;
-- 
2.1.0.rc2



More information about the devel mailing list