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; }
/* 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);