From: Shiyang Ruan <ruansy.fnst@fujitsu.com>
To: Dave Chinner <david@fromorbit.com>
Cc: <linux-xfs@vger.kernel.org>, <nvdimm@lists.linux.dev>,
<linux-fsdevel@vger.kernel.org>, <linux-mm@kvack.org>,
<djwong@kernel.org>, <dan.j.williams@intel.com>,
<hch@infradead.org>, <jane.chu@oracle.com>,
<akpm@linux-foundation.org>, <willy@infradead.org>
Subject: Re: [PATCH v10 3/3] mm, pmem, xfs: Introduce MF_MEM_REMOVE for unbind
Date: Mon, 27 Feb 2023 18:06:28 +0800 [thread overview]
Message-ID: <56e0a5e8-74db-95eb-d6fb-5d4a3b5cb156@fujitsu.com> (raw)
In-Reply-To: <20230227000759.GZ360264@dread.disaster.area>
在 2023/2/27 8:07, Dave Chinner 写道:
> On Fri, Feb 17, 2023 at 02:48:32PM +0000, Shiyang Ruan wrote:
>> This patch is inspired by Dan's "mm, dax, pmem: Introduce
>> dev_pagemap_failure()"[1]. With the help of dax_holder and
>> ->notify_failure() mechanism, the pmem driver is able to ask filesystem
>> (or mapped device) on it to unmap all files in use and notify processes
>> who are using those files.
>>
>> Call trace:
>> trigger unbind
>> -> unbind_store()
>> -> ... (skip)
>> -> devres_release_all() # was pmem driver ->remove() in v1
>> -> kill_dax()
>> -> dax_holder_notify_failure(dax_dev, 0, U64_MAX, MF_MEM_PRE_REMOVE)
>> -> xfs_dax_notify_failure()
>>
>> Introduce MF_MEM_PRE_REMOVE to let filesystem know this is a remove
>> event. So do not shutdown filesystem directly if something not
>> supported, or if failure range includes metadata area. Make sure all
>> files and processes are handled correctly.
>>
>> [1]: https://lore.kernel.org/linux-mm/161604050314.1463742.14151665140035795571.stgit@dwillia2-desk3.amr.corp.intel.com/
>>
>> Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
>
> .....
>
>> ---
>> @@ -225,6 +242,15 @@ xfs_dax_notify_failure(
>> if (offset + len - 1 > ddev_end)
>> len = ddev_end - offset + 1;
>>
>> + if (mf_flags & MF_MEM_PRE_REMOVE) {
>> + xfs_info(mp, "device is about to be removed!");
>> + error = freeze_super(mp->m_super);
>> + if (error)
>> + return error;
>> + /* invalidate_inode_pages2() invalidates dax mapping */
>> + super_drop_pagecache(mp->m_super, invalidate_inode_pages2);
>> + }
>
> Why do you still need to drop the pagecache here? My suggestion was
> to replace it with freezing the filesystem at this point is to stop
> it being dirtied further before the device remove actually occurs.
> The userspace processes will be killed, their DAX mappings reclaimed
> and the filesystem shut down before device removal occurs, so
> super_drop_pagecache() is largely superfluous as it doesn't actually
> provide any protection against racing with new mappings or dirtying
> of existing/newly created mappings.
>
> Freezing doesn't stop the creation of new mappings, either, it just
> cleans all the dirty mappings and halts anything that is trying to
This is the point I wasn't aware of.
> dirty existing clean mappings. It's not until we kill the userspace
> processes that new mappings will be stopped, and it's not until we
> shut the filesystem down that the filesystem itself will stop
> accessing the storage.
>
> Hence I don't see why you retained super_drop_pagecache() here at
> all. Can you explain why it is still needed?
So I was just afraid that it's not enough for rmap & processes killer to
invalidate the dax mappings. If something error happened during the
rmap walker, the fs will shutdown and there is no chance to invalidate
the rest mappings whose user didn't be killed yet.
Now that freezing the fs is enough, I will remove the drop cache code.
--
Thanks,
Ruan.
>
> -Dave.
next prev parent reply other threads:[~2023-02-27 10:07 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-17 14:48 [PATCH v10 0/3] mm, pmem, xfs: Introduce MF_MEM_REMOVE for unbind Shiyang Ruan
2023-02-17 14:48 ` [PATCH v10 1/3] xfs: fix the calculation of length and end Shiyang Ruan
2023-02-17 14:48 ` [PATCH v10 2/3] fs: introduce super_drop_pagecache() Shiyang Ruan
2023-02-17 16:14 ` Matthew Wilcox
2023-02-18 1:16 ` Shiyang Ruan
2023-02-18 18:27 ` Matthew Wilcox
2023-02-20 9:39 ` Shiyang Ruan
2023-02-20 9:45 ` Shiyang Ruan
2023-02-20 21:25 ` Dave Chinner
2023-02-21 1:57 ` Shiyang Ruan
2023-02-26 23:50 ` Dave Chinner
2023-02-17 14:48 ` [PATCH v10 3/3] mm, pmem, xfs: Introduce MF_MEM_REMOVE for unbind Shiyang Ruan
2023-02-27 0:07 ` Dave Chinner
2023-02-27 10:06 ` Shiyang Ruan [this message]
2023-03-21 10:59 ` Shiyang Ruan
2023-03-24 9:49 ` Shiyang Ruan
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=56e0a5e8-74db-95eb-d6fb-5d4a3b5cb156@fujitsu.com \
--to=ruansy.fnst@fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=dan.j.williams@intel.com \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=hch@infradead.org \
--cc=jane.chu@oracle.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-xfs@vger.kernel.org \
--cc=nvdimm@lists.linux.dev \
--cc=willy@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).