From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750891AbdE2AvF (ORCPT ); Sun, 28 May 2017 20:51:05 -0400 Received: from LGEAMRELO13.lge.com ([156.147.23.53]:46165 "EHLO lgeamrelo13.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750837AbdE2AvE (ORCPT ); Sun, 28 May 2017 20:51:04 -0400 X-Original-SENDERIP: 156.147.1.126 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 165.244.249.23 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 10.177.220.163 X-Original-MAILFROM: minchan@kernel.org From: Minchan Kim To: Andrew Morton CC: , kernel-team , Minchan Kim , Sergey Senozhatsky Subject: [PATCH] zram: clean up duplicated codes in __zram_bvec_write Date: Mon, 29 May 2017 09:50:48 +0900 Message-ID: <1496019048-27016-1-git-send-email-minchan@kernel.org> X-Mailer: git-send-email 2.7.4 X-MIMETrack: Itemize by SMTP Server on LGEKRMHUB01/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2017/05/29 09:51:00, Serialize by Router on LGEKRMHUB01/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2017/05/29 09:51:00, Serialize complete at 2017/05/29 09:51:00 MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org __zram_bvec_write has some of duplicated logic for zram meta data handling of same_page|dedup_page|compressed_page. This patch aims to clean it up without behavior change. Cc: Sergey Senozhatsky Signed-off-by: Minchan Kim --- drivers/block/zram/zram_drv.c | 70 +++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 5f2a862..0557c15 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -500,30 +500,6 @@ static bool zram_same_page_read(struct zram *zram, u32 index, return false; } -static bool zram_same_page_write(struct zram *zram, u32 index, - struct page *page) -{ - unsigned long element; - void *mem = kmap_atomic(page); - - if (page_same_filled(mem, &element)) { - kunmap_atomic(mem); - /* Free memory associated with this sector now. */ - zram_slot_lock(zram, index); - zram_free_page(zram, index); - zram_set_flag(zram, index, ZRAM_SAME); - zram_set_element(zram, index, element); - zram_slot_unlock(zram, index); - - atomic64_inc(&zram->stats.same_pages); - atomic64_inc(&zram->stats.pages_stored); - return true; - } - kunmap_atomic(mem); - - return false; -} - static struct zram_entry *zram_entry_alloc(struct zram *zram, unsigned int len, gfp_t flags) { @@ -790,28 +766,31 @@ static int zram_compress(struct zram *zram, struct zcomp_strm **zstrm, static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index) { int ret; - struct zram_entry *entry; - unsigned int comp_len; - void *src, *dst; + struct zram_entry *uninitialized_var(entry); + unsigned int uninitialized_var(comp_len); + void *src, *dst, *mem; struct zcomp_strm *zstrm; struct page *page = bvec->bv_page; u32 checksum; + enum zram_pageflags flags = 0; + unsigned long uninitialized_var(element); - if (zram_same_page_write(zram, index, page)) - return 0; + mem = kmap_atomic(page); + if (page_same_filled(mem, &element)) { + kunmap_atomic(mem); + /* Free memory associated with this sector now. */ + flags = ZRAM_SAME; + atomic64_inc(&zram->stats.same_pages); + goto out; + } + kunmap_atomic(mem); entry = zram_dedup_find(zram, page, &checksum); if (entry) { comp_len = entry->len; - zram_slot_lock(zram, index); - zram_free_page(zram, index); - zram_set_flag(zram, index, ZRAM_DUP); - zram_set_entry(zram, index, entry); - zram_set_obj_size(zram, index, comp_len); - zram_slot_unlock(zram, index); + flags = ZRAM_DUP; atomic64_add(comp_len, &zram->stats.dup_data_size); - atomic64_inc(&zram->stats.pages_stored); - return 0; + goto out; } zstrm = zcomp_stream_get(zram->comp); @@ -835,19 +814,24 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index) zs_unmap_object(zram->mem_pool, zram_entry_handle(zram, entry)); zram_dedup_insert(zram, entry, checksum); +out: + zram_slot_lock(zram, index); /* * Free memory associated with this sector * before overwriting unused sectors. */ - zram_slot_lock(zram, index); zram_free_page(zram, index); - zram_set_entry(zram, index, entry); - zram_set_obj_size(zram, index, comp_len); + if (flags) + zram_set_flag(zram, index, flags); + if (flags != ZRAM_SAME) { + zram_set_obj_size(zram, index, comp_len); + zram_set_entry(zram, index, entry); + } else { + zram_set_element(zram, index, element); + } zram_slot_unlock(zram, index); - - /* Update stats */ - atomic64_add(comp_len, &zram->stats.compr_data_size); atomic64_inc(&zram->stats.pages_stored); + return 0; } -- 2.7.4