| From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
| Subject: dcssblk: handle alloc_dax() -EOPNOTSUPP failure |
| Date: Thu, 15 Feb 2024 09:46:29 -0500 |
| |
| In preparation for checking whether the architecture has data cache |
| aliasing within alloc_dax(), modify the error handling of dcssblk |
| dcssblk_add_store() to handle alloc_dax() -EOPNOTSUPP failures. |
| |
| Considering that s390 is not a data cache aliasing architecture, |
| and considering that DCSSBLK selects DAX, a return value of -EOPNOTSUPP |
| from alloc_dax() should make dcssblk_add_store() fail. |
| |
| Link: https://lkml.kernel.org/r/20240215144633.96437-6-mathieu.desnoyers@efficios.com |
| Fixes: d92576f1167c ("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> |
| Acked-by: Heiko Carstens <hca@linux.ibm.com> |
| Cc: Alasdair Kergon <agk@redhat.com> |
| Cc: Mike Snitzer <snitzer@kernel.org> |
| Cc: Mikulas Patocka <mpatocka@redhat.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: Christoph Hellwig <hch@lst.de> |
| Cc: Dave Chinner <david@fromorbit.com> |
| Cc: kernel test robot <lkp@intel.com> |
| Cc: Michael Sclafani <dm-devel@lists.linux.dev> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| drivers/s390/block/dcssblk.c | 11 ++++++----- |
| 1 file changed, 6 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/s390/block/dcssblk.c~dcssblk-handle-alloc_dax-eopnotsupp-failure |
| +++ a/drivers/s390/block/dcssblk.c |
| @@ -549,6 +549,7 @@ dcssblk_add_store(struct device *dev, st |
| int rc, i, j, num_of_segments; |
| struct dcssblk_dev_info *dev_info; |
| struct segment_info *seg_info, *temp; |
| + struct dax_device *dax_dev; |
| char *local_buf; |
| unsigned long seg_byte_size; |
| |
| @@ -677,13 +678,13 @@ dcssblk_add_store(struct device *dev, st |
| if (rc) |
| goto put_dev; |
| |
| - dev_info->dax_dev = alloc_dax(dev_info, &dcssblk_dax_ops); |
| - if (IS_ERR(dev_info->dax_dev)) { |
| - rc = PTR_ERR(dev_info->dax_dev); |
| - dev_info->dax_dev = NULL; |
| + dax_dev = alloc_dax(dev_info, &dcssblk_dax_ops); |
| + if (IS_ERR(dax_dev)) { |
| + rc = PTR_ERR(dax_dev); |
| goto put_dev; |
| } |
| - set_dax_synchronous(dev_info->dax_dev); |
| + set_dax_synchronous(dax_dev); |
| + dev_info->dax_dev = dax_dev; |
| rc = dax_add_host(dev_info->dax_dev, dev_info->gd); |
| if (rc) |
| goto out_dax; |
| _ |