From patchwork Fri Feb 17 12:53:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunlong Song X-Patchwork-Id: 9579715 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DF4F7600C5 for ; Fri, 17 Feb 2017 12:41:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D27CD269E2 for ; Fri, 17 Feb 2017 12:41:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C7486286C5; Fri, 17 Feb 2017 12:41:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 61F55269E2 for ; Fri, 17 Feb 2017 12:41:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933744AbdBQMk4 (ORCPT ); Fri, 17 Feb 2017 07:40:56 -0500 Received: from szxga03-in.huawei.com ([119.145.14.66]:36685 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933336AbdBQMky (ORCPT ); Fri, 17 Feb 2017 07:40:54 -0500 Received: from 172.24.1.136 (EHLO szxeml432-hub.china.huawei.com) ([172.24.1.136]) by szxrg03-dlp.huawei.com (MOS 4.4.3-GA FastPath queued) with ESMTP id CPJ17691; Fri, 17 Feb 2017 20:40:51 +0800 (CST) Received: from s00293685.huawei.com (10.108.111.190) by szxeml432-hub.china.huawei.com (10.82.67.209) with Microsoft SMTP Server id 14.3.235.1; Fri, 17 Feb 2017 20:40:44 +0800 From: Yunlong Song To: , , , , , , , CC: , , , Subject: [PATCH 1/2] mkfs.f2fs: add option to set the value of reserved segments and overprovision segments Date: Fri, 17 Feb 2017 20:53:06 +0800 Message-ID: <1487335987-32601-2-git-send-email-yunlong.song@huawei.com> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1487335987-32601-1-git-send-email-yunlong.song@huawei.com> References: <1487335987-32601-1-git-send-email-yunlong.song@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.108.111.190] X-CFilter-Loop: Reflected Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Yunlong Song --- include/f2fs_fs.h | 3 +++ lib/libf2fs.c | 3 +++ mkfs/f2fs_format.c | 21 ++++++++++++++------- mkfs/f2fs_format_main.c | 10 +++++++++- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 97ee297..2a62660 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -304,6 +304,9 @@ struct f2fs_configuration { /* sload parameters */ char *from_dir; char *mount_point; + + u_int32_t force_rsvd; + u_int32_t force_ovp; } __attribute__((packed)); #ifdef CONFIG_64BIT diff --git a/lib/libf2fs.c b/lib/libf2fs.c index 93d3da9..971fe99 100644 --- a/lib/libf2fs.c +++ b/lib/libf2fs.c @@ -573,6 +573,9 @@ void f2fs_init_configuration(void) c.trim = 1; c.ro = 0; c.kd = -1; + + c.force_rsvd = 0; + c.force_ovp = 0; } static int is_mounted(const char *mpt, const char *device) diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index 3c13026..42a7bd5 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -337,9 +337,12 @@ static int f2fs_prepare_super_block(void) if (c.overprovision == 0) c.overprovision = get_best_overprovision(sb); - c.reserved_segments = - (2 * (100 / c.overprovision + 1) + 6) - * c.segs_per_sec; + if (c.force_rsvd) + c.reserved_segments = c.force_rsvd; + else + c.reserved_segments = + (2 * (100 / c.overprovision + 1) + 6) + * c.segs_per_sec; if (c.overprovision == 0 || c.total_segments < F2FS_MIN_SEGMENTS || (c.devices[0].total_sectors * @@ -522,13 +525,17 @@ static int f2fs_write_check_point_pack(void) set_cp(cur_data_blkoff[0], 1); set_cp(valid_block_count, 2); set_cp(rsvd_segment_count, c.reserved_segments); - set_cp(overprov_segment_count, (get_sb(segment_count_main) - - get_cp(rsvd_segment_count)) * - c.overprovision / 100); + if (c.force_ovp) + set_cp(overprov_segment_count, c.force_ovp); + else + set_cp(overprov_segment_count, (get_sb(segment_count_main) - + get_cp(rsvd_segment_count)) * + c.overprovision / 100); set_cp(overprov_segment_count, get_cp(overprov_segment_count) + get_cp(rsvd_segment_count)); - MSG(0, "Info: Overprovision ratio = %.3lf%%\n", c.overprovision); + if (c.force_rsvd == 0 || c.force_ovp == 0) + MSG(0, "Info: Overprovision ratio = %.3lf%%\n", c.overprovision); MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", get_cp(overprov_segment_count), c.reserved_segments); diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c index 5bb1faf..45c513b 100644 --- a/mkfs/f2fs_format_main.c +++ b/mkfs/f2fs_format_main.c @@ -39,6 +39,8 @@ static void mkfs_usage() MSG(0, " -z # of sections per zone [default:1]\n"); MSG(0, " -t 0: nodiscard, 1: discard [default:1]\n"); MSG(0, " -m support zoned block device [default:0]\n"); + MSG(0, " -r force set reserved segments\n"); + MSG(0, " -R force set overprovision segments\n"); MSG(0, "sectors: number of sectors. [default: determined by device size]\n"); exit(1); } @@ -72,7 +74,7 @@ static void parse_feature(const char *features) static void f2fs_parse_options(int argc, char *argv[]) { - static const char *option_string = "qa:c:d:e:l:mo:O:s:z:t:"; + static const char *option_string = "qa:c:d:e:l:mo:O:s:z:t:r:R:"; int32_t option=0; while ((option = getopt(argc,argv,option_string)) != EOF) { @@ -128,6 +130,12 @@ static void f2fs_parse_options(int argc, char *argv[]) case 't': c.trim = atoi(optarg); break; + case 'r': + c.force_rsvd = atoi(optarg); + break; + case 'R': + c.force_ovp = atoi(optarg); + break; default: MSG(0, "\tError: Unknown option %c\n",option); mkfs_usage();