From: "Theodore Ts'o" <tytso@mit.edu>
To: "zhangyi (F)" <yi.zhang@huawei.com>
Cc: linux-ext4@vger.kernel.org, jack@suse.cz, yangerkun@huawei.com
Subject: Re: [PATCH v1 1/2] ext4: find old entry again if failed to rename whiteout
Date: Thu, 11 Mar 2021 10:43:15 -0500 [thread overview]
Message-ID: <YEo6k8kg3zF7avId@mit.edu> (raw)
In-Reply-To: <20210303131703.330415-1-yi.zhang@huawei.com>
On Wed, Mar 03, 2021 at 09:17:02PM +0800, zhangyi (F) wrote:
> If we failed to add new entry on rename whiteout, we cannot reset the
> old->de entry directly, because the old->de could have moved from under
> us during make indexed dir. So find the old entry again before reset is
> needed, otherwise it may corrupt the filesystem as below.
>
> /dev/sda: Entry '00000001' in ??? (12) has deleted/unused inode 15. CLEARED.
> /dev/sda: Unattached inode 75
> /dev/sda: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
>
> ....
>
> + /*
> + * old->de could have moved from under us during make indexed dir,
> + * so the old->de may no longer valid and need to find it again
> + * before reset old inode info.
> + */
> + old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
> + if (IS_ERR(old.bh))
> + retval = PTR_ERR(old.bh);
> + if (!old.bh)
> + retval = -ENOENT;
> + if (retval) {
> + ext4_std_error(old.dir->i_sb, retval);
So if the directory entry may have been deleted out from under us, an
ENOENT failure might happen under normal circumstances, shouldn't it?
In that case, ext4_std_error() will declare that the file system is
inconsistent, potentially resulting in the file system to be remounted
read-only, or causing the system to panic. So calling
ext4_std_error() needs to be done carefully.
Are we sure that calling ext4_std_error() is the right thing to do in
the case where ext4_find_entry() returns ENOENT?
- Ted
next prev parent reply other threads:[~2021-03-11 15:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-03 13:17 [PATCH v1 1/2] ext4: find old entry again if failed to rename whiteout zhangyi (F)
2021-03-03 13:17 ` [PATCH v1 2/2] ext4: Do not iput inode under running transaction in ext4_rename() zhangyi (F)
2021-03-21 4:09 ` Theodore Ts'o
2021-03-11 15:43 ` Theodore Ts'o [this message]
2021-03-12 2:01 ` [PATCH v1 1/2] ext4: find old entry again if failed to rename whiteout zhangyi (F)
2021-03-21 3:59 ` Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YEo6k8kg3zF7avId@mit.edu \
--to=tytso@mit.edu \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=yangerkun@huawei.com \
--cc=yi.zhang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.