We now have three places within the same file doing the same operation
of freeing this pointer and setting it anew. A helper make this
arguably easier to read, so add one.

Signed-off-by: Ahmad Fatoum <a.fat...@pengutronix.de>
---
v1 -> v2:
 - no change
---
 drivers/base/dd.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index e2cf3b29123e..4201baa1cc13 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -69,6 +69,12 @@ static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
  */
 static bool defer_all_probes;
 
+static void __device_set_deferred_probe_reason(const struct device *dev, char 
*reason)
+{
+       kfree(dev->p->deferred_probe_reason);
+       dev->p->deferred_probe_reason = reason;
+}
+
 /*
  * deferred_probe_work_func() - Retry probing devices in the active list.
  */
@@ -97,8 +103,7 @@ static void deferred_probe_work_func(struct work_struct 
*work)
 
                get_device(dev);
 
-               kfree(dev->p->deferred_probe_reason);
-               dev->p->deferred_probe_reason = NULL;
+               __device_set_deferred_probe_reason(dev, NULL);
 
                /*
                 * Drop the mutex while probing each device; the probe path may
@@ -140,8 +145,7 @@ void driver_deferred_probe_del(struct device *dev)
        if (!list_empty(&dev->p->deferred_probe)) {
                dev_dbg(dev, "Removed from deferred list\n");
                list_del_init(&dev->p->deferred_probe);
-               kfree(dev->p->deferred_probe_reason);
-               dev->p->deferred_probe_reason = NULL;
+               __device_set_deferred_probe_reason(dev, NULL);
        }
        mutex_unlock(&deferred_probe_mutex);
 }
@@ -220,11 +224,12 @@ void device_unblock_probing(void)
 void device_set_deferred_probe_reason(const struct device *dev, struct 
va_format *vaf)
 {
        const char *drv = dev_driver_string(dev);
+       char *reason;
 
        mutex_lock(&deferred_probe_mutex);
 
-       kfree(dev->p->deferred_probe_reason);
-       dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, 
vaf);
+       reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
+       __device_set_deferred_probe_reason(dev, reason);
 
        mutex_unlock(&deferred_probe_mutex);
 }
-- 
2.29.2

Reply via email to