From: Al Viro <viro@zeniv.linux.org.uk>
To: Jeff Layton <jlayton@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Ilya Dryomov <idryomov@gmail.com>,
ceph-devel@vger.kernel.org,
Linux List Kernel Mailing <linux-kernel@vger.kernel.org>
Subject: Re: [GIT PULL] Ceph fixes for 5.1-rc7
Date: Fri, 26 Apr 2019 17:50:55 +0100 [thread overview]
Message-ID: <20190426165055.GY2217@ZenIV.linux.org.uk> (raw)
In-Reply-To: <86674e79e9f24e81feda75bc3c0dd4215604ffa5.camel@kernel.org>
On Fri, Apr 26, 2019 at 12:25:03PM -0400, Jeff Layton wrote:
> It turns out though that using name_snapshot from ceph is a bit more
> tricky. In some cases, we have to call ceph_mdsc_build_path to build up
> a full path string. We can't easily populate a name_snapshot from there
> because struct external_name is only defined in fs/dcache.c.
Explain, please. For ceph_mdsc_build_path() you don't need name
snapshots at all and existing code is, AFAICS, just fine, except
for pointless pr_err() there.
I _probably_ would take allocation out of the loop (e.g. make it
__getname(), called unconditionally) and turned it into the
d_path.c-style read_seqbegin_or_lock()/need_seqretry()/done_seqretry()
loop, so that the first pass would go under rcu_read_lock(), while
the second (if needed) would just hold rename_lock exclusive (without
bumping the refcount). But that's a matter of (theoretical) livelock
avoidance, not the locking correctness for ->d_name accesses.
Oh, and
*base = ceph_ino(d_inode(temp));
*plen = len;
probably belongs in critical section - _that_ might be a correctness
issue, since temp is not held by anything once you are out of there.
> I could add some routines to do this, but it feels a lot like I'm
> abusing internal dcache interfaces. I'll keep thinking about it though.
>
> While we're on the subject though:
>
> struct external_name {
> union {
> atomic_t count;
> struct rcu_head head;
> } u;
> unsigned char name[];
> };
>
> Is it really ok to union the count and rcu_head there?
>
> I haven't trawled through all of the code yet, but what prevents someone
> from trying to access the count inside an RCU critical section, after
> call_rcu has been called on it?
The fact that no lockless accesses to ->count are ever done?
next prev parent reply other threads:[~2019-04-26 16:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-25 17:47 [GIT PULL] Ceph fixes for 5.1-rc7 Ilya Dryomov
2019-04-25 18:02 ` Linus Torvalds
2019-04-25 18:21 ` Al Viro
2019-04-25 18:24 ` Linus Torvalds
2019-04-25 18:31 ` Al Viro
2019-04-25 18:36 ` Jeff Layton
2019-04-25 18:23 ` Jeff Layton
2019-04-25 20:09 ` Al Viro
2019-04-26 16:25 ` Jeff Layton
2019-04-26 16:36 ` Linus Torvalds
2019-04-26 16:43 ` Linus Torvalds
2019-04-26 17:01 ` Al Viro
2019-04-26 17:08 ` Linus Torvalds
2019-04-26 17:11 ` Al Viro
2019-04-26 20:49 ` Jeff Layton
2019-04-26 21:28 ` Al Viro
2019-04-26 16:50 ` Al Viro [this message]
2019-04-26 17:30 ` Jeff Layton
2019-04-28 4:38 ` Al Viro
2019-04-28 13:27 ` Jeff Layton
2019-04-28 14:48 ` Al Viro
2019-04-28 15:47 ` Jeff Layton
2019-04-28 15:52 ` Al Viro
2019-04-28 16:18 ` Jeff Layton
2019-04-28 16:40 ` Al Viro
2019-04-25 18:35 ` pr-tracker-bot
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=20190426165055.GY2217@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=ceph-devel@vger.kernel.org \
--cc=idryomov@gmail.com \
--cc=jlayton@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.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.