Lines Matching refs:index

58 static void zram_free_page(struct zram *zram, size_t index);
60 u32 index, int offset, struct bio *bio);
63 static int zram_slot_trylock(struct zram *zram, u32 index) in zram_slot_trylock() argument
65 return bit_spin_trylock(ZRAM_LOCK, &zram->table[index].flags); in zram_slot_trylock()
68 static void zram_slot_lock(struct zram *zram, u32 index) in zram_slot_lock() argument
70 bit_spin_lock(ZRAM_LOCK, &zram->table[index].flags); in zram_slot_lock()
73 static void zram_slot_unlock(struct zram *zram, u32 index) in zram_slot_unlock() argument
75 bit_spin_unlock(ZRAM_LOCK, &zram->table[index].flags); in zram_slot_unlock()
88 static unsigned long zram_get_handle(struct zram *zram, u32 index) in zram_get_handle() argument
90 return zram->table[index].handle; in zram_get_handle()
93 static void zram_set_handle(struct zram *zram, u32 index, unsigned long handle) in zram_set_handle() argument
95 zram->table[index].handle = handle; in zram_set_handle()
99 static bool zram_test_flag(struct zram *zram, u32 index, in zram_test_flag() argument
102 return zram->table[index].flags & BIT(flag); in zram_test_flag()
105 static void zram_set_flag(struct zram *zram, u32 index, in zram_set_flag() argument
108 zram->table[index].flags |= BIT(flag); in zram_set_flag()
111 static void zram_clear_flag(struct zram *zram, u32 index, in zram_clear_flag() argument
114 zram->table[index].flags &= ~BIT(flag); in zram_clear_flag()
117 static inline void zram_set_element(struct zram *zram, u32 index, in zram_set_element() argument
120 zram->table[index].element = element; in zram_set_element()
123 static unsigned long zram_get_element(struct zram *zram, u32 index) in zram_get_element() argument
125 return zram->table[index].element; in zram_get_element()
128 static size_t zram_get_obj_size(struct zram *zram, u32 index) in zram_get_obj_size() argument
130 return zram->table[index].flags & (BIT(ZRAM_FLAG_SHIFT) - 1); in zram_get_obj_size()
134 u32 index, size_t size) in zram_set_obj_size() argument
136 unsigned long flags = zram->table[index].flags >> ZRAM_FLAG_SHIFT; in zram_set_obj_size()
138 zram->table[index].flags = (flags << ZRAM_FLAG_SHIFT) | size; in zram_set_obj_size()
141 static inline bool zram_allocated(struct zram *zram, u32 index) in zram_allocated() argument
143 return zram_get_obj_size(zram, index) || in zram_allocated()
144 zram_test_flag(zram, index, ZRAM_SAME) || in zram_allocated()
145 zram_test_flag(zram, index, ZRAM_WB); in zram_allocated()
184 static void update_position(u32 *index, int *offset, struct bio_vec *bvec) in update_position() argument
186 *index += (*offset + bvec->bv_len) / PAGE_SIZE; in update_position()
302 int index; in mark_idle() local
304 for (index = 0; index < nr_pages; index++) { in mark_idle()
309 zram_slot_lock(zram, index); in mark_idle()
310 if (zram_allocated(zram, index) && in mark_idle()
311 !zram_test_flag(zram, index, ZRAM_UNDER_WB)) { in mark_idle()
313 is_idle = !cutoff || ktime_after(cutoff, zram->table[index].ac_time); in mark_idle()
316 zram_set_flag(zram, index, ZRAM_IDLE); in mark_idle()
318 zram_slot_unlock(zram, index); in mark_idle()
655 unsigned long index = 0; in writeback_store() local
671 if (kstrtol(buf + sizeof(PAGE_WB_SIG) - 1, 10, &index) || in writeback_store()
672 index >= nr_pages) in writeback_store()
696 for (; nr_pages != 0; index++, nr_pages--) { in writeback_store()
719 zram_slot_lock(zram, index); in writeback_store()
720 if (!zram_allocated(zram, index)) in writeback_store()
723 if (zram_test_flag(zram, index, ZRAM_WB) || in writeback_store()
724 zram_test_flag(zram, index, ZRAM_SAME) || in writeback_store()
725 zram_test_flag(zram, index, ZRAM_UNDER_WB)) in writeback_store()
729 !zram_test_flag(zram, index, ZRAM_IDLE)) in writeback_store()
732 !zram_test_flag(zram, index, ZRAM_HUGE)) in writeback_store()
738 zram_set_flag(zram, index, ZRAM_UNDER_WB); in writeback_store()
740 zram_set_flag(zram, index, ZRAM_IDLE); in writeback_store()
741 zram_slot_unlock(zram, index); in writeback_store()
742 if (zram_bvec_read(zram, &bvec, index, 0, NULL)) { in writeback_store()
743 zram_slot_lock(zram, index); in writeback_store()
744 zram_clear_flag(zram, index, ZRAM_UNDER_WB); in writeback_store()
745 zram_clear_flag(zram, index, ZRAM_IDLE); in writeback_store()
746 zram_slot_unlock(zram, index); in writeback_store()
763 zram_slot_lock(zram, index); in writeback_store()
764 zram_clear_flag(zram, index, ZRAM_UNDER_WB); in writeback_store()
765 zram_clear_flag(zram, index, ZRAM_IDLE); in writeback_store()
766 zram_slot_unlock(zram, index); in writeback_store()
785 zram_slot_lock(zram, index); in writeback_store()
786 if (!zram_allocated(zram, index) || in writeback_store()
787 !zram_test_flag(zram, index, ZRAM_IDLE)) { in writeback_store()
788 zram_clear_flag(zram, index, ZRAM_UNDER_WB); in writeback_store()
789 zram_clear_flag(zram, index, ZRAM_IDLE); in writeback_store()
793 zram_free_page(zram, index); in writeback_store()
794 zram_clear_flag(zram, index, ZRAM_UNDER_WB); in writeback_store()
795 zram_set_flag(zram, index, ZRAM_WB); in writeback_store()
796 zram_set_element(zram, index, blk_idx); in writeback_store()
804 zram_slot_unlock(zram, index); in writeback_store()
900 static void zram_accessed(struct zram *zram, u32 index) in zram_accessed() argument
902 zram_clear_flag(zram, index, ZRAM_IDLE); in zram_accessed()
903 zram->table[index].ac_time = ktime_get_boottime(); in zram_accessed()
910 ssize_t index, written = 0; in read_block_state() local
926 for (index = *ppos; index < nr_pages; index++) { in read_block_state()
929 zram_slot_lock(zram, index); in read_block_state()
930 if (!zram_allocated(zram, index)) in read_block_state()
933 ts = ktime_to_timespec64(zram->table[index].ac_time); in read_block_state()
936 index, (s64)ts.tv_sec, in read_block_state()
938 zram_test_flag(zram, index, ZRAM_SAME) ? 's' : '.', in read_block_state()
939 zram_test_flag(zram, index, ZRAM_WB) ? 'w' : '.', in read_block_state()
940 zram_test_flag(zram, index, ZRAM_HUGE) ? 'h' : '.', in read_block_state()
941 zram_test_flag(zram, index, ZRAM_IDLE) ? 'i' : '.'); in read_block_state()
944 zram_slot_unlock(zram, index); in read_block_state()
950 zram_slot_unlock(zram, index); in read_block_state()
986 static void zram_accessed(struct zram *zram, u32 index) in zram_accessed() argument
988 zram_clear_flag(zram, index, ZRAM_IDLE); in zram_accessed()
1175 size_t index; in zram_meta_free() local
1178 for (index = 0; index < num_pages; index++) in zram_meta_free()
1179 zram_free_page(zram, index); in zram_meta_free()
1210 static void zram_free_page(struct zram *zram, size_t index) in zram_free_page() argument
1215 zram->table[index].ac_time = 0; in zram_free_page()
1217 if (zram_test_flag(zram, index, ZRAM_IDLE)) in zram_free_page()
1218 zram_clear_flag(zram, index, ZRAM_IDLE); in zram_free_page()
1220 if (zram_test_flag(zram, index, ZRAM_HUGE)) { in zram_free_page()
1221 zram_clear_flag(zram, index, ZRAM_HUGE); in zram_free_page()
1225 if (zram_test_flag(zram, index, ZRAM_WB)) { in zram_free_page()
1226 zram_clear_flag(zram, index, ZRAM_WB); in zram_free_page()
1227 free_block_bdev(zram, zram_get_element(zram, index)); in zram_free_page()
1235 if (zram_test_flag(zram, index, ZRAM_SAME)) { in zram_free_page()
1236 zram_clear_flag(zram, index, ZRAM_SAME); in zram_free_page()
1241 handle = zram_get_handle(zram, index); in zram_free_page()
1247 atomic64_sub(zram_get_obj_size(zram, index), in zram_free_page()
1251 zram_set_handle(zram, index, 0); in zram_free_page()
1252 zram_set_obj_size(zram, index, 0); in zram_free_page()
1253 WARN_ON_ONCE(zram->table[index].flags & in zram_free_page()
1257 static int __zram_bvec_read(struct zram *zram, struct page *page, u32 index, in __zram_bvec_read() argument
1266 zram_slot_lock(zram, index); in __zram_bvec_read()
1267 if (zram_test_flag(zram, index, ZRAM_WB)) { in __zram_bvec_read()
1270 zram_slot_unlock(zram, index); in __zram_bvec_read()
1276 zram_get_element(zram, index), in __zram_bvec_read()
1280 handle = zram_get_handle(zram, index); in __zram_bvec_read()
1281 if (!handle || zram_test_flag(zram, index, ZRAM_SAME)) { in __zram_bvec_read()
1285 value = handle ? zram_get_element(zram, index) : 0; in __zram_bvec_read()
1289 zram_slot_unlock(zram, index); in __zram_bvec_read()
1293 size = zram_get_obj_size(zram, index); in __zram_bvec_read()
1311 zram_slot_unlock(zram, index); in __zram_bvec_read()
1315 pr_err("Decompression failed! err=%d, page=%u\n", ret, index); in __zram_bvec_read()
1321 u32 index, int offset, struct bio *bio) in zram_bvec_read() argument
1334 ret = __zram_bvec_read(zram, page, index, bio, is_partial_io(bvec)); in zram_bvec_read()
1354 u32 index, struct bio *bio) in __zram_bvec_write() argument
1447 zram_slot_lock(zram, index); in __zram_bvec_write()
1448 zram_free_page(zram, index); in __zram_bvec_write()
1451 zram_set_flag(zram, index, ZRAM_HUGE); in __zram_bvec_write()
1457 zram_set_flag(zram, index, flags); in __zram_bvec_write()
1458 zram_set_element(zram, index, element); in __zram_bvec_write()
1460 zram_set_handle(zram, index, handle); in __zram_bvec_write()
1461 zram_set_obj_size(zram, index, comp_len); in __zram_bvec_write()
1463 zram_slot_unlock(zram, index); in __zram_bvec_write()
1471 u32 index, int offset, struct bio *bio) in zram_bvec_write() argument
1489 ret = __zram_bvec_read(zram, page, index, bio, true); in zram_bvec_write()
1504 ret = __zram_bvec_write(zram, &vec, index, bio); in zram_bvec_write()
1516 static void zram_bio_discard(struct zram *zram, u32 index, in zram_bio_discard() argument
1536 index++; in zram_bio_discard()
1540 zram_slot_lock(zram, index); in zram_bio_discard()
1541 zram_free_page(zram, index); in zram_bio_discard()
1542 zram_slot_unlock(zram, index); in zram_bio_discard()
1544 index++; in zram_bio_discard()
1554 static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index, in zram_bvec_rw() argument
1561 ret = zram_bvec_read(zram, bvec, index, offset, bio); in zram_bvec_rw()
1565 ret = zram_bvec_write(zram, bvec, index, offset, bio); in zram_bvec_rw()
1568 zram_slot_lock(zram, index); in zram_bvec_rw()
1569 zram_accessed(zram, index); in zram_bvec_rw()
1570 zram_slot_unlock(zram, index); in zram_bvec_rw()
1585 u32 index; in __zram_make_request() local
1590 index = bio->bi_iter.bi_sector >> SECTORS_PER_PAGE_SHIFT; in __zram_make_request()
1597 zram_bio_discard(zram, index, offset, bio); in __zram_make_request()
1612 if (zram_bvec_rw(zram, &bv, index, offset, in __zram_make_request()
1621 update_position(&index, &offset, &bv); in __zram_make_request()
1646 unsigned long index) in zram_slot_free_notify() argument
1653 if (!zram_slot_trylock(zram, index)) { in zram_slot_free_notify()
1658 zram_free_page(zram, index); in zram_slot_free_notify()
1659 zram_slot_unlock(zram, index); in zram_slot_free_notify()
1666 u32 index; in zram_rw_page() local
1681 index = sector >> SECTORS_PER_PAGE_SHIFT; in zram_rw_page()
1689 ret = zram_bvec_rw(zram, &bv, index, offset, op, NULL); in zram_rw_page()