mm: introduce MEMORY_DEVICE_FS_DAX and CONFIG_DEV_PAGEMAP_OPS
In preparation for fixing dax-dma-vs-unmap issues, filesystems need to be able to rely on the fact that they will get wakeups on dev_pagemap page-idle events. Introduce MEMORY_DEVICE_FS_DAX and generic_dax_page_free() as common indicator / infrastructure for dax filesytems to require. With this change there are no users of the MEMORY_DEVICE_HOST designation, so remove it. The HMM sub-system extended dev_pagemap to arrange a callback when a dev_pagemap managed page is freed. Since a dev_pagemap page is free / idle when its reference count is 1 it requires an additional branch to check the page-type at put_page() time. Given put_page() is a hot-path we do not want to incur that check if HMM is not in use, so a static branch is used to avoid that overhead when not necessary. Now, the FS_DAX implementation wants to reuse this mechanism for receiving dev_pagemap ->page_free() callbacks. Rework the HMM-specific static-key into a generic mechanism that either HMM or FS_DAX code paths can enable. For ARCH=um builds, and any other arch that lacks ZONE_DEVICE support, care must be taken to compile out the DEV_PAGEMAP_OPS infrastructure. However, we still need to support FS_DAX in the FS_DAX_LIMITED case implemented by the s390/dcssblk driver. Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Michal Hocko <mhocko@suse.com> Reported-by:kbuild test robot <lkp@intel.com> Reported-by:
Thomas Meyer <thomas@m3y3r.de> Reported-by:
Dave Jiang <dave.jiang@intel.com> Cc: "Jérôme Glisse" <jglisse@redhat.com> Reviewed-by:
Jan Kara <jack@suse.cz> Reviewed-by:
Christoph Hellwig <hch@lst.de> Signed-off-by:
Dan Williams <dan.j.williams@intel.com>
Showing
- drivers/dax/super.c 11 additions, 3 deletionsdrivers/dax/super.c
- drivers/nvdimm/pfn_devs.c 0 additions, 2 deletionsdrivers/nvdimm/pfn_devs.c
- drivers/nvdimm/pmem.c 25 additions, 0 deletionsdrivers/nvdimm/pmem.c
- fs/Kconfig 1 addition, 0 deletionsfs/Kconfig
- include/linux/memremap.h 10 additions, 26 deletionsinclude/linux/memremap.h
- include/linux/mm.h 53 additions, 18 deletionsinclude/linux/mm.h
- kernel/memremap.c 28 additions, 4 deletionskernel/memremap.c
- mm/Kconfig 5 additions, 0 deletionsmm/Kconfig
- mm/hmm.c 2 additions, 11 deletionsmm/hmm.c
- mm/swap.c 2 additions, 1 deletionmm/swap.c
Loading
Please register or sign in to comment