Merge patch series "bootstd: rauc: Small fixes"

Martin Schwan <m.schwan@phytec.de> says:

Fix some small bugs that I noticed during testing.

Link: https://lore.kernel.org/r/20250714-wip-bootmeth-rauc-fixes-v1-0-69d2b80e7606@phytec.de
This commit is contained in:
Tom Rini
2025-07-22 13:53:23 -06:00

View File

@@ -79,18 +79,17 @@ static int distro_rauc_check(struct udevice *dev, struct bootflow_iter *iter)
return 0;
}
static int distro_rauc_scan_boot_part(struct bootflow *bflow)
static int distro_rauc_scan_parts(struct bootflow *bflow)
{
struct blk_desc *desc;
struct distro_rauc_priv *priv;
char *boot_order;
const char **boot_order_list;
bool exists;
int ret;
int i;
int j;
desc = dev_get_uclass_plat(bflow->blk);
if (bflow->blk)
desc = dev_get_uclass_plat(bflow->blk);
priv = bflow->bootmeth_priv;
if (!priv || !priv->slots)
@@ -99,20 +98,21 @@ static int distro_rauc_scan_boot_part(struct bootflow *bflow)
boot_order = env_get("BOOT_ORDER");
boot_order_list = str_to_list(boot_order);
for (i = 0; boot_order_list[i]; i++) {
exists = false;
for (j = 0; script_names[j]; j++) {
const struct distro_rauc_slot *slot;
const struct distro_rauc_slot *slot;
slot = get_slot(priv, boot_order_list[i]);
if (!slot)
return log_msg_ret("env", -ENOENT);
slot = get_slot(priv, boot_order_list[i]);
if (!slot)
return log_msg_ret("slot", -EINVAL);
if (desc) {
ret = fs_set_blk_dev_with_part(desc, slot->boot_part);
if (ret)
return log_msg_ret("blk", ret);
exists |= fs_exists(script_names[j]);
return log_msg_ret("part", ret);
fs_close();
ret = fs_set_blk_dev_with_part(desc, slot->root_part);
if (ret)
return log_msg_ret("part", ret);
fs_close();
}
if (!exists)
return log_msg_ret("fs", -ENOENT);
}
str_free_list(boot_order_list);
@@ -168,20 +168,24 @@ static int distro_rauc_read_bootflow(struct udevice *dev, struct bootflow *bflow
(slot = strsep(&boot_order_copy, " "));
i++) {
struct distro_rauc_slot *s;
struct distro_rauc_slot **new_slots;
s = calloc(1, sizeof(struct distro_rauc_slot));
s->name = strdup(slot);
s->boot_part = simple_strtoul(strsep(&parts, ","), NULL, 10);
s->root_part = simple_strtoul(strsep(&parts, ","), NULL, 10);
priv->slots = realloc(priv->slots, (i + 1) *
sizeof(struct distro_rauc_slot));
new_slots = realloc(priv->slots, (i + 1) *
sizeof(struct distro_rauc_slot));
if (!new_slots)
return log_msg_ret("buf", -ENOMEM);
priv->slots = new_slots;
priv->slots[i - 1] = s;
priv->slots[i]->name = NULL;
priv->slots[i] = NULL;
}
bflow->bootmeth_priv = priv;
ret = distro_rauc_scan_boot_part(bflow);
ret = distro_rauc_scan_parts(bflow);
if (ret < 0) {
for (i = 0; priv->slots[i]->name; i++) {
free(priv->slots[i]->name);