imamnurby/smpl_train_seed8 huggingface dataset:
--- initial
+++ final
@@ -1,34 +1,32 @@
 static int adis16480_probe(struct spi_device *spi) {
   const struct spi_device_id *id = spi_get_device_id(spi);
   struct iio_dev *indio_dev;
   struct adis16480 *st;
   int ret;
-  indio_dev = iio_device_alloc(sizeof(*st));
+  indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
   if (indio_dev == NULL) return -ENOMEM;
   spi_set_drvdata(spi, indio_dev);
   st = iio_priv(indio_dev);
   st->chip_info = &adis16480_chip_info[id->driver_data];
   indio_dev->dev.parent = &spi->dev;
   indio_dev->name = spi_get_device_id(spi)->name;
   indio_dev->channels = st->chip_info->channels;
   indio_dev->num_channels = st->chip_info->num_channels;
   indio_dev->info = &adis16480_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   ret = adis_init(&st->adis, indio_dev, spi, &adis16480_data);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = adis_setup_buffer_and_trigger(&st->adis, indio_dev, NULL);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = adis16480_initial_setup(indio_dev);
   if (ret) goto error_cleanup_buffer;
   ret = iio_device_register(indio_dev);
   if (ret) goto error_stop_device;
   adis16480_debugfs_init(indio_dev);
   return 0;
 error_stop_device:
   adis16480_stop_device(indio_dev);
 error_cleanup_buffer:
   adis_cleanup_buffer_and_trigger(&st->adis, indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,x,f;
type T;
@@

f(T x) {
	...
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(&x->dev, e1);
        if (e == NULL) {
	       ...
               return e2;
        }
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
        return ret;
)
}
--- initial
+++ final
@@ -1,35 +1,33 @@
 static int adis16400_probe(struct spi_device *spi) {
   struct adis16400_state *st;
   struct iio_dev *indio_dev;
   int ret;
-  indio_dev = iio_device_alloc(sizeof(*st));
+  indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
   if (indio_dev == NULL) return -ENOMEM;
   st = iio_priv(indio_dev);
   /* this is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   /* setup the industrialio driver allocated elements */
   st->variant = &adis16400_chips[spi_get_device_id(spi)->driver_data];
   indio_dev->dev.parent = &spi->dev;
   indio_dev->name = spi_get_device_id(spi)->name;
   indio_dev->channels = st->variant->channels;
   indio_dev->num_channels = st->variant->num_channels;
   indio_dev->info = &adis16400_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   if (!(st->variant->flags & ADIS16400_NO_BURST)) indio_dev->available_scan_masks = adis16400_burst_scan_mask;
   ret = adis_init(&st->adis, indio_dev, spi, &adis16400_data);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = adis_setup_buffer_and_trigger(&st->adis, indio_dev, adis16400_trigger_handler);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   /* Get the device into a sane initial state */
   ret = adis16400_initial_setup(indio_dev);
   if (ret) goto error_cleanup_buffer;
   ret = iio_device_register(indio_dev);
   if (ret) goto error_cleanup_buffer;
   adis16400_debugfs_init(indio_dev);
   return 0;
 error_cleanup_buffer:
   adis_cleanup_buffer_and_trigger(&st->adis, indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,x,f;
type T;
@@

f(T x) {
	...
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(&x->dev, e1);
        if (e == NULL) {
	       ...
               return e2;
        }
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
        return ret;
)
}
--- initial
+++ final
@@ -1,20 +1,14 @@
 static int st_magn_spi_probe(struct spi_device *spi) {
   struct iio_dev *indio_dev;
   struct st_sensor_data *mdata;
   int err;
-  indio_dev = iio_device_alloc(sizeof(*mdata));
-  if (indio_dev == NULL) {
-    err = -ENOMEM;
-    goto iio_device_alloc_error;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*mdata));
+  if (indio_dev == NULL) return -ENOMEM;
   mdata = iio_priv(indio_dev);
   mdata->dev = &spi->dev;
   st_sensors_spi_configure(indio_dev, spi, mdata);
   err = st_magn_common_probe(indio_dev, NULL);
-  if (err < 0) goto st_magn_common_probe_error;
+  if (err < 0) return err;
   return 0;
-st_magn_common_probe_error:
-  iio_device_free(indio_dev);
-iio_device_alloc_error:
   return err;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,30 +1,24 @@
 static int adis16060_r_probe(struct spi_device *spi) {
   int ret;
   struct adis16060_state *st;
   struct iio_dev *indio_dev;
   /* setup the industrialio driver allocated elements */
-  indio_dev = iio_device_alloc(sizeof(*st));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+  if (indio_dev == NULL) return -ENOMEM;
   /* this is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   st = iio_priv(indio_dev);
   st->us_r = spi;
   mutex_init(&st->buf_lock);
   indio_dev->name = spi->dev.driver->name;
   indio_dev->dev.parent = &spi->dev;
   indio_dev->info = &adis16060_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   indio_dev->channels = adis16060_channels;
   indio_dev->num_channels = ARRAY_SIZE(adis16060_channels);
   ret = iio_device_register(indio_dev);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   adis16060_iio_dev = indio_dev;
   return 0;
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,29 +1,23 @@
 static int adis16130_probe(struct spi_device *spi) {
   int ret;
   struct adis16130_state *st;
   struct iio_dev *indio_dev;
   /* setup the industrialio driver allocated elements */
-  indio_dev = iio_device_alloc(sizeof(*st));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+  if (indio_dev == NULL) return -ENOMEM;
   st = iio_priv(indio_dev);
   /* this is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   st->us = spi;
   mutex_init(&st->buf_lock);
   indio_dev->name = spi->dev.driver->name;
   indio_dev->channels = adis16130_channels;
   indio_dev->num_channels = ARRAY_SIZE(adis16130_channels);
   indio_dev->dev.parent = &spi->dev;
   indio_dev->info = &adis16130_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   ret = iio_device_register(indio_dev);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   return 0;
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,34 +1,28 @@
 static int adxrs450_probe(struct spi_device *spi) {
   int ret;
   struct adxrs450_state *st;
   struct iio_dev *indio_dev;
   /* setup the industrialio driver allocated elements */
-  indio_dev = iio_device_alloc(sizeof(*st));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+  if (indio_dev == NULL) return -ENOMEM;
   st = iio_priv(indio_dev);
   st->us = spi;
   mutex_init(&st->buf_lock);
   /* This is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   indio_dev->dev.parent = &spi->dev;
   indio_dev->info = &adxrs450_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   indio_dev->channels = adxrs450_channels[spi_get_device_id(spi)->driver_data];
   indio_dev->num_channels = ARRAY_SIZE(adxrs450_channels);
   indio_dev->name = spi->dev.driver->name;
   ret = iio_device_register(indio_dev);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   /* Get the device into a sane initial state */
   ret = adxrs450_initial_setup(indio_dev);
   if (ret) goto error_initial;
   return 0;
 error_initial:
   iio_device_unregister(indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,20 +1,14 @@
 static int st_gyro_spi_probe(struct spi_device *spi) {
   struct iio_dev *indio_dev;
   struct st_sensor_data *gdata;
   int err;
-  indio_dev = iio_device_alloc(sizeof(*gdata));
-  if (indio_dev == NULL) {
-    err = -ENOMEM;
-    goto iio_device_alloc_error;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*gdata));
+  if (indio_dev == NULL) return -ENOMEM;
   gdata = iio_priv(indio_dev);
   gdata->dev = &spi->dev;
   st_sensors_spi_configure(indio_dev, spi, gdata);
   err = st_gyro_common_probe(indio_dev, (struct st_sensors_platform_data *)&gyro_pdata);
-  if (err < 0) goto st_gyro_common_probe_error;
+  if (err < 0) return err;
   return 0;
-st_gyro_common_probe_error:
-  iio_device_free(indio_dev);
-iio_device_alloc_error:
   return err;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,36 +1,30 @@
 static int adis16260_probe(struct spi_device *spi) {
   struct iio_dev *indio_dev;
   struct adis *adis;
   int ret;
   /* setup the industrialio driver allocated elements */
-  indio_dev = iio_device_alloc(sizeof(*adis));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*adis));
+  if (indio_dev == NULL) return -ENOMEM;
   adis = iio_priv(indio_dev);
   /* this is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   indio_dev->name = spi_get_device_id(spi)->name;
   indio_dev->dev.parent = &spi->dev;
   indio_dev->info = &adis16260_info;
   indio_dev->channels = adis16260_channels;
   indio_dev->num_channels = ARRAY_SIZE(adis16260_channels);
   indio_dev->modes = INDIO_DIRECT_MODE;
   ret = adis_init(adis, indio_dev, spi, &adis16260_data);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = adis_setup_buffer_and_trigger(adis, indio_dev, NULL);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   /* Get the device into a sane initial state */
   ret = adis_initial_startup(adis);
   if (ret) goto error_cleanup_buffer_trigger;
   ret = iio_device_register(indio_dev);
   if (ret) goto error_cleanup_buffer_trigger;
   return 0;
 error_cleanup_buffer_trigger:
   adis_cleanup_buffer_and_trigger(adis, indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,34 +1,32 @@
 static int adis16136_probe(struct spi_device *spi) {
   const struct spi_device_id *id = spi_get_device_id(spi);
   struct adis16136 *adis16136;
   struct iio_dev *indio_dev;
   int ret;
-  indio_dev = iio_device_alloc(sizeof(*adis16136));
+  indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adis16136));
   if (indio_dev == NULL) return -ENOMEM;
   spi_set_drvdata(spi, indio_dev);
   adis16136 = iio_priv(indio_dev);
   adis16136->chip_info = &adis16136_chip_info[id->driver_data];
   indio_dev->dev.parent = &spi->dev;
   indio_dev->name = spi_get_device_id(spi)->name;
   indio_dev->channels = adis16136_channels;
   indio_dev->num_channels = ARRAY_SIZE(adis16136_channels);
   indio_dev->info = &adis16136_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   ret = adis_init(&adis16136->adis, indio_dev, spi, &adis16136_data);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = adis_setup_buffer_and_trigger(&adis16136->adis, indio_dev, NULL);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = adis16136_initial_setup(indio_dev);
   if (ret) goto error_cleanup_buffer;
   ret = iio_device_register(indio_dev);
   if (ret) goto error_stop_device;
   adis16136_debugfs_init(indio_dev);
   return 0;
 error_stop_device:
   adis16136_stop_device(indio_dev);
 error_cleanup_buffer:
   adis_cleanup_buffer_and_trigger(&adis16136->adis, indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,x,f;
type T;
@@

f(T x) {
	...
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(&x->dev, e1);
        if (e == NULL) {
	       ...
               return e2;
        }
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
        return ret;
)
}
--- initial
+++ final
@@ -1,31 +1,25 @@
 static int adis16080_probe(struct spi_device *spi) {
   const struct spi_device_id *id = spi_get_device_id(spi);
   int ret;
   struct adis16080_state *st;
   struct iio_dev *indio_dev;
   /* setup the industrialio driver allocated elements */
-  indio_dev = iio_device_alloc(sizeof(*st));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+  if (indio_dev == NULL) return -ENOMEM;
   st = iio_priv(indio_dev);
   /* this is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   /* Allocate the comms buffers */
   st->us = spi;
   st->info = &adis16080_chip_info[id->driver_data];
   indio_dev->name = spi->dev.driver->name;
   indio_dev->channels = adis16080_channels;
   indio_dev->num_channels = ARRAY_SIZE(adis16080_channels);
   indio_dev->dev.parent = &spi->dev;
   indio_dev->info = &adis16080_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   ret = iio_device_register(indio_dev);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   return 0;
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,36 +1,34 @@
 static int ad5755_probe(struct spi_device *spi) {
   enum ad5755_type type = spi_get_device_id(spi)->driver_data;
   const struct ad5755_platform_data *pdata = dev_get_platdata(&spi->dev);
   struct iio_dev *indio_dev;
   struct ad5755_state *st;
   int ret;
-  indio_dev = iio_device_alloc(sizeof(*st));
+  indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
   if (indio_dev == NULL) {
     dev_err(&spi->dev, "Failed to allocate iio device\n");
     return -ENOMEM;
   }
   st = iio_priv(indio_dev);
   spi_set_drvdata(spi, indio_dev);
   st->chip_info = &ad5755_chip_info_tbl[type];
   st->spi = spi;
   st->pwr_down = 0xf;
   indio_dev->dev.parent = &spi->dev;
   indio_dev->name = spi_get_device_id(spi)->name;
   indio_dev->info = &ad5755_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   indio_dev->num_channels = AD5755_NUM_CHANNELS;
   if (!pdata) pdata = &ad5755_default_pdata;
   ret = ad5755_init_channels(indio_dev, pdata);
-  if (ret) goto error_free;
+  if (ret) return ret;
   ret = ad5755_setup_pdata(indio_dev, pdata);
-  if (ret) goto error_free;
+  if (ret) return ret;
   ret = iio_device_register(indio_dev);
   if (ret) {
     dev_err(&spi->dev, "Failed to register iio device: %d\n", ret);
-    goto error_free;
+    return ret;
   }
   return 0;
-error_free:
-  iio_device_free(indio_dev);
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,x,f;
type T;
@@

f(T x) {
	...
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(&x->dev, e1);
        if (e == NULL) {
	       ...
               return e2;
        }
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
        return ret;
)
}
--- initial
+++ final
@@ -1,53 +1,47 @@
 static int sca3000_probe(struct spi_device *spi) {
   int ret;
   struct sca3000_state *st;
   struct iio_dev *indio_dev;
-  indio_dev = iio_device_alloc(sizeof(*st));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+  if (indio_dev == NULL) return -ENOMEM;
   st = iio_priv(indio_dev);
   spi_set_drvdata(spi, indio_dev);
   st->us = spi;
   mutex_init(&st->lock);
   st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi)->driver_data];
   indio_dev->dev.parent = &spi->dev;
   indio_dev->name = spi_get_device_id(spi)->name;
   if (st->info->temp_output)
     indio_dev->info = &sca3000_info_with_temp;
   else {
     indio_dev->info = &sca3000_info;
     indio_dev->channels = sca3000_channels;
     indio_dev->num_channels = ARRAY_SIZE(sca3000_channels);
   }
   indio_dev->modes = INDIO_DIRECT_MODE;
   sca3000_configure_ring(indio_dev);
   ret = iio_device_register(indio_dev);
-  if (ret < 0) goto error_free_dev;
+  if (ret < 0) return ret;
   ret = iio_buffer_register(indio_dev, sca3000_channels, ARRAY_SIZE(sca3000_channels));
   if (ret < 0) goto error_unregister_dev;
   if (indio_dev->buffer) {
     iio_scan_mask_set(indio_dev, indio_dev->buffer, 0);
     iio_scan_mask_set(indio_dev, indio_dev->buffer, 1);
     iio_scan_mask_set(indio_dev, indio_dev->buffer, 2);
   }
   if (spi->irq) {
     ret = request_threaded_irq(spi->irq, NULL, &sca3000_event_handler, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "sca3000", indio_dev);
     if (ret) goto error_unregister_ring;
   }
   sca3000_register_ring_funcs(indio_dev);
   ret = sca3000_clean_setup(st);
   if (ret) goto error_free_irq;
   return 0;
 error_free_irq:
   if (spi->irq) free_irq(spi->irq, indio_dev);
 error_unregister_ring:
   iio_buffer_unregister(indio_dev);
 error_unregister_dev:
   iio_device_unregister(indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}
--- initial
+++ final
@@ -1,46 +1,40 @@
 static int adis16220_probe(struct spi_device *spi) {
   int ret;
   struct adis16220_state *st;
   struct iio_dev *indio_dev;
   /* setup the industrialio driver allocated elements */
-  indio_dev = iio_device_alloc(sizeof(*st));
-  if (indio_dev == NULL) {
-    ret = -ENOMEM;
-    goto error_ret;
-  }
+  indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+  if (indio_dev == NULL) return -ENOMEM;
   st = iio_priv(indio_dev);
   /* this is only used for removal purposes */
   spi_set_drvdata(spi, indio_dev);
   indio_dev->name = spi->dev.driver->name;
   indio_dev->dev.parent = &spi->dev;
   indio_dev->info = &adis16220_info;
   indio_dev->modes = INDIO_DIRECT_MODE;
   indio_dev->channels = adis16220_channels;
   indio_dev->num_channels = ARRAY_SIZE(adis16220_channels);
   ret = iio_device_register(indio_dev);
-  if (ret) goto error_free_dev;
+  if (ret) return ret;
   ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &accel_bin);
   if (ret) goto error_unregister_dev;
   ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc1_bin);
   if (ret) goto error_rm_accel_bin;
   ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc2_bin);
   if (ret) goto error_rm_adc1_bin;
   ret = adis_init(&st->adis, indio_dev, spi, &adis16220_data);
   if (ret) goto error_rm_adc2_bin;
   /* Get the device into a sane initial state */
   ret = adis_initial_startup(&st->adis);
   if (ret) goto error_rm_adc2_bin;
   return 0;
 error_rm_adc2_bin:
   sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
 error_rm_adc1_bin:
   sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
 error_rm_accel_bin:
   sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
 error_unregister_dev:
   iio_device_unregister(indio_dev);
-error_free_dev:
-  iio_device_free(indio_dev);
-error_ret:
   return ret;
 }<sep>@@
expression e,e1,e2,ret;
identifier l1,l2,x,f;
type T;
@@
f(T x) {
	... when != l2
(
-       e = iio_device_alloc(e1);
+       e = devm_iio_device_alloc(dev, e1);
        if (e == NULL)
(
-	{
-               ret = e2;
-               goto l2;
+               return e2;
-       }
|
	{
		...
-               ret = e2;
		...
-               goto l2;
+               return e2;
       }
)
<...
-	goto l1;
+	return ret;
...>
&
e = iio_device_alloc(e1);
... when exists
-l1:
-       iio_device_free(e);
-l2:
        return ret;
)
}