As barebox' state implementation changed since we harmonized the code bases the last time lets adjust them again. While at it clear away the unused build time options '--disable-logging' and '--enable-debug'. Ulrich Ölmann (13): state: Fix lseek error check in state_backend_bucket_direct_read() state: Fix lseek error check in state_backend_bucket_direct_write() state: Fix lseek error check in state_mtd_peb_read() state: Fix lseek error check in state_mtd_peb_write() state: check length state: backend_bucket_circular: mark block as bad if mtd_peb_torture() failed state: drop unused code and declarations for non-existing functions state: keep backward compatibility state: backend_storage: harmonize code with barebox state: harmonize code with barebox state: harmonize code with barebox configure: remove build time option '--disable-logging' configure: remove build time option '--enable-debug' configure.ac | 38 +++++++------- src/barebox-state.c | 2 + src/barebox-state/backend_bucket_circular.c | 16 +++--- src/barebox-state/backend_bucket_direct.c | 58 +++++++++++++-------- src/barebox-state/backend_storage.c | 6 ++- src/barebox-state/state.c | 7 --- src/state.h | 43 ++++++++++++--- 7 files changed, 105 insertions(+), 65 deletions(-) -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit 219b954a11e82afbbd7b6ef13d8c5ba94a5b0ff3 | Author: Andrey Smirnov <andrew.smirnov@gmail.com> | Date: Wed Mar 6 23:49:21 2019 -0800 | | state: Fix lseek error check in state_backend_bucket_direct_read() | | Don't use 'int' to store lseek()'s return value to avoid problems with | large seek offsets. While at it, make sure to populate return error | code from 'errno'. | | Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/backend_bucket_direct.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/barebox-state/backend_bucket_direct.c b/src/barebox-state/backend_bucket_direct.c index dc00de0647a1..efa13ce0948a 100644 --- a/src/barebox-state/backend_bucket_direct.c +++ b/src/barebox-state/backend_bucket_direct.c @@ -56,10 +56,9 @@ static int state_backend_bucket_direct_read(struct state_backend_storage_bucket void *buf; int ret; - ret = lseek(direct->fd, direct->offset, SEEK_SET); - if (ret < 0) { - dev_err(direct->dev, "Failed to seek file, %d\n", ret); - return ret; + if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) { + dev_err(direct->dev, "Failed to seek file, %d\n", -errno); + return -errno; } ret = read_full(direct->fd, &meta, sizeof(meta)); if (ret < 0) { @@ -72,10 +71,11 @@ static int state_backend_bucket_direct_read(struct state_backend_storage_bucket if (meta.magic != ~0 && !!meta.magic) bucket->wrong_magic = 1; read_len = direct->max_size; - ret = lseek(direct->fd, direct->offset, SEEK_SET); - if (ret < 0) { - dev_err(direct->dev, "Failed to seek file, %d\n", ret); - return ret; + if (lseek(direct->fd, direct->offset, SEEK_SET) != + direct->offset) { + dev_err(direct->dev, "Failed to seek file, %d\n", + -errno); + return -errno; } } -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit ec25ecfbcb47cb83b310b9e177a5b65de3781dec | Author: Andrey Smirnov <andrew.smirnov@gmail.com> | Date: Wed Mar 6 23:49:22 2019 -0800 | | state: Fix lseek error check in state_backend_bucket_direct_write() | | Don't use 'int' to store lseek()'s return value to avoid problems with | large seek offsets. While at it, make sure to populate return error | code from 'errno'. | | Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/backend_bucket_direct.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/barebox-state/backend_bucket_direct.c b/src/barebox-state/backend_bucket_direct.c index efa13ce0948a..7e83578edb0d 100644 --- a/src/barebox-state/backend_bucket_direct.c +++ b/src/barebox-state/backend_bucket_direct.c @@ -108,10 +108,9 @@ static int state_backend_bucket_direct_write(struct state_backend_storage_bucket if (len > direct->max_size - sizeof(meta)) return -E2BIG; - ret = lseek(direct->fd, direct->offset, SEEK_SET); - if (ret < 0) { - dev_err(direct->dev, "Failed to seek file, %d\n", ret); - return ret; + if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) { + dev_err(direct->dev, "Failed to seek file, %d\n", -errno); + return -errno; } meta.magic = direct_magic; -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit 8a6a9fbcecffab1b076edfad94d4f32bb2cc9435 | Author: Andrey Smirnov <andrew.smirnov@gmail.com> | Date: Wed Mar 6 23:49:23 2019 -0800 | | state: Fix lseek error check in state_mtd_peb_read() | | Don't use 'int' to store lseek()'s return value to avoid problems with | large seek offsets. While at it, make sure to populate return error | code from 'errno'. | | Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/backend_bucket_circular.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/barebox-state/backend_bucket_circular.c b/src/barebox-state/backend_bucket_circular.c index f665c3b4539a..8cc7514d5f55 100644 --- a/src/barebox-state/backend_bucket_circular.c +++ b/src/barebox-state/backend_bucket_circular.c @@ -162,11 +162,10 @@ static int state_mtd_peb_read(struct state_backend_storage_bucket_circular *circ offset += (off_t)circ->eraseblock * circ->mtd->erasesize; - ret = lseek(circ->fd, offset, SEEK_SET); - if (ret < 0) { + if (lseek(circ->fd, offset, SEEK_SET) != offset) { dev_err(circ->dev, "Failed to set circular read position to %lld, %d\n", - (long long) offset, ret); - return ret; + (long long) offset, -errno); + return -errno; } dev_dbg(circ->dev, "Read state from %lld length %d\n", (long long) offset, -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit 5eadd11d4795afb6b521b5c3249c6341c0be7117 | Author: Andrey Smirnov <andrew.smirnov@gmail.com> | Date: Wed Mar 6 23:49:24 2019 -0800 | | state: Fix lseek error check in state_mtd_peb_write() | | Don't use 'int' to store lseek()'s return value to avoid problems with | large seek offsets. While at it, make sure to populate return error | code from 'errno'. | | Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/backend_bucket_circular.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/barebox-state/backend_bucket_circular.c b/src/barebox-state/backend_bucket_circular.c index 8cc7514d5f55..b2577bcd5ee3 100644 --- a/src/barebox-state/backend_bucket_circular.c +++ b/src/barebox-state/backend_bucket_circular.c @@ -190,11 +190,10 @@ static int state_mtd_peb_write(struct state_backend_storage_bucket_circular *cir offset += circ->eraseblock * circ->mtd->erasesize; - ret = lseek(circ->fd, offset, SEEK_SET); - if (ret < 0) { + if (lseek(circ->fd, offset, SEEK_SET) != offset) { dev_err(circ->dev, "Failed to set position for circular write %lld, %d\n", - (long long) offset, ret); - return ret; + (long long) offset, -errno); + return -errno; } ret = write_full(circ->fd, buf, len); -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit 9271182f3b32d41a83ca802a63580c0c4fef9b9e | Author: Jan Remmet <j.remmet@phytec.de> | Date: Thu May 23 09:49:00 2019 +0200 | | common: state: check length | | if written_length is read from a partial written bucket it may be to | big and xmalloc will panic barebox. | | Check if the value is sane. Make read_len unsigned to avoid negative | values. | | Signed-off-by: Jan Remmet <j.remmet@phytec.de> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/backend_bucket_direct.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/barebox-state/backend_bucket_direct.c b/src/barebox-state/backend_bucket_direct.c index 7e83578edb0d..5b5506be002e 100644 --- a/src/barebox-state/backend_bucket_direct.c +++ b/src/barebox-state/backend_bucket_direct.c @@ -52,7 +52,7 @@ static int state_backend_bucket_direct_read(struct state_backend_storage_bucket struct state_backend_storage_bucket_direct *direct = get_bucket_direct(bucket); struct state_backend_storage_bucket_direct_meta meta; - ssize_t read_len; + uint32_t read_len; void *buf; int ret; @@ -67,6 +67,11 @@ static int state_backend_bucket_direct_read(struct state_backend_storage_bucket } if (meta.magic == direct_magic) { read_len = meta.written_length; + if (read_len > direct->max_size) { + dev_err(direct->dev, "Wrong length in meta data\n"); + return -EINVAL; + + } } else { if (meta.magic != ~0 && !!meta.magic) bucket->wrong_magic = 1; -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit 3b68dbcbfce830bdf91f50943e5ee41463717abf | Author: Sascha Hauer <s.hauer@pengutronix.de> | Date: Mon Jul 15 15:28:55 2019 +0200 | | mtd: peb: Do not mark as bad in mtd_peb_torture() | | Both the Kernel and mtd-utils have peb torture functions and both | do not mark the block as bad automatically. Instead, the caller | must mark the block as bad when -EIO is returned from the torture | function. Do the same in barebox. This is necessary as the UBI code | otherwise may mark a block as bad twice: Once indirectly in | mtd_peb_torture() and then directly afterwards. | | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/backend_bucket_circular.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/barebox-state/backend_bucket_circular.c b/src/barebox-state/backend_bucket_circular.c index b2577bcd5ee3..735510e0d36b 100644 --- a/src/barebox-state/backend_bucket_circular.c +++ b/src/barebox-state/backend_bucket_circular.c @@ -95,6 +95,7 @@ static int state_mtd_peb_read(struct state_backend_storage_bucket_circular *circ if (ret == -EBADMSG) { ret = mtd_peb_torture(circ->mtd, circ->eraseblock); if (ret == -EIO) { + mtd_peb_mark_bad(circ->mtd, circ->eraseblock); dev_err(circ->dev, "Tortured eraseblock failed and is marked bad now, PEB %u\n", circ->eraseblock); return -EIO; @@ -132,6 +133,7 @@ static int state_mtd_peb_write(struct state_backend_storage_bucket_circular *cir if (ret == -EBADMSG) { ret = mtd_peb_torture(circ->mtd, circ->eraseblock); if (ret == -EIO) { + mtd_peb_mark_bad(circ->mtd, circ->eraseblock); dev_err(circ->dev, "Tortured eraseblock failed and is marked bad now, PEB %u\n", circ->eraseblock); return -EIO; -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit 452a99483cec36933ff59e6f0a796ec2ee1aea65 | Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | Date: Wed Sep 11 21:27:37 2019 +0200 | | state: drop unused code and declarations for non-existing functions | | state_get_name() is not used and so can be removed. | state_backend_dtb_file() and state_backend_raw_file() were dropped in | c999b507da98 ("state: Refactor state framework"). | | Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/barebox-state/state.c | 7 ------- src/state.h | 5 ----- 2 files changed, 12 deletions(-) diff --git a/src/barebox-state/state.c b/src/barebox-state/state.c index e95f91e29cd5..f528b3e19f21 100644 --- a/src/barebox-state/state.c +++ b/src/barebox-state/state.c @@ -713,13 +713,6 @@ struct state *state_by_node(const struct device_node *node) return NULL; } -int state_get_name(const struct state *state, char const **name) -{ - *name = xstrdup(state->name); - - return 0; -} - int state_read_mac(struct state *state, const char *name, u8 *buf) { struct state_variable *svar; diff --git a/src/state.h b/src/state.h index 132c0c363861..c4db9fe84ac5 100644 --- a/src/state.h +++ b/src/state.h @@ -5,17 +5,12 @@ struct state; -int state_backend_dtb_file(struct state *state, const char *of_path, - const char *path); -int state_backend_raw_file(struct state *state, const char *of_path, - const char *path, off_t offset, size_t size); struct state *state_new_from_node(struct device_node *node, bool readonly); void state_release(struct state *state); struct state *state_by_name(const char *name); struct state *state_by_node(const struct device_node *node); -int state_get_name(const struct state *state, char const **name); int state_load(struct state *state); int state_load_no_auth(struct state *state); -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
Introduce the new build time option '--enable-state-backward-compatibility' to port the following barebox commit. NOTE: This changes barebox-state's default behaviour. | commit 480cde1b22831febacc2a8ab91dfe99d2e5be8e9 | Author: Juergen Borleis <jbe@pengutronix.de> | Date: Tue Aug 15 15:46:31 2017 +0200 | | state: keep backward compatibility | | Previous 'state' variable set variants do not know and use metadata. The | 'direct' storage backend's read function honors this, but not its | counterpart the write function. This makes an update of the 'state' | variable set impossible. | This change makes backward compatibility explicit, else it complains in | the read function as well. With some more debug output it helps the | developer to do things right. | | Signed-off-by: Juergen Borleis <jbe@pengutronix.de> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- configure.ac | 28 +++++++++++++++-------- src/barebox-state.c | 2 ++ src/barebox-state/backend_bucket_direct.c | 28 +++++++++++++++-------- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/configure.ac b/configure.ac index 777f4956ba5f..04c2226625c1 100644 --- a/configure.ac +++ b/configure.ac @@ -32,6 +32,15 @@ AS_IF([test "x$enable_debug" = "xyes"], [ AC_DEFINE(DEBUG, [1], [Debug messages.]) ]) +AC_ARG_ENABLE([state-backward-compatibility], + AS_HELP_STRING([--enable-state-backward-compatibility], [keep the 'direct' storage backend backward compatible @<:@default=disabled@:>@]), + [], [enable_state_backward_compatibility=no]) +AS_IF([test "x${enable_state_backward_compatibility}" = "xyes"], [ + AC_DEFINE(CONFIG_STATE_BACKWARD_COMPATIBLE, [1], ['direct' storage backend backward compatibility.]) +], [ + AC_DEFINE(CONFIG_STATE_BACKWARD_COMPATIBLE, [0]) +]) + AC_CHECK_FUNCS([__secure_getenv secure_getenv]) my_CFLAGS="-Wall \ @@ -53,15 +62,16 @@ AC_MSG_RESULT([ $PACKAGE $VERSION ===== - prefix: ${prefix} - sysconfdir: ${sysconfdir} - libdir: ${libdir} - includedir: ${includedir} + prefix: ${prefix} + sysconfdir: ${sysconfdir} + libdir: ${libdir} + includedir: ${includedir} - compiler: ${CC} - cflags: ${CFLAGS} - ldflags: ${LDFLAGS} + compiler: ${CC} + cflags: ${CFLAGS} + ldflags: ${LDFLAGS} - logging: ${enable_logging} - debug: ${enable_debug} + logging: ${enable_logging} + debug: ${enable_debug} + state-backward-compatibility: ${enable_state_backward_compatibility} ]) diff --git a/src/barebox-state.c b/src/barebox-state.c index 946a8dba6d8c..6b166bfe6e02 100644 --- a/src/barebox-state.c +++ b/src/barebox-state.c @@ -439,6 +439,8 @@ int main(int argc, char *argv[]) exit(0); case OPT_VERSION: printf(PACKAGE_STRING "\n"); + printf("Configured with build-time option '--%s-state-backward-compatibility'.\n", + (CONFIG_STATE_BACKWARD_COMPATIBLE) ? "enable" : "disable"); exit(0); case 'g': sg = xzalloc(sizeof(*sg)); diff --git a/src/barebox-state/backend_bucket_direct.c b/src/barebox-state/backend_bucket_direct.c index 5b5506be002e..4522f0170f3d 100644 --- a/src/barebox-state/backend_bucket_direct.c +++ b/src/barebox-state/backend_bucket_direct.c @@ -75,6 +75,11 @@ static int state_backend_bucket_direct_read(struct state_backend_storage_bucket } else { if (meta.magic != ~0 && !!meta.magic) bucket->wrong_magic = 1; + if (!IS_ENABLED(CONFIG_STATE_BACKWARD_COMPATIBLE)) { + dev_err(direct->dev, "No meta data header found\n"); + dev_dbg(direct->dev, "Enable backward compatibility or increase stride size\n"); + return -EINVAL; + } read_len = direct->max_size; if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) { @@ -110,20 +115,25 @@ static int state_backend_bucket_direct_write(struct state_backend_storage_bucket int ret; struct state_backend_storage_bucket_direct_meta meta; - if (len > direct->max_size - sizeof(meta)) - return -E2BIG; - if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) { dev_err(direct->dev, "Failed to seek file, %d\n", -errno); return -errno; } - meta.magic = direct_magic; - meta.written_length = len; - ret = write_full(direct->fd, &meta, sizeof(meta)); - if (ret < 0) { - dev_err(direct->dev, "Failed to write metadata to file, %d\n", ret); - return ret; + /* write the meta data only if there is head room */ + if (len <= direct->max_size - sizeof(meta)) { + meta.magic = direct_magic; + meta.written_length = len; + ret = write_full(direct->fd, &meta, sizeof(meta)); + if (ret < 0) { + dev_err(direct->dev, "Failed to write metadata to file, %d\n", ret); + return ret; + } + } else { + if (!IS_ENABLED(CONFIG_STATE_BACKWARD_COMPATIBLE)) { + dev_dbg(direct->dev, "Too small stride size: must skip metadata! Increase stride size\n"); + return -EINVAL; + } } ret = write_full(direct->fd, buf, len); -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit f3895311ef49171b58b5ea1f06942408c8685a1e | Author: Lucas Stach <l.stach@pengutronix.de> | Date: Fri Jul 22 15:00:19 2016 +0200 | | state: only build circular backend if MTD is enabled | | The circular backend depends on MTD symbols and is only useful | if MTD is present. Exclude it from the build if MTD is not enabled. | | Signed-off-by: Lucas Stach <l.stach@pengutronix.de> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- configure.ac | 2 ++ src/barebox-state/backend_storage.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 04c2226625c1..30332620190d 100644 --- a/configure.ac +++ b/configure.ac @@ -41,6 +41,8 @@ AS_IF([test "x${enable_state_backward_compatibility}" = "xyes"], [ AC_DEFINE(CONFIG_STATE_BACKWARD_COMPATIBLE, [0]) ]) +AC_DEFINE(CONFIG_MTD, [1], [Statically define to be enabled to harmonize barebox' & dt-utils' code base.]) + AC_CHECK_FUNCS([__secure_getenv secure_getenv]) my_CFLAGS="-Wall \ diff --git a/src/barebox-state/backend_storage.c b/src/barebox-state/backend_storage.c index 3879a8d35666..509427f16f1d 100644 --- a/src/barebox-state/backend_storage.c +++ b/src/barebox-state/backend_storage.c @@ -369,7 +369,7 @@ int state_storage_init(struct state *state, const char *path, const char *storagetype) { struct state_backend_storage *storage = &state->storage; - int ret; + int ret = -ENODEV; struct mtd_info_user meminfo; INIT_LIST_HEAD(&storage->buckets); @@ -380,7 +380,9 @@ int state_storage_init(struct state *state, const char *path, storage->max_size = max_size; storage->path = xstrdup(path); - ret = mtd_get_meminfo(path, &meminfo); + if (IS_ENABLED(CONFIG_MTD)) + ret = mtd_get_meminfo(path, &meminfo); + if (!ret && !(meminfo.flags & MTD_NO_ERASE)) { bool circular; if (!storagetype || !strcmp(storagetype, "circular")) { -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
Sort the function declarations in the same order that barebox uses. Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- src/state.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/state.h b/src/state.h index c4db9fe84ac5..a49155ef2779 100644 --- a/src/state.h +++ b/src/state.h @@ -12,8 +12,8 @@ void state_release(struct state *state); struct state *state_by_name(const char *name); struct state *state_by_node(const struct device_node *node); -int state_load(struct state *state); int state_load_no_auth(struct state *state); +int state_load(struct state *state); int state_save(struct state *state); void state_info(void); -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
This ports the following barebox commit: | commit cdbeddf62b7a01f09f00e0fe94430789f4b0b05e | Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | Date: Wed Sep 11 21:27:38 2019 +0200 | | state: provide dummy implementations for some functions when STATE is | disabled | | This allows to simplify some callers as can be seen from the | phytec-som-am335x/board.c change. (The check for state != NULL could be | dropped already before.) | | Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- configure.ac | 2 ++ src/state.h | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/configure.ac b/configure.ac index 30332620190d..c2486af9436f 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,8 @@ AS_IF([test "x${enable_state_backward_compatibility}" = "xyes"], [ AC_DEFINE(CONFIG_MTD, [1], [Statically define to be enabled to harmonize barebox' & dt-utils' code base.]) +AC_DEFINE(CONFIG_STATE, [1], [Statically define to be enabled to harmonize barebox' & dt-utils' code base.]) + AC_CHECK_FUNCS([__secure_getenv secure_getenv]) my_CFLAGS="-Wall \ diff --git a/src/state.h b/src/state.h index a49155ef2779..d98b781c2089 100644 --- a/src/state.h +++ b/src/state.h @@ -5,6 +5,7 @@ struct state; +#if IS_ENABLED(CONFIG_STATE) struct state *state_new_from_node(struct device_node *node, bool readonly); void state_release(struct state *state); @@ -19,4 +20,39 @@ void state_info(void); int state_read_mac(struct state *state, const char *name, u8 *buf); +#else /* #if IS_ENABLED(CONFIG_STATE) */ + +static inline struct state *state_new_from_node(struct device_node *node, + bool readonly) +{ + return ERR_PTR(-ENOSYS); +} + +static inline struct state *state_by_name(const char *name) +{ + return NULL; +} + +static inline struct state *state_by_node(const struct device_node *node) +{ + return NULL; +}; + +static inline int state_load(struct state *state) +{ + return -ENOSYS; +} + +static inline int state_save(struct state *state) +{ + return -ENOSYS; +} + +static inline int state_read_mac(struct state *state, const char *name, u8 *buf) +{ + return -ENOSYS; +} + +#endif /* #if IS_ENABLED(CONFIG_STATE) / #else */ + #endif /* __STATE_H */ -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
If enabled it defined the C preprocessor macro 'ENABLE_LOGGING' which wasn't used anywhere. Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- configure.ac | 8 -------- 1 file changed, 8 deletions(-) diff --git a/configure.ac b/configure.ac index c2486af9436f..5dd17b20809b 100644 --- a/configure.ac +++ b/configure.ac @@ -18,13 +18,6 @@ AC_PREFIX_DEFAULT([/usr]) AC_PROG_SED AC_PROG_MKDIR_P -AC_ARG_ENABLE([logging], - AS_HELP_STRING([--disable-logging], [disable system logging @<:@default=enabled@:>@]), - [], enable_logging=yes) -AS_IF([test "x$enable_logging" = "xyes"], [ - AC_DEFINE(ENABLE_LOGGING, [1], [System logging.]) -]) - AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]), [], [enable_debug=no]) @@ -75,7 +68,6 @@ AC_MSG_RESULT([ cflags: ${CFLAGS} ldflags: ${LDFLAGS} - logging: ${enable_logging} debug: ${enable_debug} state-backward-compatibility: ${enable_state_backward_compatibility} ]) -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
If enabled it defined the C preprocessor macro 'DEBUG' which wasn't used anywhere. Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> --- configure.ac | 8 -------- 1 file changed, 8 deletions(-) diff --git a/configure.ac b/configure.ac index 5dd17b20809b..d679fa335919 100644 --- a/configure.ac +++ b/configure.ac @@ -18,13 +18,6 @@ AC_PREFIX_DEFAULT([/usr]) AC_PROG_SED AC_PROG_MKDIR_P -AC_ARG_ENABLE([debug], - AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]), - [], [enable_debug=no]) -AS_IF([test "x$enable_debug" = "xyes"], [ - AC_DEFINE(DEBUG, [1], [Debug messages.]) -]) - AC_ARG_ENABLE([state-backward-compatibility], AS_HELP_STRING([--enable-state-backward-compatibility], [keep the 'direct' storage backend backward compatible @<:@default=disabled@:>@]), [], [enable_state_backward_compatibility=no]) @@ -68,6 +61,5 @@ AC_MSG_RESULT([ cflags: ${CFLAGS} ldflags: ${LDFLAGS} - debug: ${enable_debug} state-backward-compatibility: ${enable_state_backward_compatibility} ]) -- 2.23.0 _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de
On Mon, Sep 30, 2019 at 09:26:08AM +0200, Ulrich Ölmann wrote: > Introduce the new build time option '--enable-state-backward-compatibility' to > port the following barebox commit. > > NOTE: This changes barebox-state's default behaviour. > > | commit 480cde1b22831febacc2a8ab91dfe99d2e5be8e9 > | Author: Juergen Borleis <jbe@pengutronix.de> > | Date: Tue Aug 15 15:46:31 2017 +0200 > | > | state: keep backward compatibility > | > | Previous 'state' variable set variants do not know and use metadata. The > | 'direct' storage backend's read function honors this, but not its > | counterpart the write function. This makes an update of the 'state' > | variable set impossible. > | This change makes backward compatibility explicit, else it complains in > | the read function as well. With some more debug output it helps the > | developer to do things right. > | > | Signed-off-by: Juergen Borleis <jbe@pengutronix.de> > | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> > > Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de> > --- > configure.ac | 28 +++++++++++++++-------- > src/barebox-state.c | 2 ++ > src/barebox-state/backend_bucket_direct.c | 28 +++++++++++++++-------- > 3 files changed, 40 insertions(+), 18 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 777f4956ba5f..04c2226625c1 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -32,6 +32,15 @@ AS_IF([test "x$enable_debug" = "xyes"], [ > AC_DEFINE(DEBUG, [1], [Debug messages.]) > ]) > > +AC_ARG_ENABLE([state-backward-compatibility], > + AS_HELP_STRING([--enable-state-backward-compatibility], [keep the 'direct' storage backend backward compatible @<:@default=disabled@:>@]), > + [], [enable_state_backward_compatibility=no]) > +AS_IF([test "x${enable_state_backward_compatibility}" = "xyes"], [ > + AC_DEFINE(CONFIG_STATE_BACKWARD_COMPATIBLE, [1], ['direct' storage backend backward compatibility.]) > +], [ > + AC_DEFINE(CONFIG_STATE_BACKWARD_COMPATIBLE, [0]) > +]) > + > AC_CHECK_FUNCS([__secure_getenv secure_getenv]) > > my_CFLAGS="-Wall \ > @@ -53,15 +62,16 @@ AC_MSG_RESULT([ > $PACKAGE $VERSION > ===== > > - prefix: ${prefix} > - sysconfdir: ${sysconfdir} > - libdir: ${libdir} > - includedir: ${includedir} > + prefix: ${prefix} > + sysconfdir: ${sysconfdir} > + libdir: ${libdir} > + includedir: ${includedir} > > - compiler: ${CC} > - cflags: ${CFLAGS} > - ldflags: ${LDFLAGS} > + compiler: ${CC} > + cflags: ${CFLAGS} > + ldflags: ${LDFLAGS} > > - logging: ${enable_logging} > - debug: ${enable_debug} > + logging: ${enable_logging} > + debug: ${enable_debug} > + state-backward-compatibility: ${enable_state_backward_compatibility} > ]) It's good to have this as a build-time option. I have just sent a barebox patch to clarify that behaviour [1], and I would suggest the following fixup here: - AS_HELP_STRING([--enable-state-backward-compatibility], [keep the 'direct' storage backend backward compatible @<:@default=disabled@:>@]), + AS_HELP_STRING([--enable-state-backward-compatibility], [barebox-state: when using the 'direct' storage backend, keep the on-disk format readable by barebox <= v2016.08.0 @<:@default=disabled@:>@]) [1]: https://www.mail-archive.com/barebox@lists.infradead.org/msg32865.html > diff --git a/src/barebox-state.c b/src/barebox-state.c > index 946a8dba6d8c..6b166bfe6e02 100644 > --- a/src/barebox-state.c > +++ b/src/barebox-state.c > @@ -439,6 +439,8 @@ int main(int argc, char *argv[]) > exit(0); > case OPT_VERSION: > printf(PACKAGE_STRING "\n"); > + printf("Configured with build-time option '--%s-state-backward-compatibility'.\n", > + (CONFIG_STATE_BACKWARD_COMPATIBLE) ? "enable" : "disable"); Oh yes, that's very reasonable too. - Roland > exit(0); > case 'g': > sg = xzalloc(sizeof(*sg)); > diff --git a/src/barebox-state/backend_bucket_direct.c b/src/barebox-state/backend_bucket_direct.c > index 5b5506be002e..4522f0170f3d 100644 > --- a/src/barebox-state/backend_bucket_direct.c > +++ b/src/barebox-state/backend_bucket_direct.c > @@ -75,6 +75,11 @@ static int state_backend_bucket_direct_read(struct state_backend_storage_bucket > } else { > if (meta.magic != ~0 && !!meta.magic) > bucket->wrong_magic = 1; > + if (!IS_ENABLED(CONFIG_STATE_BACKWARD_COMPATIBLE)) { > + dev_err(direct->dev, "No meta data header found\n"); > + dev_dbg(direct->dev, "Enable backward compatibility or increase stride size\n"); > + return -EINVAL; > + } > read_len = direct->max_size; > if (lseek(direct->fd, direct->offset, SEEK_SET) != > direct->offset) { > @@ -110,20 +115,25 @@ static int state_backend_bucket_direct_write(struct state_backend_storage_bucket > int ret; > struct state_backend_storage_bucket_direct_meta meta; > > - if (len > direct->max_size - sizeof(meta)) > - return -E2BIG; > - > if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) { > dev_err(direct->dev, "Failed to seek file, %d\n", -errno); > return -errno; > } > > - meta.magic = direct_magic; > - meta.written_length = len; > - ret = write_full(direct->fd, &meta, sizeof(meta)); > - if (ret < 0) { > - dev_err(direct->dev, "Failed to write metadata to file, %d\n", ret); > - return ret; > + /* write the meta data only if there is head room */ > + if (len <= direct->max_size - sizeof(meta)) { > + meta.magic = direct_magic; > + meta.written_length = len; > + ret = write_full(direct->fd, &meta, sizeof(meta)); > + if (ret < 0) { > + dev_err(direct->dev, "Failed to write metadata to file, %d\n", ret); > + return ret; > + } > + } else { > + if (!IS_ENABLED(CONFIG_STATE_BACKWARD_COMPATIBLE)) { > + dev_dbg(direct->dev, "Too small stride size: must skip metadata! Increase stride size\n"); > + return -EINVAL; > + } > } > > ret = write_full(direct->fd, buf, len); > -- > 2.23.0 > > > _______________________________________________ > OSS-Tools mailing list > OSS-Tools@pengutronix.de -- Roland Hieber | r.hieber@pengutronix.de | Pengutronix e.K. | https://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim | Phone: +49-5121-206917-5086 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ OSS-Tools mailing list OSS-Tools@pengutronix.de