Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1257707ybl; Tue, 3 Dec 2019 04:24:18 -0800 (PST) X-Google-Smtp-Source: APXvYqyLFS9i+EWVVevL9BF0jeKKt9onDQoAmnnMF6dkfRKAUXCfcbiA2SA2AFr5yzDfXHCXivuI X-Received: by 2002:a9d:7082:: with SMTP id l2mr2691908otj.213.1575375858599; Tue, 03 Dec 2019 04:24:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575375858; cv=none; d=google.com; s=arc-20160816; b=w3DPjkoGELoJ2LUTIeAD8ZlWq6VZetne1hsvfIE5ZjLMxSX/Z2WeafEJLtWpsmaHPO 6JV8fm+nbjQD0K+FvTIpS8wB4hhog6uet+xttMMD8Q9k1PQDpZS5MZ7pUUD0N/meMNFZ Q/Wzwn08iy2lGqCr80qoIWFSskJmUSIqho6OZ0XCbZ1ojECep8E3j8ZG8oGkKxK7NOGA GjyKVBINZNyFiiCQnM1lDb3TUiAQihd/N9ZMbtRylH53JtOWwUUkYZ4WCQvkSUBxlJVf JdqhWwL/bdXPVXXbiNjd2ZQTDy9LUAvlwGmFKcBTG9om+rHiq8T+TvTnzkugdi7vcEb8 jtFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=FVqBj80epQaCiOgjQe1NlcOaeAtDIcGqCtEnzRSqN74=; b=Gw2VQn235m59bs9kpEFgSGqfvpxUPEGGLA6MRHbsFWIY2ZJjwCD2tUIBgssWrSLTBK AbX1lcbOAVXu43//ZLaBhtCsehapzwFbEDBJfgx0kdMAypSXzWotV9d7B6zlSbFMJmaa UvqnjPDFoTgdSkOQzGVwPR6y607A2z3JUqCZegzaFNqD3oLUjvw0vlnE0ddsFzHbApZq f7Vj+JnDORfmACtpIJaPY3wifL4MEH0xxW2LKNnONRAQ9hZvRxYRGVRk/MNrMjCPykjj ilgSd5zklJ5+tKaDbFHLVg84ompvHWpqWkL3vJe6PFmBS6eaLK2YdzZXwdQHbv6O54Wj 091A== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d25si1039722otc.157.2019.12.03.04.24.02; Tue, 03 Dec 2019 04:24:18 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726114AbfLCMXP (ORCPT + 99 others); Tue, 3 Dec 2019 07:23:15 -0500 Received: from mx2.suse.de ([195.135.220.15]:42804 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725907AbfLCMXP (ORCPT ); Tue, 3 Dec 2019 07:23:15 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 2E9FAAFCF; Tue, 3 Dec 2019 12:23:13 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id A29721E0B7B; Tue, 3 Dec 2019 13:23:12 +0100 (CET) Date: Tue, 3 Dec 2019 13:23:12 +0100 From: Jan Kara To: "zhangyi (F)" Cc: linux-ext4@vger.kernel.org, jack@suse.com, tytso@mit.edu, adilger.kernel@dilger.ca, liangyun2@huawei.com, luoshijie1@huawei.com Subject: Re: [PATCH v2 3/4] Partially revert "ext4: pass -ESHUTDOWN code to jbd2 layer" Message-ID: <20191203122312.GD8206@quack2.suse.cz> References: <20191203092756.26129-1-yi.zhang@huawei.com> <20191203092756.26129-4-yi.zhang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191203092756.26129-4-yi.zhang@huawei.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org On Tue 03-12-19 17:27:55, zhangyi (F) wrote: > This partially reverts commit fb7c02445c497943e7296cd3deee04422b63acb8. > > Commit fb7c02445c49 ("ext4: pass -ESHUTDOWN code to jbd2 layer") want to > allow jbd2 layer to distinguish shutdown journal abort from other error > cases, but this patch seems unnecessary because we distinguished those > cases well through a zero errno parameter when shutting down, thus the > jbd2 aborting peocess will not record the errno. So partially reverts > this commit and keep the proper locking. > > Signed-off-by: zhangyi (F) Ted has written this so he'll have the definitive answer but I think the idea of ESHUTDOWN is that if the filesystem was shutdown, we want ESHUTDOWN to be recorded in the journal sb and not some other error. That's why there's logic in __journal_abort_soft() making sure that ESHUTDOWN takes precedence over any other error. Because it can happen that after EXT4_FLAGS_SHUTDOWN flag is set, some other place records different error in journal superblock before we get to jbd2_journal_abort() and record ESHUTDOWN... Honza > --- > fs/ext4/ioctl.c | 4 ++-- > fs/jbd2/journal.c | 22 +++++++--------------- > 2 files changed, 9 insertions(+), 17 deletions(-) > > diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c > index 0b7f316fd30f..f99eeba5767d 100644 > --- a/fs/ext4/ioctl.c > +++ b/fs/ext4/ioctl.c > @@ -597,13 +597,13 @@ static int ext4_shutdown(struct super_block *sb, unsigned long arg) > set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags); > if (sbi->s_journal && !is_journal_aborted(sbi->s_journal)) { > (void) ext4_force_commit(sb); > - jbd2_journal_abort(sbi->s_journal, -ESHUTDOWN); > + jbd2_journal_abort(sbi->s_journal, 0); > } > break; > case EXT4_GOING_FLAGS_NOLOGFLUSH: > set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags); > if (sbi->s_journal && !is_journal_aborted(sbi->s_journal)) > - jbd2_journal_abort(sbi->s_journal, -ESHUTDOWN); > + jbd2_journal_abort(sbi->s_journal, 0); > break; > default: > return -EINVAL; > diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c > index a78b07841080..f3f9e0b994ef 100644 > --- a/fs/jbd2/journal.c > +++ b/fs/jbd2/journal.c > @@ -1475,14 +1475,11 @@ static void jbd2_mark_journal_empty(journal_t *journal, int write_op) > void jbd2_journal_update_sb_errno(journal_t *journal) > { > journal_superblock_t *sb = journal->j_superblock; > - int errcode; > > lock_buffer(journal->j_sb_buffer); > - errcode = journal->j_errno; > - if (errcode == -ESHUTDOWN) > - errcode = 0; > - jbd_debug(1, "JBD2: updating superblock error (errno %d)\n", errcode); > - sb->s_errno = cpu_to_be32(errcode); > + jbd_debug(1, "JBD2: updating superblock error (errno %d)\n", > + journal->j_errno); > + sb->s_errno = cpu_to_be32(journal->j_errno); > > jbd2_write_superblock(journal, REQ_SYNC | REQ_FUA); > } > @@ -2100,20 +2097,15 @@ void __jbd2_journal_abort_hard(journal_t *journal) > * but don't do any other IO. */ > static void __journal_abort_soft (journal_t *journal, int errno) > { > - int old_errno; > - > write_lock(&journal->j_state_lock); > - old_errno = journal->j_errno; > - if (!journal->j_errno || errno == -ESHUTDOWN) > - journal->j_errno = errno; > - > if (journal->j_flags & JBD2_ABORT) { > write_unlock(&journal->j_state_lock); > - if (!old_errno && old_errno != -ESHUTDOWN && > - errno == -ESHUTDOWN) > - jbd2_journal_update_sb_errno(journal); > return; > } > + > + if (!journal->j_errno) > + journal->j_errno = errno; > + > write_unlock(&journal->j_state_lock); > > __jbd2_journal_abort_hard(journal); > -- > 2.17.2 > -- Jan Kara SUSE Labs, CR