dax_attribute_group is only used by the pmem driver, and can avoid the
completely pointless lookup by the disk name if moved there.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 drivers/dax/super.c   | 64 -------------------------------------------
 drivers/nvdimm/pmem.c | 43 +++++++++++++++++++++++++++++
 include/linux/dax.h   |  2 --
 3 files changed, 43 insertions(+), 66 deletions(-)

diff --git a/drivers/dax/super.c b/drivers/dax/super.c
index fc89e91beea7c..e03d94bdc0449 100644
--- a/drivers/dax/super.c
+++ b/drivers/dax/super.c
@@ -231,70 +231,6 @@ enum dax_device_flags {
        DAXDEV_SYNC,
 };
 
-static ssize_t write_cache_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct dax_device *dax_dev = dax_get_by_host(dev_name(dev));
-       ssize_t rc;
-
-       WARN_ON_ONCE(!dax_dev);
-       if (!dax_dev)
-               return -ENXIO;
-
-       rc = sprintf(buf, "%d\n", !!dax_write_cache_enabled(dax_dev));
-       put_dax(dax_dev);
-       return rc;
-}
-
-static ssize_t write_cache_store(struct device *dev,
-               struct device_attribute *attr, const char *buf, size_t len)
-{
-       bool write_cache;
-       int rc = strtobool(buf, &write_cache);
-       struct dax_device *dax_dev = dax_get_by_host(dev_name(dev));
-
-       WARN_ON_ONCE(!dax_dev);
-       if (!dax_dev)
-               return -ENXIO;
-
-       if (rc)
-               len = rc;
-       else
-               dax_write_cache(dax_dev, write_cache);
-
-       put_dax(dax_dev);
-       return len;
-}
-static DEVICE_ATTR_RW(write_cache);
-
-static umode_t dax_visible(struct kobject *kobj, struct attribute *a, int n)
-{
-       struct device *dev = container_of(kobj, typeof(*dev), kobj);
-       struct dax_device *dax_dev = dax_get_by_host(dev_name(dev));
-
-       WARN_ON_ONCE(!dax_dev);
-       if (!dax_dev)
-               return 0;
-
-#ifndef CONFIG_ARCH_HAS_PMEM_API
-       if (a == &dev_attr_write_cache.attr)
-               return 0;
-#endif
-       return a->mode;
-}
-
-static struct attribute *dax_attributes[] = {
-       &dev_attr_write_cache.attr,
-       NULL,
-};
-
-struct attribute_group dax_attribute_group = {
-       .name = "dax",
-       .attrs = dax_attributes,
-       .is_visible = dax_visible,
-};
-EXPORT_SYMBOL_GPL(dax_attribute_group);
-
 /**
  * dax_direct_access() - translate a device pgoff to an absolute pfn
  * @dax_dev: a dax_device instance representing the logical memory range
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index ef4950f808326..bbeb3f46db157 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -328,6 +328,49 @@ static const struct dax_operations pmem_dax_ops = {
        .zero_page_range = pmem_dax_zero_page_range,
 };
 
+static ssize_t write_cache_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct pmem_device *pmem = dev_to_disk(dev)->private_data;
+
+       return sprintf(buf, "%d\n", !!dax_write_cache_enabled(pmem->dax_dev));
+}
+
+static ssize_t write_cache_store(struct device *dev,
+               struct device_attribute *attr, const char *buf, size_t len)
+{
+       struct pmem_device *pmem = dev_to_disk(dev)->private_data;
+       bool write_cache;
+       int rc;
+
+       rc = strtobool(buf, &write_cache);
+       if (rc)
+               return rc;
+       dax_write_cache(pmem->dax_dev, write_cache);
+       return len;
+}
+static DEVICE_ATTR_RW(write_cache);
+
+static umode_t dax_visible(struct kobject *kobj, struct attribute *a, int n)
+{
+#ifndef CONFIG_ARCH_HAS_PMEM_API
+       if (a == &dev_attr_write_cache.attr)
+               return 0;
+#endif
+       return a->mode;
+}
+
+static struct attribute *dax_attributes[] = {
+       &dev_attr_write_cache.attr,
+       NULL,
+};
+
+static const struct attribute_group dax_attribute_group = {
+       .name           = "dax",
+       .attrs          = dax_attributes,
+       .is_visible     = dax_visible,
+};
+
 static const struct attribute_group *pmem_attribute_groups[] = {
        &dax_attribute_group,
        NULL,
diff --git a/include/linux/dax.h b/include/linux/dax.h
index 2619d94c308d4..8623caa673889 100644
--- a/include/linux/dax.h
+++ b/include/linux/dax.h
@@ -38,8 +38,6 @@ struct dax_operations {
        int (*zero_page_range)(struct dax_device *, pgoff_t, size_t);
 };
 
-extern struct attribute_group dax_attribute_group;
-
 #if IS_ENABLED(CONFIG_DAX)
 struct dax_device *alloc_dax(void *private, const char *host,
                const struct dax_operations *ops, unsigned long flags);
-- 
2.30.2


Reply via email to