예제 #1
0
static ssize_t disksize_store(struct device *dev,
		struct device_attribute *attr, const char *buf, size_t len)
{
	u64 disksize;
	struct zram_meta *meta;
	struct zram *zram = dev_to_zram(dev);

	disksize = memparse(buf, NULL);
	if (!disksize)
		return -EINVAL;

	disksize = PAGE_ALIGN(disksize);
	meta = zram_meta_alloc(disksize);
	down_write(&zram->init_lock);
	if (zram->init_done) {
		up_write(&zram->init_lock);
		zram_meta_free(meta);
		pr_info("Cannot change disksize for initialized device\n");
		return -EBUSY;
	}

	zram->disksize = disksize;
	set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);
	zram_init_device(zram, meta);
	up_write(&zram->init_lock);

	return len;
}
예제 #2
0
	/*
	if (!disksize)
		return -EINVAL;
	*/
#else	/* Fix disksize */
	disksize = default_disksize_perc_ram * ((totalram_pages << PAGE_SHIFT) / 100);
	/* Expand its disksize if we have little system ram! */
	if (totalram_pages < SUPPOSED_TOTALRAM) {
		disksize += (disksize >> 1) ;
	}
	/* Align it! */
	disksize = round_up(disksize, DISKSIZE_ALIGNMENT);
#endif

	disksize = PAGE_ALIGN(disksize);
	meta = zram_meta_alloc(disksize);
	/* Check whether meta is null */
	if (!meta) {
		printk(KERN_ALERT"Failed to allocate memory for meta!\n");
		return len;
	}
	down_write(&zram->init_lock);
	if (zram->init_done) {
		up_write(&zram->init_lock);
		zram_meta_free(meta);
		pr_info("Cannot change disksize for initialized device\n");
		return -EBUSY;
	}

	zram->disksize = disksize;
	set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);