links = krealloc(priv->card.dai_link,
                         num_links * sizeof(*priv->card.dai_link),
                         GFP_KERNEL | __GFP_ZERO);
+       if (!links)
+               goto err_links;
+
        ldata = krealloc(priv->link_data,
                         num_links * sizeof(*priv->link_data),
                         GFP_KERNEL | __GFP_ZERO);
-
-       if (!links || !ldata) {
-               dev_err(priv->card.dev, "failed to allocate links\n");
-               return -ENOMEM;
-       }
+       if (!ldata)
+               goto err_ldata;
 
        priv->card.dai_link = links;
        priv->link_data = ldata;
        priv->card.num_links = num_links;
        return 0;
+
+err_ldata:
+       kfree(links);
+err_links:
+       dev_err(priv->card.dev, "failed to allocate links\n");
+       return -ENOMEM;
+
 }
 EXPORT_SYMBOL_GPL(meson_card_reallocate_links);