From patchwork Tue May 22 06:59:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artem Blagodarenko X-Patchwork-Id: 918034 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LVbgDBrq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40qmkT147Bz9s4q for ; Tue, 22 May 2018 17:00:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751039AbeEVHAc (ORCPT ); Tue, 22 May 2018 03:00:32 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:33852 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750707AbeEVHAb (ORCPT ); Tue, 22 May 2018 03:00:31 -0400 Received: by mail-lf0-f68.google.com with SMTP id x145-v6so15497754lff.1 for ; Tue, 22 May 2018 00:00:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=m7nh0w3uquNngloOHj5MZYzTRRydWH63aneRYpgHXiw=; b=LVbgDBrqgHEN0P3MYngco9vLV67hDBdpGMQOwS7lNCSL5jeqrRKo6CnbPyP38lZaxH NYoHF0VFM37luuZ1XikKtHukE4qkPozX4opKRhfwBnmiTr3sYVDB5bYD25+Kxdycuws8 kMMsaXphiXtq+rnkP40g14QrdBovwECziRcxWCqksXcIuZVy9y0j9iXu79Wxz9S2tHLr X+17KC2izfbUtQTbhgGJ2cBI98qGuY0GS2hsP+dYqmfxqme5TK81pL97rBlBpEfaLIJY DlME7iCwaWX/T0Zb7xkY2+o6nVvd0dqbnqi7aRCvjLkUrrfLvLGhZu+bcV4ZEfN93R31 15iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=m7nh0w3uquNngloOHj5MZYzTRRydWH63aneRYpgHXiw=; b=N3wEjoqu+bFDFvtGqhHc7pPg2UZhYwltkIZvpAKfOsxgo+W0ccTFizS0/vNXrrX1PI RVYdyMRcWKC99ivRM3R28k0NjVtLE+vZxeZXqnldwYFosavsmNHN7c9eMV613IcPfBM9 evdFpBx5zfR6JPfXaXShtu2wOlE3/hVCRT+aGFitlENC1qZeoUrbJxOqbz7AMSqwlZ2t mKj+mqSCMXHnwhdvxAwuy908Fx4qC+Dc1p2MV9kLpqnqw3N4UNpHvgXUyUYM7Ae0Jx1t Rq10dF21Wa0ulAof52RpFK9i4ihk3RNek25S1y0kOHBdhVtUmP2GjBIWG47W5RjSjuYc hgTg== X-Gm-Message-State: ALKqPwejLSpMoFEtQeZW7U88J9l52DXIwRxJoUR+YamTzkEwOx6idtCs YjYNCrThcEnacI75Hvw5ROJ5UcWNL5E= X-Google-Smtp-Source: AB8JxZpIqiSAhX2WT/VnlwoxKzpCnINCzV/23bdgRCozkIzQ0ljXPDSRBz4gCaGz32VfGWWB3hUFwg== X-Received: by 2002:a19:1813:: with SMTP id o19-v6mr3724466lfi.14.1526972430155; Tue, 22 May 2018 00:00:30 -0700 (PDT) Received: from localhost.localdomain ([95.153.133.225]) by smtp.gmail.com with ESMTPSA id d5-v6sm3837644lfg.65.2018.05.22.00.00.28 (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 22 May 2018 00:00:29 -0700 (PDT) From: Artem Blagodarenko To: linux-ext4@vger.kernel.org Cc: adilger.kernel@dilger.ca, alexey.lyashkov@gmail.com, Andrew Perepechko , Vitaly Fertman , Vitaly Fertman Subject: [PATCH] mmp race Date: Tue, 22 May 2018 09:59:07 +0300 Message-Id: <20180522065907.587-1-artem.blagodarenko@gmail.com> X-Mailer: git-send-email 2.14.3 (Apple Git-98) Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Vitaly Fertman make sleep between reads twice in ext4_multi_mount_protect twice longer than between write and read, make the later one equal to the system check_interval Xyratex-Bug-Id: MRP-390 Reviewed-by: Andrew Perepechko Signed-off-by: Andreas Dilger --- lib/ext2fs/mmp.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/ext2fs/mmp.c b/lib/ext2fs/mmp.c index 9a771de7..cb968adf 100644 --- a/lib/ext2fs/mmp.c +++ b/lib/ext2fs/mmp.c @@ -296,6 +296,13 @@ errcode_t ext2fs_mmp_start(ext2_filsys fs) if (mmp_check_interval < EXT4_MMP_MIN_CHECK_INTERVAL) mmp_check_interval = EXT4_MMP_MIN_CHECK_INTERVAL; + /* + * If check_interval in MMP block is larger, use that instead of + * check_interval from the superblock. + */ + if (mmp_s->mmp_check_interval > mmp_check_interval) + mmp_check_interval = mmp_s->mmp_check_interval; + seq = mmp_s->mmp_seq; if (seq == EXT4_MMP_SEQ_CLEAN) goto clean_seq; @@ -309,13 +316,6 @@ errcode_t ext2fs_mmp_start(ext2_filsys fs) goto mmp_error; } - /* - * If check_interval in MMP block is larger, use that instead of - * check_interval from the superblock. - */ - if (mmp_s->mmp_check_interval > mmp_check_interval) - mmp_check_interval = mmp_s->mmp_check_interval; - sleep(2 * mmp_check_interval + 1); retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf); @@ -344,7 +344,10 @@ clean_seq: if (retval) goto mmp_error; - sleep(2 * mmp_check_interval + 1); + /* This sleep between write & read must be shorter than the previous + * sleep between 2 reads, so that the check above of a racing thread + * would never succeed between this write & read. */ + sleep(mmp_check_interval + 1); retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf); if (retval)