From patchwork Sun Oct 28 09:22:50 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zheng Liu X-Patchwork-Id: 194665 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id AA10D2C0093 for ; Sun, 28 Oct 2012 20:12:08 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755149Ab2J1JMB (ORCPT ); Sun, 28 Oct 2012 05:12:01 -0400 Received: from mail-da0-f46.google.com ([209.85.210.46]:35419 "EHLO mail-da0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754851Ab2J1JMA (ORCPT ); Sun, 28 Oct 2012 05:12:00 -0400 Received: by mail-da0-f46.google.com with SMTP id n41so1954417dak.19 for ; Sun, 28 Oct 2012 02:11:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=c46+DT20TgtU5Jxj5k3jR8Lmf1o1tk3iRR5A7qnyZ9Y=; b=p0ir0+keaQSpfqbx3dfnelC5tywwXK8tRpUQgYKBsSaCCkuDcjrqv+05hGa+no6qRl othjQ98arJ0IELqZ4WtOA8V6GXFYo0ZrP/dfW37++wx5/pUvt2Se7kddxphDmGIiwPF0 Loe17xsFPxTvKk2Er7shPapkiJQHzWF3MW/PuFocS/4zsRwwUwBy2DupcoUjAFFGfHWt wH4T6+tPFWmhZe9YRl8kjhMYUyJ9SvFvMRrs4UY7C8afBd8YGOdTOYOXk6aFlOFzOTTF EkYk8HF/edpmxxGJIurEukXanT6YJ87jcuXlWUx2CX2e6K07gC38itzhRBh5PnAvpuGt hQVg== Received: by 10.68.189.132 with SMTP id gi4mr83385473pbc.111.1351415519631; Sun, 28 Oct 2012 02:11:59 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPS id ni3sm4081738pbc.2.2012.10.28.02.11.56 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 28 Oct 2012 02:11:59 -0700 (PDT) From: Zheng Liu To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, zwu.kernel@gmail.com Cc: cmm@us.ibm.com, wuzhy@linux.vnet.ibm.com, Zheng Liu Subject: [PATCH] ext4: add hot tracking support Date: Sun, 28 Oct 2012 17:22:50 +0800 Message-Id: <1351416170-3735-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e In-Reply-To: <1351177747-19389-1-git-send-email-zwu.kernel@gmail.com> References: <1351177747-19389-1-git-send-email-zwu.kernel@gmail.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Zheng Liu Define a new mount option to add VFS hot tracking support in order to use it in ext4. CC: Zhi Yong Wu Signed-off-by: Zheng Liu --- Hi Zhiyong, Here is a try to add hot tracking support in ext4. I do some simple tests and it works well. Regards, Zheng fs/ext4/ext4.h | 3 +++ fs/ext4/super.c | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 3c20de1..f6cff1e 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1298,6 +1298,9 @@ struct ext4_sb_info { /* Precomputed FS UUID checksum for seeding other checksums */ __u32 s_csum_seed; + + /* Enable hot tracking or not */ + int s_hottrack_enable; }; static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb) diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 80928f7..1506dc3 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -43,6 +43,7 @@ #include #include +#include #include "ext4.h" #include "ext4_extents.h" @@ -864,6 +865,8 @@ static void ext4_put_super(struct super_block *sb) ext4_ext_release(sb); ext4_xattr_put_super(sb); + if (sbi->s_hottrack_enable) + hot_track_exit(sb); if (!(sb->s_flags & MS_RDONLY)) { EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); es->s_state = cpu_to_le16(sbi->s_mount_state); @@ -1222,7 +1225,7 @@ enum { Opt_inode_readahead_blks, Opt_journal_ioprio, Opt_dioread_nolock, Opt_dioread_lock, Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable, - Opt_max_dir_size_kb, + Opt_max_dir_size_kb, Opt_hottrack, }; static const match_table_t tokens = { @@ -1297,6 +1300,7 @@ static const match_table_t tokens = { {Opt_init_itable, "init_itable"}, {Opt_noinit_itable, "noinit_itable"}, {Opt_max_dir_size_kb, "max_dir_size_kb=%u"}, + {Opt_hottrack, "hot_track"}, {Opt_removed, "check=none"}, /* mount option from ext2/3 */ {Opt_removed, "nocheck"}, /* mount option from ext2/3 */ {Opt_removed, "reservation"}, /* mount option from ext2/3 */ @@ -1478,6 +1482,7 @@ static const struct mount_opts { {Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT}, {Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT}, {Opt_max_dir_size_kb, 0, MOPT_GTE0}, + {Opt_hottrack, 0, MOPT_GTE0}, {Opt_err, 0, 0} }; @@ -1595,6 +1600,14 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token, sbi->s_li_wait_mult = arg; } else if (token == Opt_max_dir_size_kb) { sbi->s_max_dir_size_kb = arg; + } else if (token == Opt_hottrack) { + if (hot_track_init(sb)) { + ext4_msg(sb, KERN_ERR, + "EXT4-fs: hot tracking initialization" + " failed"); + return -1; + } + sbi->s_hottrack_enable = 1; } else if (token == Opt_stripe) { sbi->s_stripe = arg; } else if (m->flags & MOPT_DATAJ) {