On 08/03/2018 12:52, Alex Kiernan wrote:
> Extract write path of flash_io() into a separate function. This patch
> should be a functional no-op.
> 
> Signed-off-by: Alex Kiernan <alex.kier...@gmail.com>
> ---
> 
>  tools/env/fw_env.c | 98 
> +++++++++++++++++++++++++++++-------------------------
>  1 file changed, 53 insertions(+), 45 deletions(-)
> 
> diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
> index 0e3e343..2df3504 100644
> --- a/tools/env/fw_env.c
> +++ b/tools/env/fw_env.c
> @@ -1229,68 +1229,76 @@ static int flash_read (int fd)
>       return 0;
>  }
>  
> -static int flash_io (int mode)
> +static int flash_io_write (int fd_current)
>  {
> -     int fd_current, fd_target, rc, dev_target;
> +     int fd_target, rc, dev_target;
>  
> -     /* dev_current: fd_current, erase_current */
> -     fd_current = open (DEVNAME (dev_current), mode);
> -     if (fd_current < 0) {
> -             fprintf (stderr,
> -                      "Can't open %s: %s\n",
> -                      DEVNAME (dev_current), strerror (errno));
> -             return -1;
> +     if (HaveRedundEnv) {
> +             /* switch to next partition for writing */
> +             dev_target = !dev_current;
> +             /* dev_target: fd_target, erase_target */
> +             fd_target = open (DEVNAME (dev_target), O_RDWR);
> +             if (fd_target < 0) {
> +                     fprintf (stderr,
> +                              "Can't open %s: %s\n",
> +                              DEVNAME (dev_target),
> +                              strerror (errno));
> +                     rc = -1;
> +                     goto exit;
> +             }
> +     } else {
> +             dev_target = dev_current;
> +             fd_target = fd_current;
>       }
>  
> -     if (mode == O_RDWR) {
> -             if (HaveRedundEnv) {
> -                     /* switch to next partition for writing */
> -                     dev_target = !dev_current;
> -                     /* dev_target: fd_target, erase_target */
> -                     fd_target = open (DEVNAME (dev_target), mode);
> -                     if (fd_target < 0) {
> -                             fprintf (stderr,
> -                                      "Can't open %s: %s\n",
> -                                      DEVNAME (dev_target),
> -                                      strerror (errno));
> -                             rc = -1;
> -                             goto exit;
> -                     }
> -             } else {
> -                     dev_target = dev_current;
> -                     fd_target = fd_current;
> -             }
> +     rc = flash_write (fd_current, fd_target, dev_target);
>  
> -             rc = flash_write (fd_current, fd_target, dev_target);
> +     if (fsync(fd_current) &&
> +         !(errno == EINVAL || errno == EROFS)) {
> +             fprintf (stderr,
> +                      "fsync failed on %s: %s\n",
> +                      DEVNAME (dev_current), strerror (errno));
> +     }
>  
> -             if (fsync(fd_current) &&
> +     if (HaveRedundEnv) {
> +             if (fsync(fd_target) &&
>                   !(errno == EINVAL || errno == EROFS)) {
>                       fprintf (stderr,
>                                "fsync failed on %s: %s\n",
>                                DEVNAME (dev_current), strerror (errno));
>               }
>  
> -             if (HaveRedundEnv) {
> -                     if (fsync(fd_target) &&
> -                         !(errno == EINVAL || errno == EROFS)) {
> -                             fprintf (stderr,
> -                                      "fsync failed on %s: %s\n",
> -                                      DEVNAME (dev_current), strerror 
> (errno));
> -                     }
> -
> -                     if (close (fd_target)) {
> -                             fprintf (stderr,
> -                                     "I/O error on %s: %s\n",
> -                                     DEVNAME (dev_target),
> -                                     strerror (errno));
> -                             rc = -1;
> -                     }
> +             if (close (fd_target)) {
> +                     fprintf (stderr,
> +                              "I/O error on %s: %s\n",
> +                              DEVNAME (dev_target),
> +                              strerror (errno));
> +                     rc = -1;
>               }
> +     }
> +exit:
> +     return rc;
> +}
> +
> +static int flash_io (int mode)
> +{
> +     int fd_current, rc;
> +
> +     /* dev_current: fd_current, erase_current */
> +     fd_current = open (DEVNAME (dev_current), mode);
> +     if (fd_current < 0) {
> +             fprintf (stderr,
> +                      "Can't open %s: %s\n",
> +                      DEVNAME (dev_current), strerror (errno));
> +             return -1;
> +     }
> +
> +     if (mode == O_RDWR) {
> +             rc = flash_io_write(fd_current);
>       } else {
>               rc = flash_read (fd_current);
>       }
>  
> -exit:
>       if (close (fd_current)) {
>               fprintf (stderr,
>                        "I/O error on %s: %s\n",
> 

Reviewed-by: Stefano Babic <sba...@denx.de>

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de
=====================================================================
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to