Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp7980146ybn; Tue, 1 Oct 2019 00:59:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqxfHFojvuTsXOCMKES8mZo0Y08xAnVYzhoheBqVAPqJS4rLZqV7SF9odIgqV6sduvptGb4T X-Received: by 2002:a17:907:40bc:: with SMTP id nu20mr22758652ejb.309.1569916758262; Tue, 01 Oct 2019 00:59:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569916758; cv=none; d=google.com; s=arc-20160816; b=CzFJLbOHthAQwEddYjIDope5dEZR2wN3TTkn8kURalR/BEKWCFIot1kT0da485+yGG Yl61eXops58QvsAmkUnIEMRvsyChfsioZfRFwDoDswwuxN/huzpPXRIu/XJYz+vtLHzI svxs8fuTPF2SHwgc/lgFdaFYSjeVfAzBYd2QK6KrLk/+LsKB8ABWbWwGB8ds19EbuNyY 2S0AIlWI98XOZemq+QJy7aj1BuX35qHbOfjOfa5kh/GlvDm+C8LPawzXrVXLLBl0cQCk /hjY++E0/kii0cR4+WhLPUonTW9k8NcgG+Paxkq09tMUbbJniJde7jLI8rZKFI1+usmN SJ/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=FGaS4O4dBHJPQPxOu/dbQCVxys+QtMc0K6LLhNgt5gI=; b=HHF62LU9dHTuiZVYLlZYIV0Jaobjj+00742zmmaW26nHDk8nbgWbacJU5wT2WhHSm7 2MtTn3KSs57y2SfPxRjQQ9xlQr1m5Zfn14xuJI/XG/uiwT0NwXVM1qZSP07nQlIhZ+2J l/eE2JK6gj5wbqXYN1qC3Kipg1WraiHWAf3v3FhWn8fUE3Uf065xtw4sc/A8W0VyOL9H xtZcQjdeTmS+KgNNtgaiHJTA9KgZc6D4M6Vm/xgcAu0YdssTAiEGIlat06fpz9WTgtBi LNUtDRMD2rCq7vpLTlFiLmeXBaKFespRnMvKAPDM0aYin4s0ghP0QsMBpsS1NpjiM5sJ G3xg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=QYaanONG; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l18si8542828edb.155.2019.10.01.00.58.53; Tue, 01 Oct 2019 00:59:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=QYaanONG; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727361AbfJAHxJ (ORCPT + 99 others); Tue, 1 Oct 2019 03:53:09 -0400 Received: from mail-ot1-f68.google.com ([209.85.210.68]:40681 "EHLO mail-ot1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726388AbfJAHxJ (ORCPT ); Tue, 1 Oct 2019 03:53:09 -0400 Received: by mail-ot1-f68.google.com with SMTP id y39so10727909ota.7 for ; Tue, 01 Oct 2019 00:53:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=FGaS4O4dBHJPQPxOu/dbQCVxys+QtMc0K6LLhNgt5gI=; b=QYaanONGCiiXqjKqi+bWQqgGy832pprNQGqoeq3+ezQqNQaon9b5mBUMPQJ7jHNXlx LURAu8qOxxhhcX5USilTHiLz7x4cZr614hEaIxGqORyDN+qoUedlZ0ufHw5J08C++eGQ RezWee6NUCc6jRzg7SMJHOm6HfzJX6+EW78OTcnj0GlfNyIGu4rmRRo3c914ekNYfP24 oXwFz30/m0Q3ySMAErqUI+tcloGTj9YXHEGa164Z/CanWKqfF8vikNlouOdDpj5dbUIL kKYlNxm91/SKa9VsXVOPTTTrgnWqYb21XriBDvsHiGj/ZRAtPFE6fnCysEFwbVmm/sLI P6Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=FGaS4O4dBHJPQPxOu/dbQCVxys+QtMc0K6LLhNgt5gI=; b=f8WNAwFdbJEpc/IQdi6Z0A6wga8nIxFZFecntnilX60tbDzK9PvmvkXFspLXvT/yHp +zmmvH8MFNYcTu/je0wLaie/i8oA5pFD1QFbtzwIqASgJ855zZXVhNlKyXuFpu2H44St bp+bqg8C5asyK0a1Bb04XNGGwrLQgbhLw/URU8Yb80J/yNkJvrf9u1qg5n9fdkq4FPtO mfYTGHmN7Grt5TnqbPxQDsnQs9z19C6I5LVq55WIsIbtklTblQLD3jk2Gp3HbiSVyYIx 9u+USze1AhGl1AF8n2+NK8TXePsxKiOhkQhIrGXfrSCvqWM2DPPpKyf8XAlywD0RwIl8 3gMw== X-Gm-Message-State: APjAAAVztc+W9Wdr6swcgvtv9HJGp5gxJaOHNqjD1l1PHYJ46a8ZQ2Mx UPKB2H6Mg+C3Kk5tz6Y7U+zG1fPiMg1PV4SGfAY= X-Received: by 2002:a9d:6b98:: with SMTP id b24mr2447724otq.227.1569916387866; Tue, 01 Oct 2019 00:53:07 -0700 (PDT) MIME-Version: 1.0 References: <20190809034552.148629-1-harshadshirwadkar@gmail.com> <20190809034552.148629-4-harshadshirwadkar@gmail.com> In-Reply-To: From: harshad shirwadkar Date: Tue, 1 Oct 2019 00:52:57 -0700 Message-ID: Subject: Re: [PATCH v2 03/12] jbd2: fast commit setup and enable To: Andreas Dilger Cc: Ext4 Developers List Content-Type: text/plain; charset="UTF-8" Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Oops, I missed this, I'll handle this in V4. Thanks! On Fri, Aug 9, 2019 at 1:02 PM Andreas Dilger wrote: > > On Aug 8, 2019, at 9:45 PM, Harshad Shirwadkar wrote: > > > > This patch allows file systems to turn fast commits on and thereby > > restrict the normal journalling space to total journal blocks minus > > JBD2_FAST_COMMIT_BLOCKS. Fast commits are not actually performed, just > > the interface to turn fast commits on is opened. > > > > Signed-off-by: Harshad Shirwadkar > > > > --- > > > > Changelog: > > > > V2: No changes since V1 > > --- > > fs/ext4/super.c | 3 ++- > > fs/jbd2/journal.c | 39 ++++++++++++++++++++++++++++++++------- > > fs/ocfs2/journal.c | 4 ++-- > > include/linux/jbd2.h | 2 +- > > 4 files changed, 37 insertions(+), 11 deletions(-) > > > > diff --git a/fs/ext4/super.c b/fs/ext4/super.c > > index e376ac040cce..81c3ec165822 100644 > > --- a/fs/ext4/super.c > > +++ b/fs/ext4/super.c > > @@ -4933,7 +4933,8 @@ static int ext4_load_journal(struct super_block *sb, > > if (save) > > memcpy(save, ((char *) es) + > > EXT4_S_ERR_START, EXT4_S_ERR_LEN); > > - err = jbd2_journal_load(journal); > > + err = jbd2_journal_load(journal, > > + test_opt2(sb, JOURNAL_FAST_COMMIT)); > > if (save) > > memcpy(((char *) es) + EXT4_S_ERR_START, > > save, EXT4_S_ERR_LEN); > > diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c > > index 953990eb70a9..59ad709154a3 100644 > > --- a/fs/jbd2/journal.c > > +++ b/fs/jbd2/journal.c > > @@ -1159,12 +1159,15 @@ static journal_t *journal_init_common(struct block_device *bdev, > > journal->j_blk_offset = start; > > journal->j_maxlen = len; > > n = journal->j_blocksize / sizeof(journal_block_tag_t); > > - journal->j_wbufsize = n; > > + journal->j_wbufsize = n - JBD2_FAST_COMMIT_BLOCKS; > > The reservation of the JBD2_FAST_COMMIT_BLOCKS should only be done in > the case of the FAST_COMMIT feature being enabled. Otherwise it can > hurt performance for filesystems where this feature is not enabled. > > Cheers, Andreas > > > journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *), > > GFP_KERNEL); > > if (!journal->j_wbuf) > > goto err_cleanup; > > > > + journal->j_fc_wbuf = &journal->j_wbuf[journal->j_wbufsize]; > > + journal->j_fc_wbufsize = JBD2_FAST_COMMIT_BLOCKS; > > + > > bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize); > > if (!bh) { > > pr_err("%s: Cannot get buffer for journal superblock\n", > > @@ -1297,11 +1300,19 @@ static int journal_reset(journal_t *journal) > > } > > > > journal->j_first = first; > > - journal->j_last = last; > > > > - journal->j_head = first; > > - journal->j_tail = first; > > - journal->j_free = last - first; > > + if (jbd2_has_feature_fast_commit(journal)) { > > + journal->j_last_fc = last; > > + journal->j_last = last - JBD2_FAST_COMMIT_BLOCKS; > > + journal->j_first_fc = journal->j_last + 1; > > + journal->j_fc_off = 0; > > + } else { > > + journal->j_last = last; > > + } > > + > > + journal->j_head = journal->j_first; > > + journal->j_tail = journal->j_first; > > + journal->j_free = journal->j_last - journal->j_first; > > > > journal->j_tail_sequence = journal->j_transaction_sequence; > > journal->j_commit_sequence = journal->j_transaction_sequence - 1; > > @@ -1626,9 +1637,17 @@ static int load_superblock(journal_t *journal) > > journal->j_tail_sequence = be32_to_cpu(sb->s_sequence); > > journal->j_tail = be32_to_cpu(sb->s_start); > > journal->j_first = be32_to_cpu(sb->s_first); > > - journal->j_last = be32_to_cpu(sb->s_maxlen); > > journal->j_errno = be32_to_cpu(sb->s_errno); > > > > + if (jbd2_has_feature_fast_commit(journal)) { > > + journal->j_last_fc = be32_to_cpu(sb->s_maxlen); > > + journal->j_last = journal->j_last_fc - JBD2_FAST_COMMIT_BLOCKS; > > + journal->j_first_fc = journal->j_last + 1; > > + journal->j_fc_off = 0; > > + } else { > > + journal->j_last = be32_to_cpu(sb->s_maxlen); > > + } > > + > > return 0; > > } > > > > @@ -1641,7 +1660,7 @@ static int load_superblock(journal_t *journal) > > * a journal, read the journal from disk to initialise the in-memory > > * structures. > > */ > > -int jbd2_journal_load(journal_t *journal) > > +int jbd2_journal_load(journal_t *journal, bool enable_fc) > > { > > int err; > > journal_superblock_t *sb; > > @@ -1684,6 +1703,12 @@ int jbd2_journal_load(journal_t *journal) > > return -EFSCORRUPTED; > > } > > > > + if (enable_fc) > > + jbd2_journal_set_features(journal, 0, 0, > > + JBD2_FEATURE_INCOMPAT_FAST_COMMIT); > > + else > > + jbd2_journal_clear_features(journal, 0, 0, > > + JBD2_FEATURE_INCOMPAT_FAST_COMMIT); > > /* OK, we've finished with the dynamic journal bits: > > * reinitialise the dynamic contents of the superblock in memory > > * and reset them on disk. */ > > diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c > > index 930e3d388579..3b4d91b16e8e 100644 > > --- a/fs/ocfs2/journal.c > > +++ b/fs/ocfs2/journal.c > > @@ -1057,7 +1057,7 @@ int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed) > > > > osb = journal->j_osb; > > > > - status = jbd2_journal_load(journal->j_journal); > > + status = jbd2_journal_load(journal->j_journal, false); > > if (status < 0) { > > mlog(ML_ERROR, "Failed to load journal!\n"); > > goto done; > > @@ -1642,7 +1642,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, > > goto done; > > } > > > > - status = jbd2_journal_load(journal); > > + status = jbd2_journal_load(journal, false); > > if (status < 0) { > > mlog_errno(status); > > if (!igrab(inode)) > > diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h > > index 9a750b732241..153840b422cc 100644 > > --- a/include/linux/jbd2.h > > +++ b/include/linux/jbd2.h > > @@ -1476,7 +1476,7 @@ extern int jbd2_journal_set_features > > (journal_t *, unsigned long, unsigned long, unsigned long); > > extern void jbd2_journal_clear_features > > (journal_t *, unsigned long, unsigned long, unsigned long); > > -extern int jbd2_journal_load (journal_t *journal); > > +extern int jbd2_journal_load(journal_t *journal, bool enable_fc); > > extern int jbd2_journal_destroy (journal_t *); > > extern int jbd2_journal_recover (journal_t *journal); > > extern int jbd2_journal_wipe (journal_t *, int); > > -- > > 2.23.0.rc1.153.gdeed80330f-goog > > > > > Cheers, Andreas > > > > >