From: Jeff Layton <jlayton@kernel.org>
To: Krzysztof Kozlowski <krzk@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org,
bfields@fieldses.org, neilb@suse.de, jack@suse.de,
linux-ext4@vger.kernel.org, tytso@mit.edu,
adilger.kernel@dilger.ca, linux-xfs@vger.kernel.org,
darrick.wong@oracle.com, david@fromorbit.com,
linux-btrfs@vger.kernel.org, clm@fb.com, jbacik@fb.com,
dsterba@suse.com, linux-integrity@vger.kernel.org,
zohar@linux.vnet.ibm.com, dmitry.kasatkin@gmail.com,
linux-afs@lists.infradead.org, dhowells@redhat.com,
jaltman@auristor.com, linux-samsung-soc@vger.kernel.org,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
"Bartłomiej Żołnierkiewicz" <b.zolnierkie@samsung.com>,
"Sylwester Nawrocki" <s.nawrocki@samsung.com>
Subject: Re: [PATCH v4 19/19] fs: handle inode->i_version more efficiently
Date: Mon, 08 Jan 2018 16:39:53 -0500 [thread overview]
Message-ID: <1515447593.3486.54.camel@kernel.org> (raw)
In-Reply-To: <20180108201713.rdfjn7j65cuqmwuo@kozik-lap>
On Mon, 2018-01-08 at 21:17 +0100, Krzysztof Kozlowski wrote:
> On Mon, Jan 08, 2018 at 02:15:29PM -0500, Jeff Layton wrote:
> > On Mon, 2018-01-08 at 19:33 +0100, Krzysztof Kozlowski wrote:
> > > On Mon, Jan 08, 2018 at 01:00:19PM -0500, Jeff Layton wrote:
> > > > On Mon, 2018-01-08 at 18:29 +0100, Krzysztof Kozlowski wrote:
> > >
> > > (...)
> > >
> > > > > > Ok, thanks. If you're seeing hangs then that might imply that we have
> > > > > > some sort of excessive looping going on in the cmpxchg loops.
> > > > > >
> > > > > > Could you apply the patch below and let me know if it causes either of
> > > > > > the warnings to pop? That might at least point us in the right
> > > > > > direction:
> > > > >
> > > > > No new warnings with attached patch (except existing already lockdep:
> > > > > "INFO: trying to register non-static key.").
> > > > >
> > > >
> > > > Yeah, I saw that in the original logs and it looks unrelated (and
> > > > harmless).
> > > >
> > > > > Systemd timeouts on mounting /home but after entering rescue shell there
> > > > > is no problem running mount /home:
> > > > > Give root password for maintenance
> > > > > (or press Control-D to continue):
> > > > > root@odroidxu3:~# mount /home
> > > > > [ 220.659331] EXT4-fs (mmcblk1p2): mounted filesystem with ordered data mode. Opts: (null)
> > > > >
> > > >
> > > > Ok, thanks for testing it. So I guess we can probably rule out excessive
> > > > looping in those functions as the issue.
> > > >
> > > > To make sure I understand the problem: When systemd tries to do the
> > > > initial mount of /home (which is an ext4 filesystem), it hangs. But once
> > > > it drops to the shell, it works, if you do the mount by hand.
> > > >
> > > > Is that correct?
> > >
> > > Yes, although it also timeouts on setting up /dev/ttySAC2 (serial
> > > console).
> > >
> > > > If so, then is it possible to trigger sysrq commands during the hanging
> > > > mount attempt? Maybe you could use e.g. sysrq-l, sysrq-w, etc. to
> > > > determine what it's blocking on?
> >
> > (trimming the output)
> >
> > Thanks. I don't really see anything obvious in that info,
> > unfortunately. What we really need to do is find the systemd task
> > performing the mount, and see what it's doing.
>
> It's systemd 236.0-2 coming from Arch Linux for ARM. All packages are
> updated.
>
> > We do have one questionable bug in the NFS changes though. Does this
> > patch help at all?
>
> Patches do not change anything (I tried "SQUASH: nfs: fix i_version
> increment when adding a request" and "SQUASH: ext4: use raw API for
> xattr inode refcounts").
>
> I tried again regular SDcard-root boot and it succeeded. Only nfsroot
> fails.
>
> Best regards,
> Krzysztof
>
Got it, that's helpful. Does this patch help (on top of the others) ?
------------------------8<--------------------------
SQUASH: nfs: compare raw iversion counter since that's what's
being stored
Signed-off-by: Jeff Layton <jlayton@redhat.com>
---
fs/nfs/inode.c | 6 +++---
include/linux/iversion.h | 13 +++++++++++++
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 0b85cca1184b..93552c482992 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -1289,7 +1289,7 @@ static unsigned long nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr
if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
&& (fattr->valid & NFS_ATTR_FATTR_CHANGE)
- && !inode_cmp_iversion(inode, fattr->pre_change_attr)) {
+ && !inode_cmp_iversion_raw(inode, fattr->pre_change_attr)) {
inode_set_iversion_raw(inode, fattr->change_attr);
if (S_ISDIR(inode->i_mode))
nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
@@ -1348,7 +1348,7 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat
if (!nfs_file_has_buffered_writers(nfsi)) {
/* Verify a few of the more important attributes */
- if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && inode_cmp_iversion(inode, fattr->change_attr))
+ if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && inode_cmp_iversion_raw(inode, fattr->change_attr))
invalid |= NFS_INO_INVALID_ATTR | NFS_INO_REVAL_PAGECACHE;
if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime))
@@ -1778,7 +1778,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
/* More cache consistency checks */
if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
- if (inode_cmp_iversion(inode, fattr->change_attr)) {
+ if (inode_cmp_iversion_raw(inode, fattr->change_attr)) {
dprintk("NFS: change_attr change on server for file %s/%ld\n",
inode->i_sb->s_id, inode->i_ino);
/* Could it be a race with writeback? */
diff --git a/include/linux/iversion.h b/include/linux/iversion.h
index 107fcb3ec809..8c97f67ffbbc 100644
--- a/include/linux/iversion.h
+++ b/include/linux/iversion.h
@@ -190,6 +190,19 @@ inode_query_iversion(struct inode *inode)
return inode_peek_iversion(inode);
}
+/**
+ * inode_cmp_iversion_raw - check whether the raw i_version counter has changed
+ * @inode: inode to check
+ * @old: old value to check against its i_version
+ *
+ * Compare the current raw i_version counter with a previous one. Returns 0 if
+ * they are the same or non-zero if they are different.
+ */
+static inline s64
+inode_cmp_iversion_raw(const struct inode *inode, u64 old)
+{
+ return (s64)inode_peek_iversion(inode) - (s64)old;
+}
/**
* inode_cmp_iversion - check whether the i_version counter has changed
* @inode: inode to check
--
2.14.3
next prev parent reply other threads:[~2018-01-08 21:39 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-22 12:05 [PATCH v4 00/19] fs: rework and optimize i_version handling in filesystems Jeff Layton
2017-12-22 12:05 ` [PATCH v4 01/19] fs: new API for handling inode->i_version Jeff Layton
2017-12-22 23:14 ` NeilBrown
2017-12-22 23:14 ` NeilBrown
2017-12-22 23:54 ` Jeff Layton
2018-01-02 17:01 ` Jan Kara
2017-12-25 14:50 ` Jeff Layton
2017-12-25 14:50 ` Jeff Layton
2017-12-22 12:05 ` [PATCH v4 02/19] fs: don't take the i_lock in inode_inc_iversion Jeff Layton
2017-12-22 12:05 ` [PATCH v4 03/19] fat: convert to new i_version API Jeff Layton
2017-12-22 12:05 ` [PATCH v4 04/19] affs: " Jeff Layton
2017-12-22 12:05 ` [PATCH v4 05/19] afs: " Jeff Layton
2018-01-02 17:20 ` David Howells
2018-01-02 18:57 ` Jeff Layton
2018-01-03 16:28 ` David Howells
2017-12-22 12:05 ` [PATCH v4 06/19] btrfs: " Jeff Layton
2018-01-08 17:59 ` David Sterba
2017-12-22 12:05 ` [PATCH v4 07/19] exofs: switch " Jeff Layton
2017-12-22 12:05 ` [PATCH v4 08/19] ext2: convert " Jeff Layton
2017-12-22 12:05 ` Jeff Layton
2017-12-22 12:05 ` [PATCH v4 09/19] ext4: " Jeff Layton
2017-12-22 12:05 ` [PATCH v4 10/19] nfs: " Jeff Layton
2017-12-22 12:05 ` [PATCH v4 11/19] nfsd: " Jeff Layton
2017-12-22 12:05 ` Jeff Layton
2017-12-22 12:05 ` [PATCH v4 12/19] ocfs2: " Jeff Layton
2018-01-04 13:34 ` Jeff Layton
2017-12-22 12:05 ` [PATCH v4 13/19] ufs: use " Jeff Layton
2017-12-22 12:05 ` [PATCH v4 14/19] xfs: convert to " Jeff Layton
2017-12-23 0:05 ` Darrick J. Wong
2017-12-22 12:05 ` [PATCH v4 15/19] IMA: switch IMA over " Jeff Layton
2017-12-22 12:05 ` [PATCH v4 16/19] fs: only set S_VERSION when updating times if necessary Jeff Layton
2018-01-02 16:50 ` Jan Kara
2018-01-02 19:03 ` Jeff Layton
2017-12-22 12:05 ` [PATCH v4 17/19] xfs: avoid setting XFS_ILOG_CORE if i_version doesn't need incrementing Jeff Layton
2017-12-23 0:07 ` Darrick J. Wong
2017-12-22 12:05 ` [PATCH v4 18/19] btrfs: only dirty the inode in btrfs_update_time if something was changed Jeff Layton
2018-01-08 17:59 ` David Sterba
2017-12-22 12:05 ` [PATCH v4 19/19] fs: handle inode->i_version more efficiently Jeff Layton
2018-01-02 17:00 ` Jan Kara
[not found] ` <20171222120556.7435-20-jlayton-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-07 12:44 ` Krzysztof Kozlowski
2018-01-07 12:44 ` Krzysztof Kozlowski
2018-01-07 12:44 ` Krzysztof Kozlowski
2018-01-08 12:56 ` Jeff Layton
2018-01-08 12:56 ` Jeff Layton
2018-01-08 13:21 ` Krzysztof Kozlowski
2018-01-08 13:21 ` Krzysztof Kozlowski
2018-01-08 13:29 ` Jeff Layton
2018-01-08 13:29 ` Jeff Layton
2018-01-08 17:29 ` Krzysztof Kozlowski
2018-01-08 17:29 ` Krzysztof Kozlowski
2018-01-08 18:00 ` Jeff Layton
2018-01-08 18:00 ` Jeff Layton
2018-01-08 18:33 ` Krzysztof Kozlowski
2018-01-08 18:33 ` Krzysztof Kozlowski
2018-01-08 19:15 ` Jeff Layton
[not found] ` <1515438929.3486.48.camel-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-08 20:05 ` Jeff Layton
2018-01-08 20:05 ` Jeff Layton
2018-01-08 20:17 ` Krzysztof Kozlowski
2018-01-08 20:17 ` Krzysztof Kozlowski
2018-01-08 21:39 ` Jeff Layton [this message]
[not found] ` <1515447593.3486.54.camel-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-09 9:27 ` Krzysztof Kozlowski
2018-01-09 9:27 ` Krzysztof Kozlowski
2018-01-08 13:30 ` Matthew Wilcox
2018-01-08 13:30 ` Matthew Wilcox
2018-01-08 13:46 ` Jeff Layton
2017-12-22 14:43 ` (Lack of) i_version handling in udf Steve Magnani
2017-12-22 15:54 ` Jeff Layton
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=1515447593.3486.54.camel@kernel.org \
--to=jlayton@kernel.org \
--cc=adilger.kernel@dilger.ca \
--cc=b.zolnierkie@samsung.com \
--cc=bfields@fieldses.org \
--cc=clm@fb.com \
--cc=darrick.wong@oracle.com \
--cc=david@fromorbit.com \
--cc=dhowells@redhat.com \
--cc=dmitry.kasatkin@gmail.com \
--cc=dsterba@suse.com \
--cc=jack@suse.de \
--cc=jaltman@auristor.com \
--cc=jbacik@fb.com \
--cc=krzk@kernel.org \
--cc=linux-afs@lists.infradead.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=neilb@suse.de \
--cc=s.nawrocki@samsung.com \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
--cc=zohar@linux.vnet.ibm.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.