All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@zeniv.linux.org.uk>
To: Gao Xiang <hsiangkao@linux.alibaba.com>
Cc: linux-fsdevel@vger.kernel.org, linux-erofs@lists.ozlabs.org,
	LKML <linux-kernel@vger.kernel.org>,
	rust-for-linux@vger.kernel.org
Subject: Re: [RFC PATCH 19/24] erofs: introduce namei alternative to C
Date: Tue, 17 Sep 2024 08:44:29 +0100	[thread overview]
Message-ID: <20240917074429.GE3107530@ZenIV> (raw)
In-Reply-To: <20240917073149.GD3107530@ZenIV>

On Tue, Sep 17, 2024 at 08:31:49AM +0100, Al Viro wrote:

> > After d_splice_alias() and d_add(), rename() could change d_name.  So
> > either we take d_lock or with rcu_read_lock() to take a snapshot of
> > d_name in the RCU walk path.  That is my overall understanding.
> 
> No, it's more complicated than that, sadly.  ->d_name and ->d_parent are
> the trickiest parts of dentry field stability.
> 
> > But for EROFS, since we don't have rename, so it doesn't matter.
> 
> See above.  IF we could guarantee that all filesystem images are valid
> and will remain so, life would be much simpler.

In any case, currently it is safe - d_splice_alias() is the last thing
done by erofs_lookup().  Just don't assume that names can't change in
there - and the fewer places in filesystem touch ->d_name, the better.

In practice, for ->lookup() you are safe until after d_splice_alias()
and for directory-modifying operations you are safe unless you start
playing insane games with unlocking and relocking the parent directories
(apparmorfs does; the locking is really obnoxious there).  That covers
the majority of ->d_name and ->d_parent accesses in filesystem code.

->d_hash() and ->d_compare() are separate story; I've posted a text on
that last year (or this winter - not sure, will check once I get some
sleep).

d_path() et.al. are taking care to do the right thing; those (and %pd
format) can be used safely.

Anyway, I'm half-asleep at the moment and I'd rather leave writing these
rules up until tomorrow.  Sorry...

WARNING: multiple messages have this Message-ID (diff)
From: Al Viro <viro@zeniv.linux.org.uk>
To: Gao Xiang <hsiangkao@linux.alibaba.com>
Cc: Yiyang Wu <toolmanp@tlmp.cc>,
	linux-erofs@lists.ozlabs.org, rust-for-linux@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [RFC PATCH 19/24] erofs: introduce namei alternative to C
Date: Tue, 17 Sep 2024 08:44:29 +0100	[thread overview]
Message-ID: <20240917074429.GE3107530@ZenIV> (raw)
In-Reply-To: <20240917073149.GD3107530@ZenIV>

On Tue, Sep 17, 2024 at 08:31:49AM +0100, Al Viro wrote:

> > After d_splice_alias() and d_add(), rename() could change d_name.  So
> > either we take d_lock or with rcu_read_lock() to take a snapshot of
> > d_name in the RCU walk path.  That is my overall understanding.
> 
> No, it's more complicated than that, sadly.  ->d_name and ->d_parent are
> the trickiest parts of dentry field stability.
> 
> > But for EROFS, since we don't have rename, so it doesn't matter.
> 
> See above.  IF we could guarantee that all filesystem images are valid
> and will remain so, life would be much simpler.

In any case, currently it is safe - d_splice_alias() is the last thing
done by erofs_lookup().  Just don't assume that names can't change in
there - and the fewer places in filesystem touch ->d_name, the better.

In practice, for ->lookup() you are safe until after d_splice_alias()
and for directory-modifying operations you are safe unless you start
playing insane games with unlocking and relocking the parent directories
(apparmorfs does; the locking is really obnoxious there).  That covers
the majority of ->d_name and ->d_parent accesses in filesystem code.

->d_hash() and ->d_compare() are separate story; I've posted a text on
that last year (or this winter - not sure, will check once I get some
sleep).

d_path() et.al. are taking care to do the right thing; those (and %pd
format) can be used safely.

