[U-Boot] [PATCH 2/2] tools: env: Implement atomic replace for filesystem

Alex Kiernan alex.kiernan at gmail.com
Fri Mar 9 09:54:22 UTC 2018


On Thu, Mar 8, 2018 at 5:04 PM, Stefano Babic <sbabic at denx.de> wrote:
> Hi alex,
>
> On 08/03/2018 12:52, Alex Kiernan wrote:
>> If the U-Boot environment is stored in a regular file and redundant
>> operation isn't set, then write to a temporary file and perform an
>> atomic rename.
>>
>
> Even if it is not explicitely set (IMHO it should), this code can
> be used as library and linked to own application. That means that
> concurrency can happens. I mean:
>

At this point you're writing the new environment, so we should hold a
lock to avoid concurrent writes.

>> Signed-off-by: Alex Kiernan <alex.kiernan at gmail.com>
>> ---
>>
>>  tools/env/fw_env.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
>>  1 file changed, 78 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
>> index 2df3504..b814c4e 100644
>> --- a/tools/env/fw_env.c
>> +++ b/tools/env/fw_env.c
>> @@ -14,6 +14,7 @@
>>  #include <errno.h>
>>  #include <env_flags.h>
>>  #include <fcntl.h>
>> +#include <libgen.h>
>>  #include <linux/fs.h>
>>  #include <linux/stringify.h>
>>  #include <ctype.h>
>> @@ -1229,9 +1230,46 @@ static int flash_read (int fd)
>>       return 0;
>>  }
>>
>> +static int flash_open_tempfile(const char **dname, const char **target_temp)
>> +{
>> +     char *dup_name = strdup(DEVNAME (dev_current));
>> +     char *temp_name = NULL;
>> +     int rc = -1;
>> +
>> +     if (!dup_name)
>> +             return -1;
>> +
>> +     *dname = dirname(dup_name);
>> +     if (!*dname)
>> +             goto err;
>> +
>> +     rc = asprintf(&temp_name, "%s/uboot.tmp", *dname);
>
> Filename is fixed - should we not use mkstemp ?
>

I went round all the temp functions before in the end deciding to fix
it. However it looks like I totally misread the contract that mkstemp
delivers - I'd thought it didn't pass you the name back, but it
clearly does; I'll go update it.

-- 
Alex Kiernan


More information about the U-Boot mailing list