[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <769021.1709553367@warthog.procyon.org.uk>
Date: Mon, 04 Mar 2024 11:56:07 +0000
From: David Howells <dhowells@...hat.com>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: dhowells@...hat.com, Tong Tiangen <tongtiangen@...wei.com>,
Al Viro <viro@...nel.org>, Jens Axboe <axboe@...nel.dk>,
Christoph Hellwig <hch@....de>,
Christian Brauner <christian@...uner.io>,
David Laight <David.Laight@...lab.com>,
Matthew Wilcox <willy@...radead.org>,
Jeff Layton <jlayton@...nel.org>, linux-fsdevel@...r.kernel.org,
linux-block@...r.kernel.org, linux-mm@...ck.org,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
Kefeng Wang <wangkefeng.wang@...wei.com>
Subject: Re: [bug report] dead loop in generic_perform_write() //Re: [PATCH v7 07/12] iov_iter: Convert iterate*() to inline funcs
Linus Torvalds <torvalds@...ux-foundation.org> wrote:
> Actually, I think the right model is to get rid of that horrendous
> .copy_mc field entirely.
>
> We only have one single place that uses it - that nasty core dumping
> code. And that code is *not* performance critical.
>
> And not only isn't it performance-critical, it already does all the
> core dumping one page at a time because it doesn't want to write pages
> that were never mapped into user space.
>
> So what we can do is
>
> (a) make the core dumping code *copy* the page to a good location
> with copy_mc_to_kernel() first
>
> (b) remove this horrendous .copy_mc crap entirely from iov_iter
>
> This is slightly complicated by the fact that copy_mc_to_kernel() may
> not even exist, and architectures that don't have it don't want the
> silly extra copy. So we need to abstract the "copy to temporary page"
> code a bit. But that's probably a good thing anyway in that it forces
> us to have nice interfaces.
>
> End result: something like the attached.
>
> AGAIN: THIS IS ENTIRELY UNTESTED.
>
> But hey, so was clearly all the .copy_mc code too that this removes, so...
I like it:-)
I've tested it by SIGQUIT'ing a number of processes and using gdb to examine
the coredumps - which seems to work - at least without the production of any
MCEs. I'm not sure how I could test it with MCEs.
Feel free to add:
Reviewed-by: David Howells <dhowells@...hat.com>
Tested-by: David Howells <dhowells@...hat.com>
That said, I wonder if:
#ifdef copy_mc_to_kernel
should be:
#ifdef CONFIG_ARCH_HAS_COPY_MC
and whether it's possible to find out dynamically if MCEs can occur at all.
David
Powered by blists - more mailing lists