]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Use ddi_time_after and friends to compare time
authorChunwei Chen <tuxoko@gmail.com>
Tue, 25 Feb 2014 09:32:21 +0000 (17:32 +0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 14 Apr 2014 20:27:56 +0000 (13:27 -0700)
Also, make sure we use clock_t for ddi_get_lbolt to prevent type conversion
from screwing things.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2142

include/sys/vdev_impl.h
include/sys/zfs_context.h
module/zfs/arc.c
module/zfs/txg.c
module/zfs/vdev_cache.c
module/zfs/zio_inject.c

index 4b465d2958c16c63fc3104c91df20ef1963b7e3b..703dd65da8d659f9ffd0fd260eb6ed30c2cbeefb 100644 (file)
@@ -86,7 +86,7 @@ typedef const struct vdev_ops {
 struct vdev_cache_entry {
        char            *ve_data;
        uint64_t        ve_offset;
-       uint64_t        ve_lastused;
+       clock_t         ve_lastused;
        avl_node_t      ve_offset_node;
        avl_node_t      ve_lastused_node;
        uint32_t        ve_hits;
index fa12cea5372d76e3ccaf8f4abc57062c25be234e..1861b845dded137b755c19b62a385c976b1aad37 100644 (file)
@@ -584,6 +584,16 @@ extern vnode_t *rootdir;
 #define        ddi_get_lbolt64()       (gethrtime() >> 23)
 #define        hz      119     /* frequency when using gethrtime() >> 23 for lbolt */
 
+#define        ddi_time_before(a, b)           (a < b)
+#define        ddi_time_after(a, b)            ddi_time_before(b, a)
+#define        ddi_time_before_eq(a, b)        (!ddi_time_after(a, b))
+#define        ddi_time_after_eq(a, b)         ddi_time_before_eq(b, a)
+
+#define        ddi_time_before64(a, b)         (a < b)
+#define        ddi_time_after64(a, b)          ddi_time_before64(b, a)
+#define        ddi_time_before_eq64(a, b)      (!ddi_time_after64(a, b))
+#define        ddi_time_after_eq64(a, b)       ddi_time_before_eq64(b, a)
+
 extern void delay(clock_t ticks);
 
 #define        SEC_TO_TICK(sec)        ((sec) * hz)
index 00d26592d738a7f11f1b5be520700bbb8e125b11..518b82efa87e19ccc567789d9e813615d1df4810 100644 (file)
@@ -2480,7 +2480,8 @@ arc_adapt_thread(void)
 #endif /* !_KERNEL */
 
                /* No recent memory pressure allow the ARC to grow. */
-               if (arc_no_grow && ddi_get_lbolt() >= arc_grow_time)
+               if (arc_no_grow &&
+                   ddi_time_after_eq(ddi_get_lbolt(), arc_grow_time))
                        arc_no_grow = FALSE;
 
                arc_adjust_meta();
@@ -2918,7 +2919,7 @@ arc_access(arc_buf_hdr_t *buf, kmutex_t *hash_lock)
                 * but it is still in the cache. Move it to the MFU
                 * state.
                 */
-               if (now > buf->b_arc_access + ARC_MINTIME) {
+               if (ddi_time_after(now, buf->b_arc_access + ARC_MINTIME)) {
                        /*
                         * More than 125ms have passed since we
                         * instantiated this buffer.  Move it to the
index 524fe8e84367947471c10899c452dc4284084420..ff25c9c1b3aed0ee516919138bf336306a614da3 100644 (file)
@@ -480,7 +480,7 @@ txg_sync_thread(dsl_pool_t *dp)
        tx_state_t *tx = &dp->dp_tx;
        callb_cpr_t cpr;
        vdev_stat_t *vs1, *vs2;
-       uint64_t start, delta;
+       clock_t start, delta;
 
 #ifdef _KERNEL
        /*
@@ -498,7 +498,7 @@ txg_sync_thread(dsl_pool_t *dp)
 
        start = delta = 0;
        for (;;) {
-               uint64_t timer, timeout;
+               clock_t timer, timeout;
                uint64_t txg;
                uint64_t ndirty;
 
index ffd50ec2fddbbcbdf9ef8655afe6e2abd5ab5195..d1ee9afd96152e6e836ae2f0f92921bfba9d17f2 100644 (file)
@@ -123,9 +123,9 @@ vdev_cache_lastused_compare(const void *a1, const void *a2)
        const vdev_cache_entry_t *ve1 = a1;
        const vdev_cache_entry_t *ve2 = a2;
 
-       if (ve1->ve_lastused < ve2->ve_lastused)
+       if (ddi_time_before(ve1->ve_lastused, ve2->ve_lastused))
                return (-1);
-       if (ve1->ve_lastused > ve2->ve_lastused)
+       if (ddi_time_after(ve1->ve_lastused, ve2->ve_lastused))
                return (1);
 
        /*
index 39ec590b5e7e931ec38b697016041ddff8ebbcdc..13d188731c68aa5b96adca6a399e10c0b440ae79 100644 (file)
@@ -345,9 +345,10 @@ spa_handle_ignored_writes(spa_t *spa)
 
                if (handler->zi_record.zi_duration > 0) {
                        VERIFY(handler->zi_record.zi_timer == 0 ||
-                           handler->zi_record.zi_timer +
-                           handler->zi_record.zi_duration * hz >
-                           ddi_get_lbolt64());
+                           ddi_time_after64(
+                           (int64_t)handler->zi_record.zi_timer +
+                           handler->zi_record.zi_duration * hz,
+                           ddi_get_lbolt64()));
                } else {
                        /* duration is negative so the subtraction here adds */
                        VERIFY(handler->zi_record.zi_timer == 0 ||