On 10/14/13 at 09:04pm, Jingbai Ma wrote:
> This patch Enhance bitmap writting function in reassemble_kdump_header().
> Prevent bitmap writting failure if the size of bitmap is too large to fit a
> sigle write.

This patch looks good to me.

Acked-by: WANG Chao <[email protected]>

> 
> Signed-off-by: Jingbai Ma <[email protected]>
> ---
>  makedumpfile.c |   45 +++++++++++++++++++++++++++++++--------------
>  1 files changed, 31 insertions(+), 14 deletions(-)
> 
> diff --git a/makedumpfile.c b/makedumpfile.c
> index 130cf9f..f43454a 100644
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -7990,6 +7990,7 @@ reassemble_kdump_header(void)
>       struct disk_dump_header dh;
>       struct kdump_sub_header kh;
>       char *buf_bitmap = NULL;
> +     ssize_t status, read_size, written_size;
>  
>       /*
>        * Write common header.
> @@ -8068,10 +8069,16 @@ reassemble_kdump_header(void)
>                   SPLITTING_DUMPFILE(0), strerror(errno));
>               goto out;
>       }
> -     if (read(fd, buf_bitmap, info->len_bitmap) != info->len_bitmap) {
> -             ERRMSG("Can't read a file(%s). %s\n",
> -                 SPLITTING_DUMPFILE(0), strerror(errno));
> -             goto out;
> +     read_size = 0;
> +     while (read_size < info->len_bitmap) {
> +             status = read(fd, buf_bitmap + read_size, info->len_bitmap
> +                     - read_size);
> +             if (status < 0) {
> +                     ERRMSG("Can't read a file(%s). %s\n",
> +                             SPLITTING_DUMPFILE(0), strerror(errno));
> +                     goto out;
> +             }
> +             read_size += status;
>       }
>  
>       if (lseek(info->fd_dumpfile, offset, SEEK_SET) < 0) {
> @@ -8079,11 +8086,16 @@ reassemble_kdump_header(void)
>                   info->name_dumpfile, strerror(errno));
>               goto out;
>       }
> -     if (write(info->fd_dumpfile, buf_bitmap, info->len_bitmap)
> -         != info->len_bitmap) {
> -             ERRMSG("Can't write a file(%s). %s\n",
> -                 info->name_dumpfile, strerror(errno));
> -             goto out;
> +     written_size = 0;
> +     while (written_size < info->len_bitmap) {
> +             status = write(info->fd_dumpfile, buf_bitmap + written_size,
> +                     info->len_bitmap - written_size);
> +             if (status < 0) {
> +                     ERRMSG("Can't write a file(%s). %s\n",
> +                         info->name_dumpfile, strerror(errno));
> +                     goto out;
> +             }
> +             written_size += status;
>       }
>  
>       if (lseek(info->fd_bitmap, 0x0, SEEK_SET) < 0) {
> @@ -8091,11 +8103,16 @@ reassemble_kdump_header(void)
>                   info->name_bitmap, strerror(errno));
>               goto out;
>       }
> -     if (write(info->fd_bitmap, buf_bitmap, info->len_bitmap)
> -         != info->len_bitmap) {
> -             ERRMSG("Can't write a file(%s). %s\n",
> -                 info->name_bitmap, strerror(errno));
> -             goto out;
> +     written_size = 0;
> +     while (written_size < info->len_bitmap) {
> +             status = write(info->fd_bitmap, buf_bitmap + written_size,
> +                     info->len_bitmap - written_size);
> +             if (status < 0) {
> +                     ERRMSG("Can't write a file(%s). %s\n",
> +                         info->name_bitmap, strerror(errno));
> +                     goto out;
> +             }
> +             written_size += status;
>       }
>  
>       ret = TRUE;
> 

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to