static struct zram *dev_to_zram(struct device *dev) { int i; struct zram *zram = NULL; for (i = 0; i < zram_get_num_devices(); i++) { zram = &zram_devices[i]; if (disk_to_dev(zram->disk) == dev) break; } return zram; }
static ssize_t mem_free_percent(void) { unsigned long mem_used_pages = 0; u64 val = 0; int i = 0; struct zram *zram = NULL; struct zram_meta *meta = NULL; unsigned long total_zram_pages = totalram_pages*total_mem_usage_percent/100; for (i = 0; i < zram_get_num_devices(); i++) { zram = &zram_devices[i]; if(!zram || !zram->disk) { continue; } if( !down_read_trylock(&zram->init_lock) ) return -1; if(zram->init_done) { meta = zram->meta; if (meta && meta->mem_pool) { val += zs_get_total_pages(meta->mem_pool); } } up_read(&zram->init_lock); } mem_used_pages = val; pr_debug("ZRAM:totalram_pages:%lu,total_zram_pages:%lu,mem_used_pages:%lu\r\n", totalram_pages, total_zram_pages,mem_used_pages); return (mem_used_pages >= total_zram_pages) ? 0 : ((total_zram_pages - mem_used_pages)*100/total_zram_pages); }