Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp1844722imd; Sun, 4 Nov 2018 10:40:07 -0800 (PST) X-Google-Smtp-Source: AJdET5ctUAi09iBZiH6+AUMct8dKRILdA97nkuN+gcRw68On+AG58Ac4KuQ2NE6Ta/WcwCAfljJF X-Received: by 2002:a63:5ec6:: with SMTP id s189mr16924593pgb.357.1541356807503; Sun, 04 Nov 2018 10:40:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541356807; cv=none; d=google.com; s=arc-20160816; b=KJeoTHVTgtNGeaHUV4UKAsSLLcoy+GuaMeek6hqbBl31NMCRnkSE8kYu7OZMbRyMgt 7oBSOMQMMH1NvhP6ezv5GG6/E74xOuRysp9WZkwLmGonreQFr/m6SM0efiyaeytHRkpn oP7ZXH0yoATAei1g1XX9ajJgB399JpQBjvcwZB6Yh5klXeVwU5wkR6pzlWTkCWomUcdX itnFaavIbx/SdJkkPB7vllVkg+YaBBic40uJMKKCfCpWq/++Jjc0QvcRzRUM5bGZGGNI S8sCjWgF58UWlspoBEjkTnzSO5mTLPFgaJaMTbM3lFqmjFx/QRSX31mLrGLXyU6M1f39 54WA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:mime-version:user-agent:date:message-id:cc:to :subject:from; bh=/pm2Zf3erzPX46+mKuKgIOOmXJdqxSiI8vul2tOTwAg=; b=uSG66tiG7XFr5pNcoLFsTbDXe7qvr8OzeM7Ta/+98g3wj1xYqu++69NXVKpg2GkNH3 rSL+V0WhK9HOicRhBJRkDWsSJZQbb2mQydqnghKgj/9ToZ1SsFfMMWSAoomONOucBawf uecLIikdLvu5lPJ/a2YsM32hmmVN5yLm4WF99+XtdVjfWsrJ2Mgg9Lj/CbSkWa5CAaN1 +pO71ejFZZ4V5zzsKz7HTaK3mga+JBP9uC7zoaHmlYBHk9mwG8e+mRUjo7uTLC0xvmxT sWRg5x3TIFPARza2c8E212bv8OLZCwQnnhEJMcBQ+ogn0cOcGsmjfr6mnOnc1bAiEjvC FKyw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u30si29684005pgn.170.2018.11.04.10.39.53; Sun, 04 Nov 2018 10:40:07 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732007AbeKEB5M (ORCPT + 99 others); Sun, 4 Nov 2018 20:57:12 -0500 Received: from relay.sw.ru ([185.231.240.75]:45264 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729311AbeKEB5M (ORCPT ); Sun, 4 Nov 2018 20:57:12 -0500 Received: from [172.16.24.21] by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gJLSr-0005Ib-Ln; Sun, 04 Nov 2018 19:41:29 +0300 From: Vasily Averin Subject: [PATCH] ext4: remove code duplication in update_ind/bind/tind_extent_range To: linux-ext4@vger.kernel.org, Theodore Ts'o Cc: Andreas Dilger , linux-kernel@vger.kernel.org Message-ID: <1f58b6b3-de16-a08d-2952-5db70dbfc778@virtuozzo.com> Date: Sun, 4 Nov 2018 19:41:28 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org update_ind/bind/tind_extent_page() differs by one variable and can be replaced by unified function. These functions are called by similar way and their caller function can be simplified too. Signed-off-by: Vasily Averin --- fs/ext4/migrate.c | 111 ++++++++++------------------------------------ 1 file changed, 23 insertions(+), 88 deletions(-) diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index 61a9d1927817..02ce99ba32be 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -109,12 +109,13 @@ static int update_extent_range(handle_t *handle, struct inode *inode, static int update_ind_extent_range(handle_t *handle, struct inode *inode, ext4_fsblk_t pblock, - struct migrate_struct *lb) + struct migrate_struct *lb, + ext4_lblk_t inc) { struct buffer_head *bh; __le32 *i_data; int i, retval = 0; - unsigned long max_entries = inode->i_sb->s_blocksize >> 2; + ext4_lblk_t max_entries = inode->i_sb->s_blocksize >> 2; bh = sb_bread(inode->i_sb, pblock); if (!bh) @@ -128,67 +129,7 @@ static int update_ind_extent_range(handle_t *handle, struct inode *inode, if (retval) break; } else { - lb->curr_block++; - } - } - put_bh(bh); - return retval; - -} - -static int update_dind_extent_range(handle_t *handle, struct inode *inode, - ext4_fsblk_t pblock, - struct migrate_struct *lb) -{ - struct buffer_head *bh; - __le32 *i_data; - int i, retval = 0; - unsigned long max_entries = inode->i_sb->s_blocksize >> 2; - - bh = sb_bread(inode->i_sb, pblock); - if (!bh) - return -EIO; - - i_data = (__le32 *)bh->b_data; - for (i = 0; i < max_entries; i++) { - if (i_data[i]) { - retval = update_ind_extent_range(handle, inode, - le32_to_cpu(i_data[i]), lb); - if (retval) - break; - } else { - /* Only update the file block number */ - lb->curr_block += max_entries; - } - } - put_bh(bh); - return retval; - -} - -static int update_tind_extent_range(handle_t *handle, struct inode *inode, - ext4_fsblk_t pblock, - struct migrate_struct *lb) -{ - struct buffer_head *bh; - __le32 *i_data; - int i, retval = 0; - unsigned long max_entries = inode->i_sb->s_blocksize >> 2; - - bh = sb_bread(inode->i_sb, pblock); - if (!bh) - return -EIO; - - i_data = (__le32 *)bh->b_data; - for (i = 0; i < max_entries; i++) { - if (i_data[i]) { - retval = update_dind_extent_range(handle, inode, - le32_to_cpu(i_data[i]), lb); - if (retval) - break; - } else { - /* Only update the file block number */ - lb->curr_block += max_entries * max_entries; + lb->curr_block += inc; } } put_bh(bh); @@ -433,7 +374,7 @@ int ext4_ext_migrate(struct inode *inode) struct ext4_inode_info *ei; struct inode *tmp_inode = NULL; struct migrate_struct lb; - unsigned long max_entries; + ext4_lblk_t max_entries, inc, mult; __u32 goal; uid_t owner[2]; @@ -523,34 +464,28 @@ int ext4_ext_migrate(struct inode *inode) /* 32 bit block address 4 bytes */ max_entries = inode->i_sb->s_blocksize >> 2; - for (i = 0; i < EXT4_NDIR_BLOCKS; i++) { + + inc = 1; mult = 1; + for (i = 0; i < EXT4_N_BLOCKS; i++) { + if (i == EXT4_IND_BLOCK) + mult = max_entries; + else if (i > EXT4_IND_BLOCK) + inc = inc * mult; + if (i_data[i]) { - retval = update_extent_range(handle, tmp_inode, + if (i < EXT4_IND_BLOCK) + retval = update_extent_range(handle, tmp_inode, le32_to_cpu(i_data[i]), &lb); + else + retval = update_ind_extent_range(handle, + tmp_inode, + le32_to_cpu(i_data[i]), + &lb, inc); if (retval) goto err_out; - } else - lb.curr_block++; - } - if (i_data[EXT4_IND_BLOCK]) { - retval = update_ind_extent_range(handle, tmp_inode, - le32_to_cpu(i_data[EXT4_IND_BLOCK]), &lb); - if (retval) - goto err_out; - } else - lb.curr_block += max_entries; - if (i_data[EXT4_DIND_BLOCK]) { - retval = update_dind_extent_range(handle, tmp_inode, - le32_to_cpu(i_data[EXT4_DIND_BLOCK]), &lb); - if (retval) - goto err_out; - } else - lb.curr_block += max_entries * max_entries; - if (i_data[EXT4_TIND_BLOCK]) { - retval = update_tind_extent_range(handle, tmp_inode, - le32_to_cpu(i_data[EXT4_TIND_BLOCK]), &lb); - if (retval) - goto err_out; + + } else if (i < EXT4_TIND_BLOCK) + lb.curr_block += inc * mult; } /* * Build the last extent -- 2.17.1