mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
dax: fix incorrect list of data cache aliasing architectures
commitd92576f116
("dax: does not work correctly with virtual aliasing caches") prevents DAX from building on architectures with virtually aliased dcache with: depends on !(ARM || MIPS || SPARC) This check is too broad (e.g. recent ARMv7 don't have virtually aliased dcaches), and also misses many other architectures with virtually aliased data cache. This is a regression introduced in the v4.0 Linux kernel where the dax mount option is removed for 32-bit ARMv7 boards which have no data cache aliasing, and therefore should work fine with FS_DAX. This was turned into the following check in alloc_dax() by a preparatory change: if (ops && (IS_ENABLED(CONFIG_ARM) || IS_ENABLED(CONFIG_MIPS) || IS_ENABLED(CONFIG_SPARC))) return NULL; Use cpu_dcache_is_aliasing() instead to figure out whether the environment has aliasing data caches. Link: https://lkml.kernel.org/r/20240215144633.96437-10-mathieu.desnoyers@efficios.com Fixes:d92576f116
("dax: does not work correctly with virtual aliasing caches") Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Vishal Verma <vishal.l.verma@intel.com> Cc: Dave Jiang <dave.jiang@intel.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Russell King <linux@armlinux.org.uk> Cc: Alasdair Kergon <agk@redhat.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Dave Chinner <david@fromorbit.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: kernel test robot <lkp@intel.com> Cc: Michael Sclafani <dm-devel@lists.linux.dev> Cc: Mike Snitzer <snitzer@kernel.org> Cc: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
8690bbcf3b
commit
902ccb86ed
@ -13,6 +13,7 @@
|
||||
#include <linux/uio.h>
|
||||
#include <linux/dax.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/cacheinfo.h>
|
||||
#include "dax-private.h"
|
||||
|
||||
/**
|
||||
@ -456,9 +457,7 @@ struct dax_device *alloc_dax(void *private, const struct dax_operations *ops)
|
||||
* except for device-dax (NULL operations pointer), which does
|
||||
* not use aliased mappings from the kernel.
|
||||
*/
|
||||
if (ops && (IS_ENABLED(CONFIG_ARM) ||
|
||||
IS_ENABLED(CONFIG_MIPS) ||
|
||||
IS_ENABLED(CONFIG_SPARC)))
|
||||
if (ops && cpu_dcache_is_aliasing())
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
|
||||
if (WARN_ON_ONCE(ops && !ops->zero_page_range))
|
||||
|
Loading…
Reference in New Issue
Block a user