diff options
Diffstat (limited to 'drivers/staging/zram/zram_sysfs.c')
-rw-r--r-- | drivers/staging/zram/zram_sysfs.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/staging/zram/zram_sysfs.c b/drivers/staging/zram/zram_sysfs.c index de1eacf65dbd..e6a929d452f7 100644 --- a/drivers/staging/zram/zram_sysfs.c +++ b/drivers/staging/zram/zram_sysfs.c @@ -56,21 +56,26 @@ 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 = PAGE_ALIGN(disksize); + zram->disksize = disksize; set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); + zram_init_device(zram, meta); up_write(&zram->init_lock); return len; @@ -110,11 +115,7 @@ static ssize_t reset_store(struct device *dev, if (bdev) fsync_bdev(bdev); - down_write(&zram->init_lock); - if (zram->init_done) - __zram_reset_device(zram); - up_write(&zram->init_lock); - + zram_reset_device(zram); return len; } @@ -185,9 +186,10 @@ static ssize_t mem_used_total_show(struct device *dev, { u64 val = 0; struct zram *zram = dev_to_zram(dev); + struct zram_meta *meta = zram->meta; if (zram->init_done) - val = zs_get_total_size_bytes(zram->mem_pool); + val = zs_get_total_size_bytes(meta->mem_pool); return sprintf(buf, "%llu\n", val); } |