[PATCH 2/7] dax: reorder dax_fops function definitions

2016-08-15 Thread Dan Williams
In order to convert devm_create_dax_dev() to use cdev, it will need
access to dax_fops. Move dax_fops and related function definitions
before devm_create_dax_dev().

Signed-off-by: Dan Williams 
---
 drivers/dax/dax.c |  337 ++---
 1 file changed, 168 insertions(+), 169 deletions(-)

diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c
index 736c03830fd0..3774fc9709bb 100644
--- a/drivers/dax/dax.c
+++ b/drivers/dax/dax.c
@@ -145,175 +145,6 @@ static const struct attribute_group 
*dax_attribute_groups[] = {
NULL,
 };
 
-static void unregister_dax_dev(void *_dev)
-{
-   struct device *dev = _dev;
-   struct dax_dev *dax_dev = dev_get_drvdata(dev);
-   struct dax_region *dax_region = dax_dev->region;
-
-   dev_dbg(dev, "%s\n", __func__);
-
-   /*
-* Note, rcu is not protecting the liveness of dax_dev, rcu is
-* ensuring that any fault handlers that might have seen
-* dax_dev->alive == true, have completed.  Any fault handlers
-* that start after synchronize_rcu() has started will abort
-* upon seeing dax_dev->alive == false.
-*/
-   dax_dev->alive = false;
-   synchronize_rcu();
-
-   get_device(dev);
-   device_unregister(dev);
-   ida_simple_remove(_region->ida, dax_dev->id);
-   ida_simple_remove(_minor_ida, MINOR(dev->devt));
-   put_device(dev);
-   dax_dev_put(dax_dev);
-}
-
-int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res,
-   int count)
-{
-   struct device *parent = dax_region->dev;
-   struct dax_dev *dax_dev;
-   struct device *dev;
-   int rc, minor;
-   dev_t dev_t;
-
-   dax_dev = kzalloc(sizeof(*dax_dev) + sizeof(*res) * count, GFP_KERNEL);
-   if (!dax_dev)
-   return -ENOMEM;
-   memcpy(dax_dev->res, res, sizeof(*res) * count);
-   dax_dev->num_resources = count;
-   kref_init(_dev->kref);
-   dax_dev->alive = true;
-   dax_dev->region = dax_region;
-   kref_get(_region->kref);
-
-   dax_dev->id = ida_simple_get(_region->ida, 0, 0, GFP_KERNEL);
-   if (dax_dev->id < 0) {
-   rc = dax_dev->id;
-   goto err_id;
-   }
-
-   minor = ida_simple_get(_minor_ida, 0, 0, GFP_KERNEL);
-   if (minor < 0) {
-   rc = minor;
-   goto err_minor;
-   }
-
-   dev_t = MKDEV(dax_major, minor);
-   dev = device_create_with_groups(dax_class, parent, dev_t, dax_dev,
-   dax_attribute_groups, "dax%d.%d", dax_region->id,
-   dax_dev->id);
-   if (IS_ERR(dev)) {
-   rc = PTR_ERR(dev);
-   goto err_create;
-   }
-   dax_dev->dev = dev;
-
-   rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_dev, dev);
-   if (rc)
-   return rc;
-
-   return 0;
-
- err_create:
-   ida_simple_remove(_minor_ida, minor);
- err_minor:
-   ida_simple_remove(_region->ida, dax_dev->id);
- err_id:
-   dax_dev_put(dax_dev);
-
-   return rc;
-}
-EXPORT_SYMBOL_GPL(devm_create_dax_dev);
-
-/* return an unmapped area aligned to the dax region specified alignment */
-static unsigned long dax_dev_get_unmapped_area(struct file *filp,
-   unsigned long addr, unsigned long len, unsigned long pgoff,
-   unsigned long flags)
-{
-   unsigned long off, off_end, off_align, len_align, addr_align, align;
-   struct dax_dev *dax_dev = filp ? filp->private_data : NULL;
-   struct dax_region *dax_region;
-
-   if (!dax_dev || addr)
-   goto out;
-
-   dax_region = dax_dev->region;
-   align = dax_region->align;
-   off = pgoff << PAGE_SHIFT;
-   off_end = off + len;
-   off_align = round_up(off, align);
-
-   if ((off_end <= off_align) || ((off_end - off_align) < align))
-   goto out;
-
-   len_align = len + align;
-   if ((off + len_align) < off)
-   goto out;
-
-   addr_align = current->mm->get_unmapped_area(filp, addr, len_align,
-   pgoff, flags);
-   if (!IS_ERR_VALUE(addr_align)) {
-   addr_align += (off - addr_align) & (align - 1);
-   return addr_align;
-   }
- out:
-   return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
-}
-
-static int __match_devt(struct device *dev, const void *data)
-{
-   const dev_t *devt = data;
-
-   return dev->devt == *devt;
-}
-
-static struct device *dax_dev_find(dev_t dev_t)
-{
-   return class_find_device(dax_class, NULL, _t, __match_devt);
-}
-
-static int dax_dev_open(struct inode *inode, struct file *filp)
-{
-   struct dax_dev *dax_dev = NULL;
-   struct device *dev;
-
-   dev = dax_dev_find(inode->i_rdev);
-   if (!dev)
-   return -ENXIO;
-
-   device_lock(dev);
-   dax_dev = dev_get_drvdata(dev);
-   

[PATCH 2/7] dax: reorder dax_fops function definitions

2016-08-15 Thread Dan Williams
In order to convert devm_create_dax_dev() to use cdev, it will need
access to dax_fops. Move dax_fops and related function definitions
before devm_create_dax_dev().

Signed-off-by: Dan Williams 
---
 drivers/dax/dax.c |  337 ++---
 1 file changed, 168 insertions(+), 169 deletions(-)

diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c
index 736c03830fd0..3774fc9709bb 100644
--- a/drivers/dax/dax.c
+++ b/drivers/dax/dax.c
@@ -145,175 +145,6 @@ static const struct attribute_group 
*dax_attribute_groups[] = {
NULL,
 };
 
-static void unregister_dax_dev(void *_dev)
-{
-   struct device *dev = _dev;
-   struct dax_dev *dax_dev = dev_get_drvdata(dev);
-   struct dax_region *dax_region = dax_dev->region;
-
-   dev_dbg(dev, "%s\n", __func__);
-
-   /*
-* Note, rcu is not protecting the liveness of dax_dev, rcu is
-* ensuring that any fault handlers that might have seen
-* dax_dev->alive == true, have completed.  Any fault handlers
-* that start after synchronize_rcu() has started will abort
-* upon seeing dax_dev->alive == false.
-*/
-   dax_dev->alive = false;
-   synchronize_rcu();
-
-   get_device(dev);
-   device_unregister(dev);
-   ida_simple_remove(_region->ida, dax_dev->id);
-   ida_simple_remove(_minor_ida, MINOR(dev->devt));
-   put_device(dev);
-   dax_dev_put(dax_dev);
-}
-
-int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res,
-   int count)
-{
-   struct device *parent = dax_region->dev;
-   struct dax_dev *dax_dev;
-   struct device *dev;
-   int rc, minor;
-   dev_t dev_t;
-
-   dax_dev = kzalloc(sizeof(*dax_dev) + sizeof(*res) * count, GFP_KERNEL);
-   if (!dax_dev)
-   return -ENOMEM;
-   memcpy(dax_dev->res, res, sizeof(*res) * count);
-   dax_dev->num_resources = count;
-   kref_init(_dev->kref);
-   dax_dev->alive = true;
-   dax_dev->region = dax_region;
-   kref_get(_region->kref);
-
-   dax_dev->id = ida_simple_get(_region->ida, 0, 0, GFP_KERNEL);
-   if (dax_dev->id < 0) {
-   rc = dax_dev->id;
-   goto err_id;
-   }
-
-   minor = ida_simple_get(_minor_ida, 0, 0, GFP_KERNEL);
-   if (minor < 0) {
-   rc = minor;
-   goto err_minor;
-   }
-
-   dev_t = MKDEV(dax_major, minor);
-   dev = device_create_with_groups(dax_class, parent, dev_t, dax_dev,
-   dax_attribute_groups, "dax%d.%d", dax_region->id,
-   dax_dev->id);
-   if (IS_ERR(dev)) {
-   rc = PTR_ERR(dev);
-   goto err_create;
-   }
-   dax_dev->dev = dev;
-
-   rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_dev, dev);
-   if (rc)
-   return rc;
-
-   return 0;
-
- err_create:
-   ida_simple_remove(_minor_ida, minor);
- err_minor:
-   ida_simple_remove(_region->ida, dax_dev->id);
- err_id:
-   dax_dev_put(dax_dev);
-
-   return rc;
-}
-EXPORT_SYMBOL_GPL(devm_create_dax_dev);
-
-/* return an unmapped area aligned to the dax region specified alignment */
-static unsigned long dax_dev_get_unmapped_area(struct file *filp,
-   unsigned long addr, unsigned long len, unsigned long pgoff,
-   unsigned long flags)
-{
-   unsigned long off, off_end, off_align, len_align, addr_align, align;
-   struct dax_dev *dax_dev = filp ? filp->private_data : NULL;
-   struct dax_region *dax_region;
-
-   if (!dax_dev || addr)
-   goto out;
-
-   dax_region = dax_dev->region;
-   align = dax_region->align;
-   off = pgoff << PAGE_SHIFT;
-   off_end = off + len;
-   off_align = round_up(off, align);
-
-   if ((off_end <= off_align) || ((off_end - off_align) < align))
-   goto out;
-
-   len_align = len + align;
-   if ((off + len_align) < off)
-   goto out;
-
-   addr_align = current->mm->get_unmapped_area(filp, addr, len_align,
-   pgoff, flags);
-   if (!IS_ERR_VALUE(addr_align)) {
-   addr_align += (off - addr_align) & (align - 1);
-   return addr_align;
-   }
- out:
-   return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
-}
-
-static int __match_devt(struct device *dev, const void *data)
-{
-   const dev_t *devt = data;
-
-   return dev->devt == *devt;
-}
-
-static struct device *dax_dev_find(dev_t dev_t)
-{
-   return class_find_device(dax_class, NULL, _t, __match_devt);
-}
-
-static int dax_dev_open(struct inode *inode, struct file *filp)
-{
-   struct dax_dev *dax_dev = NULL;
-   struct device *dev;
-
-   dev = dax_dev_find(inode->i_rdev);
-   if (!dev)
-   return -ENXIO;
-
-   device_lock(dev);
-   dax_dev = dev_get_drvdata(dev);
-   if (dax_dev) {
-