From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757227AbbDPL4O (ORCPT ); Thu, 16 Apr 2015 07:56:14 -0400 Received: from mail-pa0-f54.google.com ([209.85.220.54]:35172 "EHLO mail-pa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754482AbbDPLzv (ORCPT ); Thu, 16 Apr 2015 07:55:51 -0400 From: Sergey Senozhatsky To: Andrew Morton , Minchan Kim Cc: Nitin Gupta , linux-kernel@vger.kernel.org, Sergey Senozhatsky , Sergey Senozhatsky Subject: [PATCHv2 01/10] zram: enable compaction support in zram Date: Thu, 16 Apr 2015 20:55:47 +0900 Message-Id: <1429185356-11096-2-git-send-email-sergey.senozhatsky@gmail.com> X-Mailer: git-send-email 2.4.0.rc2 In-Reply-To: <1429185356-11096-1-git-send-email-sergey.senozhatsky@gmail.com> References: <1429185356-11096-1-git-send-email-sergey.senozhatsky@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit c72c6160d967 ("zram: move compact_store() to sysfs functions area") was intended to be a cosmetic change that moved function around w/o any functional change: http://lkml.iu.edu/hypermail/linux/kernel/1503.1/01818.html Unfortunately, on its way from mmotm to Linus's tree it was altered and turned into "remove compaction support from zram" commit. I've managed to create a mess of commits and Andrew had to pick some of the commits and hand edit them. Fix it and learn my lessons. Signed-off-by: Sergey Senozhatsky --- Documentation/blockdev/zram.txt | 2 +- drivers/block/zram/zram_drv.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt index 48a183e..bef4998 100644 --- a/Documentation/blockdev/zram.txt +++ b/Documentation/blockdev/zram.txt @@ -126,7 +126,7 @@ mem_used_max RW the maximum amount memory zram have consumed to mem_limit RW the maximum amount of memory ZRAM can use to store the compressed data num_migrated RO the number of objects migrated migrated by compaction - +compact WO trigger memory compaction WARNING ======= diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index c94386a..fa6ea76 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1038,6 +1038,7 @@ static const struct block_device_operations zram_devops = { .owner = THIS_MODULE }; +static DEVICE_ATTR_WO(compact); static DEVICE_ATTR_RW(disksize); static DEVICE_ATTR_RO(initstate); static DEVICE_ATTR_WO(reset); @@ -1095,6 +1096,27 @@ static ssize_t mm_stat_show(struct device *dev, return ret; } +static ssize_t compact_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t len) +{ + unsigned long nr_migrated; + struct zram *zram = dev_to_zram(dev); + struct zram_meta *meta; + + down_read(&zram->init_lock); + if (!init_done(zram)) { + up_read(&zram->init_lock); + return -EINVAL; + } + + meta = zram->meta; + nr_migrated = zs_compact(meta->mem_pool); + atomic64_add(nr_migrated, &zram->stats.num_migrated); + up_read(&zram->init_lock); + + return len; +} + static DEVICE_ATTR_RO(io_stat); static DEVICE_ATTR_RO(mm_stat); ZRAM_ATTR_RO(num_reads); @@ -1114,6 +1136,7 @@ static struct attribute *zram_disk_attrs[] = { &dev_attr_num_writes.attr, &dev_attr_failed_reads.attr, &dev_attr_failed_writes.attr, + &dev_attr_compact.attr, &dev_attr_invalid_io.attr, &dev_attr_notify_free.attr, &dev_attr_zero_pages.attr, -- 2.4.0.rc2