summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2023-01-20 11:04:28 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2023-01-20 11:04:28 +0100
commitf2c0052746ba6dacb6ce0fd3af3d390893fdc9f7 (patch)
tree53af334e75c42bbd49e518332443d18c724d3151 /common
parent434891b29e0a9e5c40fba1b38f8223154c0f3f88 (diff)
parent2f8590c438e6870a366ab1a1672a0bbe789ea4ed (diff)
downloadbarebox-f2c0052746ba6dacb6ce0fd3af3d390893fdc9f7.tar.gz
barebox-f2c0052746ba6dacb6ce0fd3af3d390893fdc9f7.tar.xz
Merge branch 'for-next/struct-rename'
Diffstat (limited to 'common')
-rw-r--r--common/state/backend_bucket_direct.c4
-rw-r--r--common/state/backend_storage.c2
-rw-r--r--common/state/state.c6
-rw-r--r--common/state/state.h2
4 files changed, 7 insertions, 7 deletions
diff --git a/common/state/backend_bucket_direct.c b/common/state/backend_bucket_direct.c
index 3818c6f0b0..f06e142778 100644
--- a/common/state/backend_bucket_direct.c
+++ b/common/state/backend_bucket_direct.c
@@ -164,12 +164,12 @@ static void state_backend_bucket_direct_free(struct
int state_backend_bucket_direct_create(struct device *dev, const char *path,
struct state_backend_storage_bucket **bucket,
- off_t offset, ssize_t max_size)
+ off_t offset, ssize_t max_size, bool readonly)
{
int fd;
struct state_backend_storage_bucket_direct *direct;
- fd = open(path, O_RDWR);
+ fd = open(path, readonly ? O_RDONLY : O_RDWR);
if (fd < 0) {
dev_err(dev, "Failed to open file '%s', %d\n", path, -errno);
return -errno;
diff --git a/common/state/backend_storage.c b/common/state/backend_storage.c
index c55d22e37f..df81902bf7 100644
--- a/common/state/backend_storage.c
+++ b/common/state/backend_storage.c
@@ -332,7 +332,7 @@ static int state_storage_file_buckets_init(struct state_backend_storage *storage
offset = storage->offset + n * stridesize;
ret = state_backend_bucket_direct_create(storage->dev, storage->path,
&bucket, offset,
- stridesize);
+ stridesize, storage->readonly);
if (ret) {
dev_warn(storage->dev, "Failed to create direct bucket at '%s' offset %lld\n",
storage->path, (long long) offset);
diff --git a/common/state/state.c b/common/state/state.c
index a614c849c7..cabe285fbd 100644
--- a/common/state/state.c
+++ b/common/state/state.c
@@ -653,14 +653,14 @@ struct state *state_new_from_node(struct device_node *node, bool readonly)
if (ret)
goto out_release_state;
+ if (readonly)
+ state_backend_set_readonly(state);
+
ret = state_storage_init(state, state->backend_path, offset,
size, stridesize, storage_type);
if (ret)
goto out_release_state;
- if (readonly)
- state_backend_set_readonly(state);
-
ret = state_from_node(state, node, 1);
if (ret) {
goto out_release_state;
diff --git a/common/state/state.h b/common/state/state.h
index 7eb51bbdb5..f0c5b1de41 100644
--- a/common/state/state.h
+++ b/common/state/state.h
@@ -226,7 +226,7 @@ void state_backend_set_readonly(struct state *state);
void state_storage_free(struct state_backend_storage *storage);
int state_backend_bucket_direct_create(struct device *dev, const char *path,
struct state_backend_storage_bucket **bucket,
- off_t offset, ssize_t max_size);
+ off_t offset, ssize_t max_size, bool readonly);
int state_storage_write(struct state_backend_storage *storage,
const void * buf, ssize_t len);
int state_storage_read(struct state_backend_storage *storage,