zram->table[index].element = element;
 }
 
+static void zram_accessed(struct zram *zram, u32 index)
+{
+       zram->table[index].ac_time = sched_clock();
+}
+
+static void zram_reset_access(struct zram *zram, u32 index)
+{
+       zram->table[index].ac_time = 0;
+}
+
 static unsigned long zram_get_element(struct zram *zram, u32 index)
 {
        return zram->table[index].element;
 {
        unsigned long handle;
 
+       zram_reset_access(zram, index);
+
        if (zram_test_flag(zram, index, ZRAM_HUGE)) {
                zram_clear_flag(zram, index, ZRAM_HUGE);
                atomic64_dec(&zram->stats.huge_pages);
 
        generic_end_io_acct(q, rw_acct, &zram->disk->part0, start_time);
 
+       zram_slot_lock(zram, index);
+       zram_accessed(zram, index);
+       zram_slot_unlock(zram, index);
+
        if (unlikely(ret < 0)) {
                if (!is_write)
                        atomic64_inc(&zram->stats.failed_reads);