diff --git a/doc/releases/release-notes-3.3.rst b/doc/releases/release-notes-3.3.rst index 5e9490732aa..a9a54ca9343 100644 --- a/doc/releases/release-notes-3.3.rst +++ b/doc/releases/release-notes-3.3.rst @@ -432,6 +432,11 @@ Libraries / Subsystems * The ``lwm2m_senml_cbor_*`` files have been regenerated using zcbor 0.6.0. +* Settings + + * Replaced all :c:func:`k_panic` invocations within settings backend + initialization with returning / propagating error codes. + HALs **** diff --git a/subsys/settings/src/settings_fcb.c b/subsys/settings/src/settings_fcb.c index ddb33f6d939..cb168fa7464 100644 --- a/subsys/settings/src/settings_fcb.c +++ b/subsys/settings/src/settings_fcb.c @@ -415,39 +415,35 @@ int settings_backend_init(void) rc = flash_area_get_sectors(settings_fcb_get_flash_area(), &cnt, settings_fcb_area); - if (rc == -ENODEV) { + if (rc != 0 && rc != -ENOMEM) { return rc; - } else if (rc != 0 && rc != -ENOMEM) { - k_panic(); } config_init_settings_fcb.cf_fcb.f_sector_cnt = cnt; rc = settings_fcb_src(&config_init_settings_fcb); - if (rc != 0) { rc = flash_area_open(settings_fcb_get_flash_area(), &fap); - - if (rc == 0) { - rc = flash_area_erase(fap, 0, fap->fa_size); - flash_area_close(fap); + if (rc != 0) { + return rc; } + rc = flash_area_erase(fap, 0, fap->fa_size); + flash_area_close(fap); + if (rc != 0) { - k_panic(); - } else { - rc = settings_fcb_src(&config_init_settings_fcb); + return rc; } - } - if (rc != 0) { - k_panic(); + rc = settings_fcb_src(&config_init_settings_fcb); + if (rc != 0) { + return rc; + } } rc = settings_fcb_dst(&config_init_settings_fcb); - if (rc != 0) { - k_panic(); + return rc; } settings_mount_fcb_backend(&config_init_settings_fcb); diff --git a/subsys/settings/src/settings_file.c b/subsys/settings/src/settings_file.c index 6661fb78e04..e02194f80bd 100644 --- a/subsys/settings/src/settings_file.c +++ b/subsys/settings/src/settings_file.c @@ -531,12 +531,12 @@ int settings_backend_init(void) rc = settings_file_src(&config_init_settings_file); if (rc) { - k_panic(); + return rc; } rc = settings_file_dst(&config_init_settings_file); if (rc) { - k_panic(); + return rc; } settings_mount_file_backend(&config_init_settings_file); diff --git a/subsys/settings/src/settings_init.c b/subsys/settings/src/settings_init.c index f62895b4bfb..0950207a21f 100644 --- a/subsys/settings/src/settings_init.c +++ b/subsys/settings/src/settings_init.c @@ -33,7 +33,7 @@ int settings_subsys_init(void) settings_init(); - err = settings_backend_init(); /* func rises kernel panic once error */ + err = settings_backend_init(); if (!err) { settings_subsys_initialized = true; diff --git a/subsys/settings/src/settings_nvs.c b/subsys/settings/src/settings_nvs.c index 0494f30afec..8e5bfbf3767 100644 --- a/subsys/settings/src/settings_nvs.c +++ b/subsys/settings/src/settings_nvs.c @@ -359,10 +359,8 @@ int settings_backend_init(void) rc = flash_area_get_sectors(SETTINGS_PARTITION, §or_cnt, &hw_flash_sector); - if (rc == -ENODEV) { + if (rc != 0 && rc != -ENOMEM) { return rc; - } else if (rc != 0 && rc != -ENOMEM) { - k_panic(); } nvs_sector_size = CONFIG_SETTINGS_NVS_SECTOR_SIZE_MULT *