Пример #1
0
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);
}