dax: Fix incorrect argument passed to xas_set_err()
authorHao Li <lihao2018.fnst@cn.fujitsu.com>
Wed, 29 Jul 2020 03:44:36 +0000 (11:44 +0800)
committerVishal Verma <vishal.l.verma@intel.com>
Fri, 31 Jul 2020 00:14:33 +0000 (18:14 -0600)
The argument passed to xas_set_err() to indicate an error should be negative.
Otherwise, xas_error() will return 0, and grab_mapping_entry() will return the
found entry instead of 'SIGBUS' when the entry is not in fact valid.
This would result in problems in subsequent code paths.

Link: https://lore.kernel.org/r/20200729034436.24267-1-lihao2018.fnst@cn.fujitsu.com
Reviewed-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
Signed-off-by: Hao Li <lihao2018.fnst@cn.fujitsu.com>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
fs/dax.c

index 3e0babe..95341af 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -488,7 +488,7 @@ retry:
                if (dax_is_conflict(entry))
                        goto fallback;
                if (!xa_is_value(entry)) {
-                       xas_set_err(xas, EIO);
+                       xas_set_err(xas, -EIO);
                        goto out_unlock;
                }