Anyway, I'm half-asleep at the moment and I'd rather leave writing these
rules up until tomorrow.  Sorry...

  reply	other threads:[~2024-09-17  7:44 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-16 13:56 [RFC PATCH 00/24] erofs: introduce Rust implementation Yiyang Wu via Linux-erofs
2024-09-16 13:56 ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 01/24] erofs: lift up erofs_fill_inode to global Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 02/24] erofs: add superblock data structure in Rust Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 17:55   ` Greg KH
2024-09-16 17:55     ` Greg KH
2024-09-17  0:18     ` Gao Xiang
2024-09-17  5:34       ` Greg KH
2024-09-17  5:34         ` Greg KH
2024-09-17  5:45         ` Gao Xiang
2024-09-17  5:45           ` Gao Xiang
2024-09-17  5:27     ` Yiyang Wu via Linux-erofs
2024-09-17  5:27       ` Yiyang Wu
2024-09-17  5:39     ` Yiyang Wu via Linux-erofs
2024-09-17  5:39       ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 03/24] erofs: add Errno " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 17:51   ` Greg KH
2024-09-16 17:51     ` Greg KH
2024-09-16 23:45     ` Gao Xiang
2024-09-16 23:45       ` Gao Xiang
2024-09-20  2:49     ` [PATCH RESEND 0/1] rust: introduce declare_err! autogeneration Yiyang Wu via Linux-erofs
2024-09-20  2:49       ` Yiyang Wu
2024-09-20  2:49       ` [PATCH RESEND 1/1] rust: error: auto-generate error declarations Yiyang Wu via Linux-erofs
2024-09-20  2:49         ` Yiyang Wu
2024-09-20  2:57     ` [RFC PATCH 03/24] erofs: add Errno in Rust Yiyang Wu via Linux-erofs
2024-09-20  2:57       ` Yiyang Wu
2024-09-16 20:01   ` Gary Guo
2024-09-16 20:01     ` Gary Guo
2024-09-16 23:58     ` Gao Xiang
2024-09-16 23:58       ` Gao Xiang
2024-09-19 13:45       ` Benno Lossin via Linux-erofs
2024-09-19 13:45         ` Benno Lossin
2024-09-19 15:13         ` Gao Xiang
2024-09-19 15:13           ` Gao Xiang
2024-09-19 19:36           ` Benno Lossin via Linux-erofs
2024-09-19 19:36             ` Benno Lossin
2024-09-20  0:49             ` Gao Xiang
2024-09-20  0:49               ` Gao Xiang
2024-09-21  8:37               ` Greg Kroah-Hartman
2024-09-21  8:37                 ` Greg Kroah-Hartman
2024-09-21  9:29                 ` Gao Xiang
2024-09-21  9:29                   ` Gao Xiang
2024-09-25 15:48             ` Ariel Miculas via Linux-erofs
2024-09-25 15:48               ` Ariel Miculas
2024-09-25 16:35               ` Gao Xiang
2024-09-25 16:35                 ` Gao Xiang
2024-09-25 21:45                 ` Ariel Miculas via Linux-erofs
2024-09-25 21:45                   ` Ariel Miculas
2024-09-26  0:40                   ` Gao Xiang
2024-09-26  0:40                     ` Gao Xiang
2024-09-26  1:04                     ` Gao Xiang
2024-09-26  1:04                       ` Gao Xiang
2024-09-26  8:10                       ` Ariel Miculas via Linux-erofs
2024-09-26  8:10                         ` Ariel Miculas
2024-09-26  8:25                         ` Gao Xiang
2024-09-26  8:25                           ` Gao Xiang
2024-09-26  9:51                           ` Ariel Miculas via Linux-erofs
2024-09-26  9:51                             ` Ariel Miculas
2024-09-26 10:46                             ` Gao Xiang
2024-09-26 10:46                               ` Gao Xiang
2024-09-26 11:01                               ` Ariel Miculas via Linux-erofs
2024-09-26 11:01                                 ` Ariel Miculas
2024-09-26 11:05                                 ` Gao Xiang
2024-09-26 11:05                                   ` Gao Xiang
2024-09-26 11:23                                 ` Gao Xiang
2024-09-26 11:23                                   ` Gao Xiang
2024-09-26 12:50                                   ` Ariel Miculas via Linux-erofs
2024-09-26 12:50                                     ` Ariel Miculas
2024-09-27  2:18                                     ` Gao Xiang
2024-09-27  2:18                                       ` Gao Xiang
2024-09-26  8:48                         ` Gao Xiang
2024-09-26  8:48                           ` Gao Xiang
2024-09-16 13:56 ` [RFC PATCH 04/24] erofs: add xattrs data structure " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 05/24] erofs: add inode " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-18 13:04   ` [External Mail][RFC " Huang Jianan via Linux-erofs
2024-09-18 13:04     ` Huang Jianan
2024-09-16 13:56 ` [RFC PATCH 06/24] erofs: add alloc_helper " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 07/24] erofs: add data abstraction " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 08/24] erofs: add device data structure " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-21  9:18   ` Jianan Huang
2024-09-16 13:56 ` [RFC PATCH 09/24] erofs: add continuous iterators " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 10/24] erofs: add device_infos implementation " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-21  9:44   ` Jianan Huang
2024-09-21  9:44     ` Jianan Huang
2024-09-16 13:56 ` [RFC PATCH 11/24] erofs: add map data structure " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 12/24] erofs: add directory entry " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 13/24] erofs: add runtime filesystem and inode " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 14/24] erofs: add block mapping capability " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 15/24] erofs: add iter methods in filesystem " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 16/24] erofs: implement dir and inode operations " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 17/24] erofs: introduce Rust SBI to C Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 18/24] erofs: introduce iget alternative " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 19/24] erofs: introduce namei " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 17:08   ` Al Viro
2024-09-16 17:08     ` Al Viro
2024-09-17  6:48     ` Yiyang Wu via Linux-erofs
2024-09-17  6:48       ` Yiyang Wu
2024-09-17  7:14       ` Gao Xiang
2024-09-17  7:14         ` Gao Xiang
2024-09-17  7:31         ` Al Viro
2024-09-17  7:31           ` Al Viro
2024-09-17  7:44           ` Al Viro [this message]
2024-09-17  7:44             ` Al Viro
2024-09-17  8:08             ` Gao Xiang
2024-09-17  8:08               ` Gao Xiang
2024-09-17 22:22             ` Al Viro
2024-09-17 22:22               ` Al Viro
2024-09-17  8:06           ` Gao Xiang
2024-09-17  8:06             ` Gao Xiang
2024-09-16 13:56 ` [RFC PATCH 20/24] erofs: introduce readdir " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 21/24] erofs: introduce erofs_map_blocks " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 22/24] erofs: add skippable iters in Rust Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 23/24] erofs: implement xattrs operations " Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu
2024-09-16 13:56 ` [RFC PATCH 24/24] erofs: introduce xattrs replacement to C Yiyang Wu via Linux-erofs
2024-09-16 13:56   ` Yiyang Wu

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=20240917074429.GE3107530@ZenIV \
    --to=viro@zeniv.linux.org.uk \
    --cc=hsiangkao@linux.alibaba.com \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    /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.