[LSF/MM TOPIC] The end of the DAX experiment
by Dan Williams
Before people get too excited this isn't a proposal to kill DAX. The
topic proposal is a discussion to resolve lingering open questions
that currently motivate ext4 and xfs to scream "EXPERIMENTAL" when the
current DAX facilities are enabled. The are 2 primary concerns to
resolve. Enumerate the remaining features/fixes, and identify a path
to implement it all without regressing any existing application use
cases.
An enumeration of remaining projects follows, please expand this list
if I missed something:
* "DAX" has no specific meaning by itself, users have 2 use cases for
"DAX" capabilities: userspace cache management via MAP_SYNC, and page
cache avoidance where the latter aspect of DAX has no current api to
discover / use it. The project is to supplement MAP_SYNC with a
MAP_DIRECT facility and MADV_SYNC / MADV_DIRECT to indicate the same
dynamically via madvise. Similar to O_DIRECT, MAP_DIRECT would be an
application hint to avoid / minimiize page cache usage, but no strict
guarantee like what MAP_SYNC provides.
* Resolve all "if (dax) goto fail;" patterns in the kernel. Outside of
longterm-GUP (a topic in its own right) the projects here are
XFS-reflink and XFS-realtime-device support. DAX+reflink effectively
requires a given physical page to be mapped into two different inodes
at different (page->index) offsets. The challenge is to support
DAX-reflink without violating any existing application visible
semantics, the operating assumption / strawman to debate is that
experimental status is not blanket permission to go change existing
semantics in backwards incompatible ways.
* Deprecate, but not remove, the DAX mount option. Too many flows
depend on the option so it will never go away, but the facility is too
coarse. Provide an option to enable MAP_SYNC and
more-likely-to-do-something-useful-MAP_DIRECT on a per-directory
basis. The current proposal is to allow this property to only be
toggled while the directory is empty to avoid the complications of
racing page invalidation with new DAX mappings.
Secondary projects, i.e. important but I would submit are not in the
critical path to removing the "experimental" designation:
* Filesystem-integrated badblock management. Hook up the media error
notifications from libnvdimm to the filesystem to allow for operations
like "list files with media errors" and "enumerate bad file offsets on
a granulatiy smaller than a page". Another consideration along these
lines is to integrate machine-check-handling and dynamic error
notification into a filesystem interface. I've heard complaints that
the sigaction() based mechanism to receive BUS_MCEERR_* information,
while sufficient for the "System RAM" use case, is not precise enough
for the "Persistent Memory / DAX" use case where errors are repairable
and sub-page error information is useful.
* Userfaultfd for file-backed mappings and DAX
Ideally all the usual DAX, persistent memory, and GUP suspects could
be in the room to discuss this:
* Jan Kara
* Dave Chinner
* Christoph Hellwig
* Jeff Moyer
* Johannes Thumshirn
* Matthew Wilcox
* John Hubbard
* Jérôme Glisse
* MM folks for the reflink vs 'struct page' vs Xarray considerations
2 years, 6 months
[RFC PATCH 0/7] xfs: add reflink & dedupe support for fsdax.
by Shiyang Ruan
This patchset aims to take care of this issue to make reflink and dedupe
work correctly in XFS.
It is based on Goldwyn's patchsets: "v4 Btrfs dax support" and "Btrfs
iomap". I picked up some patches related and made a few fix to make it
basically works fine.
For dax framework:
1. adapt to the latest change in iomap.
For XFS:
1. report the source address and set IOMAP_COW type for those write
operations that need COW.
2. update extent list at the end.
3. add file contents comparison function based on dax framework.
4. use xfs_break_layouts() to support dax.
Goldwyn Rodrigues (3):
dax: replace mmap entry in case of CoW
fs: dedup file range to use a compare function
dax: memcpy before zeroing range
Shiyang Ruan (4):
dax: Introduce dax_copy_edges() for COW.
dax: copy data before write.
xfs: Add COW handle for fsdax.
xfs: Add dedupe support for fsdax.
fs/btrfs/ioctl.c | 11 ++-
fs/dax.c | 203 ++++++++++++++++++++++++++++++++++++++----
fs/iomap.c | 9 +-
fs/ocfs2/file.c | 2 +-
fs/read_write.c | 11 +--
fs/xfs/xfs_iomap.c | 42 +++++----
fs/xfs/xfs_reflink.c | 84 +++++++++--------
include/linux/dax.h | 15 ++--
include/linux/fs.h | 8 +-
include/linux/iomap.h | 6 ++
10 files changed, 294 insertions(+), 97 deletions(-)
--
2.17.0
2 years, 8 months
[RFC v3 00/19] kunit: introduce KUnit, the Linux kernel unit testing framework
by Brendan Higgins
This patch set proposes KUnit, a lightweight unit testing and mocking
framework for the Linux kernel.
Unlike Autotest and kselftest, KUnit is a true unit testing framework;
it does not require installing the kernel on a test machine or in a VM
and does not require tests to be written in userspace running on a host
kernel. Additionally, KUnit is fast: From invocation to completion KUnit
can run several dozen tests in under a second. Currently, the entire
KUnit test suite for KUnit runs in under a second from the initial
invocation (build time excluded).
KUnit is heavily inspired by JUnit, Python's unittest.mock, and
Googletest/Googlemock for C++. KUnit provides facilities for defining
unit test cases, grouping related test cases into test suites, providing
common infrastructure for running tests, mocking, spying, and much more.
## What's so special about unit testing?
A unit test is supposed to test a single unit of code in isolation,
hence the name. There should be no dependencies outside the control of
the test; this means no external dependencies, which makes tests orders
of magnitudes faster. Likewise, since there are no external dependencies,
there are no hoops to jump through to run the tests. Additionally, this
makes unit tests deterministic: a failing unit test always indicates a
problem. Finally, because unit tests necessarily have finer granularity,
they are able to test all code paths easily solving the classic problem
of difficulty in exercising error handling code.
## Is KUnit trying to replace other testing frameworks for the kernel?
No. Most existing tests for the Linux kernel are end-to-end tests, which
have their place. A well tested system has lots of unit tests, a
reasonable number of integration tests, and some end-to-end tests. KUnit
is just trying to address the unit test space which is currently not
being addressed.
## More information on KUnit
There is a bunch of documentation near the end of this patch set that
describes how to use KUnit and best practices for writing unit tests.
For convenience I am hosting the compiled docs here:
https://google.github.io/kunit-docs/third_party/kernel/docs/
Additionally for convenience, I have applied these patches to a branch:
https://kunit.googlesource.com/linux/+/kunit/rfc/4.19/v3
The repo may be cloned with:
git clone https://kunit.googlesource.com/linux
This patchset is on the kunit/rfc/4.19/v3 branch.
## Changes Since Last Version
- Changed namespace prefix from `test_*` to `kunit_*` as requested by
Shuah.
- Started converting/cleaning up the device tree unittest to use KUnit.
- Started adding KUnit expectations with custom messages.
--
2.20.0.rc0.387.gc7a69e6b6c-goog
2 years, 9 months
[PATCH] libnvdimm, region: Use struct_size() in kzalloc()
by Gustavo A. R. Silva
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:
struct nd_region {
...
struct nd_mapping mapping[0];
};
instance = kzalloc(sizeof(struct nd_region) + sizeof(struct nd_mapping) *
count, GFP_KERNEL);
Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:
instance = kzalloc(struct_size(instance, mapping, count), GFP_KERNEL);
This code was detected with the help of Coccinelle.
Signed-off-by: Gustavo A. R. Silva <gustavo(a)embeddedor.com>
---
drivers/nvdimm/region_devs.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index b4ef7d9ff22e..88becc87e234 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -1027,10 +1027,9 @@ static struct nd_region *nd_region_create(struct nvdimm_bus *nvdimm_bus,
}
region_buf = ndbr;
} else {
- nd_region = kzalloc(sizeof(struct nd_region)
- + sizeof(struct nd_mapping)
- * ndr_desc->num_mappings,
- GFP_KERNEL);
+ nd_region = kzalloc(struct_size(nd_region, mapping,
+ ndr_desc->num_mappings),
+ GFP_KERNEL);
region_buf = nd_region;
}
--
2.21.0
2 years, 10 months
[PATCH v3 00/10] EFI Specific Purpose Memory Support
by Dan Williams
Changes since v2:
- Consolidate the new E820_TYPE and IORES_DESC and EFI configuration
symbol on an "_APPLICATION_RESERVED" suffix. (Ard).
- Rework the implementation to drop the new MEMBLOCK_APP_SPECIFIC
memblock and move the reservation earlier to e820__memblock_setup().
(Mike)
- Move efi_fake_mem support for EFI_MEMORY_SP to its own implementation
that does not require memblock allocations.
- Move is_efi_application_reserved() into the x86 efi implementation.
(Ard)
[1]: https://lists.01.org/pipermail/linux-nvdimm/2019-May/021668.html
---
Merge logistics: These patches touch core-efi, acpi, device-dax, and
x86. Given the regression risk is highest for the x86 changes it seems
tip.git is the best tree to host the series.
---
The EFI 2.8 Specification [2] introduces the EFI_MEMORY_SP ("specific
purpose") memory attribute. This attribute bit replaces the deprecated
ACPI HMAT "reservation hint" that was introduced in ACPI 6.2 and removed
in ACPI 6.3.
Given the increasing diversity of memory types that might be advertised
to the operating system, there is a need for platform firmware to hint
which memory ranges are free for the OS to use as general purpose memory
and which ranges are intended for application specific usage. For
example, an application with prior knowledge of the platform may expect
to be able to exclusively allocate a precious / limited pool of high
bandwidth memory. Alternatively, for the general purpose case, the
operating system may want to make the memory available on a best effort
basis as a unique numa-node with performance properties by the new
CONFIG_HMEM_REPORTING [3] facility.
In support of optionally allowing either application-exclusive and
core-kernel-mm managed access to differentiated memory, claim
EFI_MEMORY_SP ranges for exposure as device-dax instances by default.
Such instances can be directly owned / mapped by a
platform-topology-aware application. Alternatively, with the new kmem
facility [4], the administrator has the option to instead designate that
those memory ranges be hot-added to the core-kernel-mm as a unique
memory numa-node. In short, allow for the decision about what software
agent manages specific-purpose memory to be made at runtime.
The patches are based on the new HMAT+HMEM_REPORTING facilities merged
for v5.2-rc1. The implementation is tested with qemu emulation of HMAT
[5] plus the efi_fake_mem facility for applying the EFI_MEMORY_SP
attribute.
[2]: https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf
[3]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
[4]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
[5]: http://patchwork.ozlabs.org/cover/1096737/
---
Dan Williams (10):
acpi/numa: Establish a new drivers/acpi/numa/ directory
acpi/numa/hmat: Skip publishing target info for nodes with no online memory
efi: Enumerate EFI_MEMORY_SP
x86, efi: Push EFI_MEMMAP check into leaf routines
x86, efi: Reserve UEFI 2.8 Specific Purpose Memory for dax
x86, efi: Add efi_fake_mem support for EFI_MEMORY_SP
lib/memregion: Uplevel the pmem "region" ida to a global allocator
device-dax: Add a driver for "hmem" devices
acpi/numa/hmat: Register HMAT at device_initcall level
acpi/numa/hmat: Register "specific purpose" memory as an "hmem" device
arch/x86/Kconfig | 21 +++++
arch/x86/boot/compressed/eboot.c | 5 +
arch/x86/boot/compressed/kaslr.c | 3 -
arch/x86/include/asm/e820/types.h | 9 ++
arch/x86/include/asm/efi.h | 15 ++++
arch/x86/kernel/e820.c | 12 ++-
arch/x86/kernel/setup.c | 21 +++--
arch/x86/platform/efi/efi.c | 40 ++++++++-
arch/x86/platform/efi/quirks.c | 3 +
drivers/acpi/Kconfig | 9 --
drivers/acpi/Makefile | 3 -
drivers/acpi/hmat/Makefile | 2
drivers/acpi/numa/Kconfig | 8 ++
drivers/acpi/numa/Makefile | 3 +
drivers/acpi/numa/hmat.c | 149 +++++++++++++++++++++++++++++++----
drivers/acpi/numa/srat.c | 0
drivers/dax/Kconfig | 27 +++++-
drivers/dax/Makefile | 2
drivers/dax/hmem.c | 58 ++++++++++++++
drivers/firmware/efi/Makefile | 5 +
drivers/firmware/efi/efi.c | 5 +
drivers/firmware/efi/esrt.c | 3 +
drivers/firmware/efi/fake_mem-x86.c | 69 ++++++++++++++++
drivers/firmware/efi/fake_mem.c | 26 +++---
drivers/firmware/efi/fake_mem.h | 10 ++
drivers/nvdimm/Kconfig | 1
drivers/nvdimm/core.c | 1
drivers/nvdimm/nd-core.h | 1
drivers/nvdimm/region_devs.c | 13 +--
include/linux/efi.h | 1
include/linux/ioport.h | 1
include/linux/memregion.h | 11 +++
lib/Kconfig | 7 ++
lib/Makefile | 1
lib/memregion.c | 15 ++++
35 files changed, 481 insertions(+), 79 deletions(-)
delete mode 100644 drivers/acpi/hmat/Makefile
rename drivers/acpi/{hmat/Kconfig => numa/Kconfig} (70%)
create mode 100644 drivers/acpi/numa/Makefile
rename drivers/acpi/{hmat/hmat.c => numa/hmat.c} (81%)
rename drivers/acpi/{numa.c => numa/srat.c} (100%)
create mode 100644 drivers/dax/hmem.c
create mode 100644 drivers/firmware/efi/fake_mem-x86.c
create mode 100644 drivers/firmware/efi/fake_mem.h
create mode 100644 include/linux/memregion.h
create mode 100644 lib/memregion.c
2 years, 10 months
create devdax with "-a 1g" failed from 5.3.0-rc1
by Yi Zhang
Hi Dan
As subject, I found it failed from bellow commit[1], steps list here [2] and I've attached the full dmesg, let me know if you need more info, thanks.
[1]
commit a3619190d62ed9d66416891be2416f6bea2b3ca4 (refs/bisect/bad)
Author: Dan Williams <dan.j.williams(a)intel.com>
Date: Thu Jul 18 15:58:40 2019 -0700
libnvdimm/pfn: stop padding pmem namespaces to section alignment
[2]
# ./ndctl destroy-namespace all -r all -f
destroyed 5 namespaces
# ./ndctl create-namespace -r region1 -m devdax -a 1g -s 12G -vv
libndctl: ndctl_dax_enable: dax1.0: failed to enable
Error: namespace1.0: failed to enable
failed to create namespace: No such device or address
# ./ndctl -v
65
Best Regards,
Yi Zhang
2 years, 10 months
[ndctl PATCH v2 00/26] Improvements for namespace creation/interrogation
by Dan Williams
Changes since v1 [1]:
- Fix up the --human option for 'read-labels' and 'read-infoblock' to
imply --json (Vishal)
- Add a man page for 'read-infoblock' and update 'read-labels' man page.
(Vishal)
[1]: https://lists.01.org/pipermail/linux-nvdimm/2019-February/019916.html
---
What follows is random assortment of ndctl improvements that have been
hiding out in my private tree. There was a v1 "[ndctl PATCH 0/8]
Improve support + testing for labels + info-blocks " back in February,
but the patch kit has tripled in size since then. There was also a major
change in direction on improving the situation around 'section
collision' handling. Rather than more local libnvdimm hacks the problem
was solved at the source in the memory hotplug code with 'sub-section
memory hotplug' support merged for v5.3-rc1. That results in the
previous patch "ndctl/test: Test inter-region collision handling " being
abandoned in favor of "ndctl/test: Exercise sub-section sized namespace
creation/deletion".
In the course of developing that test and addressing Jane's concerns
with ndctl create-namespace behavior, a few more fixups relative to
minimum namespace size are also included.
Other miscellaneous items included in this set:
- A device-mapper unit test to catch simple device-mapper support
regressions.
- A simple fixup to the monitor to allow it to be suspended (Ctrl+Z)
Given the size and random topics I am open to merging these piecemeal,
or out of order if something needs to be deferred for more fixups.
---
Dan Williams (26):
ndctl/dimm: Add 'flags' field to read-labels output
ndctl/dimm: Add --human support to read-labels
ndctl/build: Drop -Wpointer-arith
ndctl/namespace: Add read-infoblock command
ndctl/test: Update dax-dev to handle multiple e820 ranges
ndctl/test: Make dax.sh more robust vs small namespaces
ndctl/namespace: Always zero info-blocks
ndctl/dimm: Support small label reads/writes
ndctl/dimm: Minimize data-transfer for init-labels
ndctl/dimm: Add offset and size options to {read,write,zero}-labels
ndctl/dimm: Limit read-labels with --index option
ndctl/namespace: Minimize label data transfer for autolabel
ndctl/namespace: Disable autorecovery of create-namespace failures
ndctl/namespace: Handle 'create-namespace' in label-less mode
ndctl/dimm: Fix init-labels success reporting
ndctl/test: Fix device-dax bus-model detection
ndctl/test: Checkout device-mapper + dax operation
ndctl/test: Exercise sub-section sized namespace creation/deletion
ndctl/namespace: Kill off the legacy mode names
ndctl/namespace: Introduce mode-to-name and name-to-mode helpers
ndctl/namespace: Validate namespace size within validate_namespace_options()
ndctl/namespace: Clarify 16M minimum size requirement
ndctl/namespace: Report ENOSPC when regions are full
ndctl/test: Regression test 'failed to track'
ndctl/namespace: Continue region search on 'missing seed' event
ndctl/monitor: Allow monitor to be manually moved to the background
Documentation/ndctl/Makefile.am | 3
Documentation/ndctl/labels-options.txt | 9
Documentation/ndctl/ndctl-create-namespace.txt | 9
Documentation/ndctl/ndctl-read-infoblock.txt | 94 ++++
Documentation/ndctl/ndctl-read-labels.txt | 7
configure.ac | 1
ndctl/action.h | 1
ndctl/builtin.h | 1
ndctl/check.c | 20 -
ndctl/dimm.c | 111 +++-
ndctl/lib/dimm.c | 85 +++
ndctl/lib/libndctl.c | 111 ++++
ndctl/lib/libndctl.sym | 5
ndctl/lib/private.h | 4
ndctl/libndctl.h | 10
ndctl/monitor.c | 4
ndctl/namespace.c | 600 ++++++++++++++++++++----
ndctl/namespace.h | 51 ++
ndctl/ndctl.c | 1
test/Makefile.am | 5
test/core.c | 10
test/dax-dev.c | 17 +
test/dax.sh | 4
test/dm.sh | 75 +++
test/libndctl.c | 6
test/sub-section.sh | 78 +++
test/track-uuid.sh | 41 ++
util/filter.c | 46 +-
util/filter.h | 3
util/fletcher.h | 1
util/json.c | 4
util/size.h | 1
util/util.h | 4
33 files changed, 1221 insertions(+), 201 deletions(-)
create mode 100644 Documentation/ndctl/ndctl-read-infoblock.txt
create mode 100755 test/dm.sh
create mode 100755 test/sub-section.sh
create mode 100755 test/track-uuid.sh
2 years, 10 months
[PATCH] libnvdimm: change disk name of virtio pmem disk
by Pankaj Gupta
This patch adds prefix 'v' in disk name for virtio pmem.
This differentiates virtio-pmem disks from the pmem disks.
Signed-off-by: Pankaj Gupta <pagupta(a)redhat.com>
---
drivers/nvdimm/namespace_devs.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
index a16e52251a30..8e5d29266fb0 100644
--- a/drivers/nvdimm/namespace_devs.c
+++ b/drivers/nvdimm/namespace_devs.c
@@ -182,8 +182,12 @@ const char *nvdimm_namespace_disk_name(struct nd_namespace_common *ndns,
char *name)
{
struct nd_region *nd_region = to_nd_region(ndns->dev.parent);
+ const char *prefix = "";
const char *suffix = NULL;
+ if (!is_nvdimm_sync(nd_region))
+ prefix = "v";
+
if (ndns->claim && is_nd_btt(ndns->claim))
suffix = "s";
@@ -201,7 +205,7 @@ const char *nvdimm_namespace_disk_name(struct nd_namespace_common *ndns,
sprintf(name, "pmem%d.%d%s", nd_region->id, nsidx,
suffix ? suffix : "");
else
- sprintf(name, "pmem%d%s", nd_region->id,
+ sprintf(name, "%spmem%d%s", prefix, nd_region->id,
suffix ? suffix : "");
} else if (is_namespace_blk(&ndns->dev)) {
struct nd_namespace_blk *nsblk;
--
2.20.1
2 years, 10 months
[PATCH v9 00/18] kunit: introduce KUnit, the Linux kernel unit testing framework
by Brendan Higgins
## TL;DR
This new patch set only contains a very minor change to address a sparse
warning in the PROC SYSCTL KUnit test. Otherwise this patchset is
identical to the previous.
As I mentioned in the previous patchset, all patches now have acks and
reviews.
## Background
This patch set proposes KUnit, a lightweight unit testing and mocking
framework for the Linux kernel.
Unlike Autotest and kselftest, KUnit is a true unit testing framework;
it does not require installing the kernel on a test machine or in a VM
(however, KUnit still allows you to run tests on test machines or in VMs
if you want[1]) and does not require tests to be written in userspace
running on a host kernel. Additionally, KUnit is fast: From invocation
to completion KUnit can run several dozen tests in about a second.
Currently, the entire KUnit test suite for KUnit runs in under a second
from the initial invocation (build time excluded).
KUnit is heavily inspired by JUnit, Python's unittest.mock, and
Googletest/Googlemock for C++. KUnit provides facilities for defining
unit test cases, grouping related test cases into test suites, providing
common infrastructure for running tests, mocking, spying, and much more.
### What's so special about unit testing?
A unit test is supposed to test a single unit of code in isolation,
hence the name. There should be no dependencies outside the control of
the test; this means no external dependencies, which makes tests orders
of magnitudes faster. Likewise, since there are no external dependencies,
there are no hoops to jump through to run the tests. Additionally, this
makes unit tests deterministic: a failing unit test always indicates a
problem. Finally, because unit tests necessarily have finer granularity,
they are able to test all code paths easily solving the classic problem
of difficulty in exercising error handling code.
### Is KUnit trying to replace other testing frameworks for the kernel?
No. Most existing tests for the Linux kernel are end-to-end tests, which
have their place. A well tested system has lots of unit tests, a
reasonable number of integration tests, and some end-to-end tests. KUnit
is just trying to address the unit test space which is currently not
being addressed.
### More information on KUnit
There is a bunch of documentation near the end of this patch set that
describes how to use KUnit and best practices for writing unit tests.
For convenience I am hosting the compiled docs here[2].
Additionally for convenience, I have applied these patches to a
branch[3]. The repo may be cloned with:
git clone https://kunit.googlesource.com/linux
This patchset is on the kunit/rfc/v5.2/v9 branch.
## Changes Since Last Version
Like I said in the TL;DR, there is only one minor change since the
previous revision. That change only affects patch 17/18; it addresses a
sparse warning in the PROC SYSCTL unit test.
Thanks to Masahiro for applying previous patches to a branch in his
kbuild tree and running sparse and other static analysis tools against
my patches.
[1] https://google.github.io/kunit-docs/third_party/kernel/docs/usage.html#ku...
[2] https://google.github.io/kunit-docs/third_party/kernel/docs/
[3] https://kunit.googlesource.com/linux/+/kunit/rfc/v5.2/v9
--
2.22.0.410.gd8fdbe21b5-goog
2 years, 10 months
[PATCH v3 0/2] mm/memory-failure: Poison read receives SIGKILL instead of SIGBUS issue
by Jane Chu
Changes in v3:
- move **tk cleanup to its own patch
Changes in v2:
- move 'tk' allocations internal to add_to_kill(), suggested by Dan;
- ran checkpatch.pl check, pointed out by Matthew;
- Noaya pointed out that v1 would have missed the SIGKILL
if "tk->addr == -EFAULT", since the code returns early.
Incorporated Noaya's suggestion, also, skip VMAs where
"tk->size_shift == 0" for zone device page, and deliver SIGBUS
when "tk->size_shift != 0" so the payload is helpful;
- added Suggested-by: Naoya Horiguchi <n-horiguchi(a)ah.jp.nec.com>
Jane Chu (2):
mm/memory-failure.c clean up around tk pre-allocation
mm/memory-failure: Poison read receives SIGKILL instead of SIGBUS if
mmaped more than once
mm/memory-failure.c | 62 ++++++++++++++++++++++-------------------------------
1 file changed, 26 insertions(+), 36 deletions(-)
--
1.8.3.1
2 years, 10 months