[U-Boot] [PATCH 1/2] tools: env: Refactor write path of flash_io()
Stefano Babic
sbabic at denx.de
Thu Mar 8 15:24:19 UTC 2018
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.kiernan at 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 <sbabic at 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: sbabic at denx.de
=====================================================================
More information about the U-Boot
mailing list