From: Anna Schumaker <schumaker.anna@gmail.com>
To: Trond Myklebust <trondmy@hammerspace.com>,
"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH v2 28/28] NFS: Remove redundant open context from nfs_page
Date: Mon, 08 Apr 2019 13:11:31 -0400 [thread overview]
Message-ID: <89770990a66eb25000248daaf2b0b8fcf105c8d7.camel@gmail.com> (raw)
In-Reply-To: <9498d534b8e59f903bf750183a08d22a6ae7ba9a.camel@hammerspace.com>
On Sat, 2019-04-06 at 14:14 +0000, Trond Myklebust wrote:
> Hi Anna
>
> On Fri, 2019-04-05 at 15:42 -0400, Anna Schumaker wrote:
> > Hi Trond,
> >
> > I'm having some trouble with xfstests generic/464 after applying this
> > patch.
> > Here is the oops I'm getting, I'm able to reproduce it fairly easily
> > against all
> > NFS versions:
> >
> > [ 41.182015] BUG: unable to handle kernel NULL pointer dereference
> > at
> > 0000000000000048
> > [ 41.182051] #PF error: [normal kernel read fault]
> > [ 41.182071] PGD 0 P4D 0
> > [ 41.182086] Oops: 0000 [#1] PREEMPT SMP PTI
> > [ 41.182104] CPU: 1 PID: 14515 Comm: kworker/1:6 Not tainted 5.1.0-
> > rc3-ANNA+
> > #5292
> > [ 41.182131] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
> > [ 41.182174] Workqueue: nfsiod rpc_async_release [sunrpc]
> > [ 41.182209] RIP: 0010:__put_nfs_open_context+0xd/0x110 [nfs]
> > [ 41.182227] Code: f8 ba a8 00 00 00 be c0 0c 00 00 e8 5d c0 58 f7
> > 48 89 c3 48
> > 85 c0 74 c5 e9 15 ff ff ff 0f 1f 44 00 00 41 56 41 55 41 54 55 53
> > <48> 8b 47 48
> > 48 8b 68 30 4c 8b 60 68 f0 ff 0f 0f 88 14 53 01 00 74
> > [ 41.182267] RSP: 0018:ffffae5f04b6be30 EFLAGS: 00010246
> > [ 41.182279] RAX: 0000000000000000 RBX: ffffa22aae71a680 RCX:
> > 0000000000000000
> > [ 41.182295] RDX: ffffffffb9205dc8 RSI: 0000000000000000 RDI:
> > 0000000000000000
> > [ 41.182311] RBP: 0000000000000801 R08: ffffa22aa5ca0000 R09:
> > ffffa22aba267800
> > [ 41.182327] R10: 0000000000000000 R11: 0000000000000000 R12:
> > ffffce5effd1c200
> > [ 41.182351] R13: 0000000000000000 R14: ffffa22aad2aa6c0 R15:
> > 0ffffce5effd1c20
> > [ 41.182378] FS: 0000000000000000(0000) GS:ffffa22abcb00000(0000)
> > knlGS:0000000000000000
> > [ 41.182411] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > [ 41.182435] CR2: 0000000000000048 CR3: 00000000af972005 CR4:
> > 0000000000160ee0
> > [ 41.182468] Call Trace:
> > [ 41.182495] nfs_commitdata_release+0x15/0x30 [nfs]
> > [ 41.182536] rpc_free_task+0x39/0x70 [sunrpc]
> > [ 41.182571] rpc_async_release+0x29/0x40 [sunrpc]
> > [ 41.182594] process_one_work+0x1eb/0x410
> > [ 41.182611] worker_thread+0x2d/0x3d0
> > [ 41.182621] ? process_one_work+0x410/0x410
> > [ 41.182632] kthread+0x112/0x130
> > [ 41.182641] ? kthread_park+0x80/0x80
> > [ 41.182652] ret_from_fork+0x35/0x40
> > [ 41.182662] Modules linked in: nfsv3 nfs fscache rpcrdma ib_isert
> >
>
> Does the following patch help to fix this?
This patch does fix the problem. Thanks!
Anna
>
> Cheers
> Trond
>
> 8<---------------------------------------
> From d84c699bba78d66d3ccd3f76a6aae573bdfddc05 Mon Sep 17 00:00:00 2001
> From: Trond Myklebust <trond.myklebust@hammerspace.com>
> Date: Sat, 6 Apr 2019 10:05:55 -0400
> Subject: [PATCH] NFS: Ensure that all nfs lock contexts have a valid open
> context
>
> Force the lock context to keep a reference to the parent open
> context so that we can guarantee the validity of the latter.
>
> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
> ---
> fs/nfs/inode.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
> index 414a90d48493..efc45f22c581 100644
> --- a/fs/nfs/inode.c
> +++ b/fs/nfs/inode.c
> @@ -885,10 +885,14 @@ struct nfs_lock_context *nfs_get_lock_context(struct
> nfs_open_context *ctx)
> spin_lock(&inode->i_lock);
> res = __nfs_find_lock_context(ctx);
> if (res == NULL) {
> - list_add_tail_rcu(&new->list, &ctx->lock_context.list);
> - new->open_context = ctx;
> - res = new;
> - new = NULL;
> + new->open_context = get_nfs_open_context(ctx);
> + if (new->open_context) {
> + list_add_tail_rcu(&new->list,
> + &ctx->lock_context.list);
> + res = new;
> + new = NULL;
> + } else
> + res = ERR_PTR(-EBADF);
> }
> spin_unlock(&inode->i_lock);
> kfree(new);
> @@ -906,6 +910,7 @@ void nfs_put_lock_context(struct nfs_lock_context *l_ctx)
> return;
> list_del_rcu(&l_ctx->list);
> spin_unlock(&inode->i_lock);
> + put_nfs_open_context(ctx);
> kfree_rcu(l_ctx, rcu_head);
> }
> EXPORT_SYMBOL_GPL(nfs_put_lock_context);
> --
> 2.20.1
>
>
> --
> Trond Myklebust
> Linux NFS client maintainer, Hammerspace
> trond.myklebust@hammerspace.com
>
>
next prev parent reply other threads:[~2019-04-08 17:11 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-29 21:59 [PATCH v2 00/28] Fix up soft mounts for NFSv4.x Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 01/28] SUNRPC: Fix up task signalling Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 02/28] SUNRPC: Refactor rpc_restart_call/rpc_restart_call_prepare Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 03/28] SUNRPC: Refactor xprt_request_wait_receive() Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 04/28] SUNRPC: Refactor rpc_sleep_on() Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 05/28] SUNRPC: Remove unused argument 'action' from rpc_sleep_on_priority() Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 06/28] SUNRPC: Add function rpc_sleep_on_timeout() Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 07/28] SUNRPC: Fix up tracking of timeouts Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 08/28] SUNRPC: Simplify queue timeouts using timer_reduce() Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 09/28] SUNRPC: Declare RPC timers as TIMER_DEFERRABLE Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 10/28] SUNRPC: Ensure that the transport layer respect major timeouts Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 11/28] SUNRPC: Add tracking of RPC level errors Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 12/28] SUNRPC: Make "no retrans timeout" soft tasks behave like softconn for timeouts Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 13/28] SUNRPC: Start the first major timeout calculation at task creation Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 14/28] SUNRPC: Ensure to ratelimit the "server not responding" syslog messages Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 15/28] SUNRPC: Add the 'softerr' rpc_client flag Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 16/28] NFS: Consider ETIMEDOUT to be a fatal error Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 17/28] NFS: Move internal constants out of uapi/linux/nfs_mount.h Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 18/28] NFS: Add a mount option "softerr" to allow clients to see ETIMEDOUT errors Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 19/28] NFS: Don't interrupt file writeout due to fatal errors Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 20/28] NFS: Don't call generic_error_remove_page() while holding locks Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 21/28] NFS: Don't inadvertently clear writeback errors Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 22/28] NFS: Replace custom error reporting mechanism with generic one Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 23/28] NFS: Fix up NFS I/O subrequest creation Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 24/28] NFS: Remove unused argument from nfs_create_request() Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 25/28] pNFS: Add tracking to limit the number of pNFS retries Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 26/28] NFS: Allow signal interruption of NFS4ERR_DELAYed operations Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 27/28] NFS: Add a helper to return a pointer to the open context of a struct nfs_page Trond Myklebust
2019-03-29 21:59 ` [PATCH v2 28/28] NFS: Remove redundant open context from nfs_page Trond Myklebust
2019-04-05 19:42 ` Anna Schumaker
2019-04-06 14:14 ` Trond Myklebust
2019-04-08 17:11 ` Anna Schumaker [this message]
2019-04-08 18:13 ` Trond Myklebust
2019-04-08 18:15 ` Anna Schumaker
2019-04-01 16:27 ` [PATCH v2 25/28] pNFS: Add tracking to limit the number of pNFS retries Olga Kornievskaia
2019-04-02 18:23 ` Trond Myklebust
2019-04-01 16:54 ` [PATCH v2 00/28] Fix up soft mounts for NFSv4.x Olga Kornievskaia
2019-04-02 18:28 ` Trond Myklebust
2019-04-03 20:51 ` Mkrtchyan, Tigran
2019-04-03 21:13 ` Trond Myklebust
2019-04-03 21:59 ` Mkrtchyan, Tigran
2019-04-03 22:10 ` Trond Myklebust
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=89770990a66eb25000248daaf2b0b8fcf105c8d7.camel@gmail.com \
--to=schumaker.anna@gmail.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trondmy@hammerspace.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox