Original code use lseek..read/write pattern for read from/write to
specific position of a file. This patch replaces them by pread/pwrite,
reduces more than 100 LOC.

Signed-off-by: Wang Nan <[email protected]>
Cc: Atsushi Kumagai <[email protected]>
Cc: Petr Tesarik <[email protected]>
Cc: [email protected]
Cc: Geng Hui <[email protected]>
Cc: Liu Hua <[email protected]>
---
 makedumpfile.c | 188 +++++++++++----------------------------------------------
 1 file changed, 36 insertions(+), 152 deletions(-)

diff --git a/makedumpfile.c b/makedumpfile.c
index 33c378d..934db88 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -25,6 +25,8 @@
 #include <sys/time.h>
 #include <limits.h>
 
+#include <unistd.h>
+
 struct symbol_table    symbol_table;
 struct size_table      size_table;
 struct offset_table    offset_table;
@@ -259,16 +261,11 @@ read_page_desc(unsigned long long paddr, page_desc_t *pd)
        pfn = paddr_to_pfn(paddr);
        desc_pos = pfn_to_pos(pfn);
        offset += (off_t)desc_pos * sizeof(page_desc_t);
-       if (lseek(info->fd_memory, offset, SEEK_SET) < 0) {
-               ERRMSG("Can't seek %s. %s\n",
-                                info->name_memory, strerror(errno));
-               return FALSE;
-       }
 
        /*
         * Read page descriptor
         */
-       if (read(info->fd_memory, pd, sizeof(*pd)) != sizeof(*pd)) {
+       if (pread(info->fd_memory, pd, sizeof(*pd), offset) != sizeof(*pd)) {
                ERRMSG("Can't read %s. %s\n",
                                info->name_memory, strerror(errno));
                return FALSE;
@@ -374,8 +371,6 @@ next_region:
 static int
 read_from_vmcore(off_t offset, void *bufptr, unsigned long size)
 {
-       const off_t failed = (off_t)-1;
-
        if (info->flag_usemmap == MMAP_ENABLE &&
            page_is_fractional(offset) == FALSE) {
                if (!read_with_mmap(offset, bufptr, size)) {
@@ -392,13 +387,7 @@ read_from_vmcore(off_t offset, void *bufptr, unsigned long 
size)
                        read_from_vmcore(offset, bufptr, size);
                }
        } else {
-               if (lseek(info->fd_memory, offset, SEEK_SET) == failed) {
-                       ERRMSG("Can't seek the dump memory(%s). (offset: %llx) 
%s\n",
-                              info->name_memory, (unsigned long long)offset, 
strerror(errno));
-                       return FALSE;
-               }
-
-               if (read(info->fd_memory, bufptr, size) != size) {
+               if (pread(info->fd_memory, bufptr, size, offset) != size) {
                        ERRMSG("Can't read the dump memory(%s). %s\n",
                               info->name_memory, strerror(errno));
                        return FALSE;
@@ -520,18 +509,12 @@ readpage_kdump_compressed(unsigned long long paddr, void 
*bufptr)
                return FALSE;
        }
 
-       if (lseek(info->fd_memory, pd.offset, SEEK_SET) < 0) {
-               ERRMSG("Can't seek %s. %s\n",
-                               info->name_memory, strerror(errno));
-               return FALSE;
-       }
-
        /*
         * Read page data
         */
        rdbuf = pd.flags & (DUMP_DH_COMPRESSED_ZLIB | DUMP_DH_COMPRESSED_LZO |
                DUMP_DH_COMPRESSED_SNAPPY) ? buf : bufptr;
-       if (read(info->fd_memory, rdbuf, pd.size) != pd.size) {
+       if (pread(info->fd_memory, rdbuf, pd.size, pd.offset) != pd.size) {
                ERRMSG("Can't read %s. %s\n",
                                info->name_memory, strerror(errno));
                return FALSE;
@@ -1555,7 +1538,6 @@ get_str_osrelease_from_vmlinux(void)
        struct utsname system_utsname;
        unsigned long long utsname;
        off_t offset;
-       const off_t failed = (off_t)-1;
 
        /*
         * Get the kernel version.
@@ -1576,11 +1558,7 @@ get_str_osrelease_from_vmlinux(void)
                    utsname);
                return FALSE;
        }
-       if (lseek(fd, offset, SEEK_SET) == failed) {
-               ERRMSG("Can't seek %s. %s\n", name, strerror(errno));
-               return FALSE;
-       }
-       if (read(fd, &system_utsname, sizeof system_utsname)
+       if (pread(fd, &system_utsname, sizeof(system_utsname), offset)
            != sizeof system_utsname) {
                ERRMSG("Can't read %s. %s\n", name, strerror(errno));
                return FALSE;
@@ -2124,7 +2102,6 @@ copy_vmcoreinfo(off_t offset, unsigned long size)
 {
        int fd;
        char buf[VMCOREINFO_BYTES];
-       const off_t failed = (off_t)-1;
 
        if (!offset || !size)
                return FALSE;
@@ -2134,12 +2111,7 @@ copy_vmcoreinfo(off_t offset, unsigned long size)
                    info->name_vmcoreinfo, strerror(errno));
                return FALSE;
        }
-       if (lseek(info->fd_memory, offset, SEEK_SET) == failed) {
-               ERRMSG("Can't seek the dump memory(%s). %s\n",
-                   info->name_memory, strerror(errno));
-               return FALSE;
-       }
-       if (read(info->fd_memory, &buf, size) != size) {
+       if (pread(info->fd_memory, &buf, size, offset) != size) {
                ERRMSG("Can't read the dump memory(%s). %s\n",
                    info->name_memory, strerror(errno));
                return FALSE;
@@ -3318,12 +3290,7 @@ set_bitmap(struct dump_bitmap *bitmap, unsigned long 
long pfn,
        new_offset = bitmap->offset + BUFSIZE_BITMAP * (pfn / PFN_BUFBITMAP);
 
        if (0 <= bitmap->no_block && old_offset != new_offset) {
-               if (lseek(bitmap->fd, old_offset, SEEK_SET) < 0 ) {
-                       ERRMSG("Can't seek the bitmap(%s). %s\n",
-                           bitmap->file_name, strerror(errno));
-                       return FALSE;
-               }
-               if (write(bitmap->fd, bitmap->buf, BUFSIZE_BITMAP)
+               if (pwrite(bitmap->fd, bitmap->buf, BUFSIZE_BITMAP, old_offset)
                    != BUFSIZE_BITMAP) {
                        ERRMSG("Can't write the bitmap(%s). %s\n",
                            bitmap->file_name, strerror(errno));
@@ -3331,12 +3298,7 @@ set_bitmap(struct dump_bitmap *bitmap, unsigned long 
long pfn,
                }
        }
        if (old_offset != new_offset) {
-               if (lseek(bitmap->fd, new_offset, SEEK_SET) < 0 ) {
-                       ERRMSG("Can't seek the bitmap(%s). %s\n",
-                           bitmap->file_name, strerror(errno));
-                       return FALSE;
-               }
-               if (read(bitmap->fd, bitmap->buf, BUFSIZE_BITMAP)
+               if (pread(bitmap->fd, bitmap->buf, BUFSIZE_BITMAP, new_offset)
                    != BUFSIZE_BITMAP) {
                        ERRMSG("Can't read the bitmap(%s). %s\n",
                            bitmap->file_name, strerror(errno));
@@ -3398,12 +3360,7 @@ sync_bitmap(struct dump_bitmap *bitmap)
        if (bitmap->no_block < 0)
                return TRUE;
 
-       if (lseek(bitmap->fd, offset, SEEK_SET) < 0 ) {
-               ERRMSG("Can't seek the bitmap(%s). %s\n",
-                   bitmap->file_name, strerror(errno));
-               return FALSE;
-       }
-       if (write(bitmap->fd, bitmap->buf, BUFSIZE_BITMAP)
+       if (pwrite(bitmap->fd, bitmap->buf, BUFSIZE_BITMAP, offset)
            != BUFSIZE_BITMAP) {
                ERRMSG("Can't write the bitmap(%s). %s\n",
                    bitmap->file_name, strerror(errno));
@@ -3519,14 +3476,7 @@ is_in_segs(unsigned long long paddr)
 int
 read_cache(struct cache_data *cd)
 {
-       const off_t failed = (off_t)-1;
-
-       if (lseek(cd->fd, cd->offset, SEEK_SET) == failed) {
-               ERRMSG("Can't seek the dump file(%s). %s\n",
-                   cd->file_name, strerror(errno));
-               return FALSE;
-       }
-       if (read(cd->fd, cd->buf, cd->cache_size) != cd->cache_size) {
+       if (pread(cd->fd, cd->buf, cd->cache_size, cd->offset) != 
cd->cache_size) {
                ERRMSG("Can't read the dump file(%s). %s\n",
                    cd->file_name, strerror(errno));
                return FALSE;
@@ -4892,24 +4842,16 @@ copy_bitmap(void)
 
        offset = 0;
        while (offset < (info->len_bitmap / 2)) {
-               if (lseek(info->bitmap1->fd, info->bitmap1->offset + offset,
-                   SEEK_SET) == failed) {
-                       ERRMSG("Can't seek the bitmap(%s). %s\n",
-                           info->name_bitmap, strerror(errno));
-                       return FALSE;
-               }
-               if (read(info->bitmap1->fd, buf, sizeof(buf)) != sizeof(buf)) {
+               if (pread(info->bitmap1->fd, buf, sizeof(buf),
+                                       info->bitmap1->offset + offset)
+                               != sizeof(buf)) {
                        ERRMSG("Can't read the dump memory(%s). %s\n",
                            info->name_memory, strerror(errno));
                        return FALSE;
                }
-               if (lseek(info->bitmap2->fd, info->bitmap2->offset + offset,
-                   SEEK_SET) == failed) {
-                       ERRMSG("Can't seek the bitmap(%s). %s\n",
-                           info->name_bitmap, strerror(errno));
-                       return FALSE;
-               }
-               if (write(info->bitmap2->fd, buf, sizeof(buf)) != sizeof(buf)) {
+               if (pwrite(info->bitmap2->fd, buf, sizeof(buf),
+                                       info->bitmap2->offset + offset)
+                               != sizeof(buf)) {
                        ERRMSG("Can't write the bitmap(%s). %s\n",
                        info->name_bitmap, strerror(errno));
                        return FALSE;
@@ -5456,12 +5398,8 @@ write_elf_header(struct cache_data *cd_header)
                    strerror(errno));
                goto out;
        }
-       if (lseek(info->fd_memory, offset_note_memory, SEEK_SET) == failed) {
-               ERRMSG("Can't seek the dump memory(%s). %s\n",
-                   info->name_memory, strerror(errno));
-               goto out;
-       }
-       if (read(info->fd_memory, buf, size_note) != size_note) {
+       if (pread(info->fd_memory, buf, size_note, offset_note_memory)
+                       != size_note) {
                ERRMSG("Can't read the dump memory(%s). %s\n",
                    info->name_memory, strerror(errno));
                goto out;
@@ -5570,12 +5508,8 @@ write_kdump_header(void)
                }
 
                if (!info->flag_sadump) {
-                       if (lseek(info->fd_memory, offset_note, SEEK_SET) < 0) {
-                               ERRMSG("Can't seek the dump memory(%s). %s\n",
-                                      info->name_memory, strerror(errno));
-                               goto out;
-                       }
-                       if (read(info->fd_memory, buf, size_note) != size_note) 
{
+                       if (pread(info->fd_memory, buf, size_note, offset_note)
+                                       != size_note) {
                                ERRMSG("Can't read the dump memory(%s). %s\n",
                                       info->name_memory, strerror(errno));
                                goto out;
@@ -6586,12 +6520,7 @@ copy_eraseinfo(struct cache_data *cd_eraseinfo)
                    strerror(errno));
                return FALSE;
        }
-       if (lseek(info->fd_memory, offset, SEEK_SET) < 0) {
-               ERRMSG("Can't seek the dump memory(%s). %s\n",
-                   info->name_memory, strerror(errno));
-               goto out;
-       }
-       if (read(info->fd_memory, buf, size) != size) {
+       if (pread(info->fd_memory, buf, size, offset) != size) {
                ERRMSG("Can't read the dump memory(%s). %s\n",
                    info->name_memory, strerror(errno));
                goto out;
@@ -7169,12 +7098,8 @@ init_xen_crash_info(void)
                return FALSE;
        }
 
-       if (lseek(info->fd_memory, offset_xen_crash_info, SEEK_SET) < 0) {
-               ERRMSG("Can't seek the dump memory(%s). %s\n",
-                      info->name_memory, strerror(errno));
-               return FALSE;
-       }
-       if (read(info->fd_memory, buf, size_xen_crash_info)
+       if (pread(info->fd_memory, buf, size_xen_crash_info,
+                               offset_xen_crash_info)
            != size_xen_crash_info) {
                ERRMSG("Can't read the dump memory(%s). %s\n",
                       info->name_memory, strerror(errno));
@@ -8155,12 +8080,7 @@ __read_disk_dump_header(struct disk_dump_header *dh, 
char *filename)
                    filename, strerror(errno));
                return FALSE;
        }
-       if (lseek(fd, 0x0, SEEK_SET) < 0) {
-               ERRMSG("Can't seek a file(%s). %s\n",
-                   filename, strerror(errno));
-               goto out;
-       }
-       if (read(fd, dh, sizeof(struct disk_dump_header))
+       if (pread(fd, dh, sizeof(struct disk_dump_header), 0x0)
            != sizeof(struct disk_dump_header)) {
                ERRMSG("Can't read a file(%s). %s\n",
                    filename, strerror(errno));
@@ -8204,12 +8124,7 @@ read_kdump_sub_header(struct kdump_sub_header *kh, char 
*filename)
                    filename, strerror(errno));
                return FALSE;
        }
-       if (lseek(fd, offset, SEEK_SET) < 0) {
-               ERRMSG("Can't seek a file(%s). %s\n",
-                   filename, strerror(errno));
-               goto out;
-       }
-       if (read(fd, kh, sizeof(struct kdump_sub_header))
+       if (pread(fd, kh, sizeof(struct kdump_sub_header), offset)
             != sizeof(struct kdump_sub_header)) {
                ERRMSG("Can't read a file(%s). %s\n",
                    filename, strerror(errno));
@@ -8373,19 +8288,11 @@ copy_same_data(int src_fd, int dst_fd, off_t offset, 
unsigned long size)
                ERRMSG("Can't allocate memory.\n");
                return FALSE;
        }
-       if (lseek(src_fd, offset, SEEK_SET) < 0) {
-               ERRMSG("Can't seek a source file. %s\n", strerror(errno));
-               goto out;
-       }
-       if (read(src_fd, buf, size) != size) {
+       if (pread(src_fd, buf, size, offset) != size) {
                ERRMSG("Can't read a source file. %s\n", strerror(errno));
                goto out;
        }
-       if (lseek(dst_fd, offset, SEEK_SET) < 0) {
-               ERRMSG("Can't seek a destination file. %s\n", strerror(errno));
-               goto out;
-       }
-       if (write(dst_fd, buf, size) != size) {
+       if (pwrite(pdst_fd, buf, size, offset) != size) {
                ERRMSG("Can't write a destination file. %s\n", strerror(errno));
                goto out;
        }
@@ -8412,12 +8319,7 @@ reassemble_kdump_header(void)
        if (!read_disk_dump_header(&dh, SPLITTING_DUMPFILE(0)))
                return FALSE;
 
-       if (lseek(info->fd_dumpfile, 0x0, SEEK_SET) < 0) {
-               ERRMSG("Can't seek a file(%s). %s\n",
-                   info->name_dumpfile, strerror(errno));
-               return FALSE;
-       }
-       if (write(info->fd_dumpfile, &dh, sizeof(dh)) != sizeof(dh)) {
+       if (pwrite(info->fd_dumpfile, &dh, sizeof(dh), 0x0) != sizeof(dh)) {
                ERRMSG("Can't write a file(%s). %s\n",
                    info->name_dumpfile, strerror(errno));
                return FALSE;
@@ -8435,12 +8337,8 @@ reassemble_kdump_header(void)
        kh.start_pfn_64 = 0;
        kh.end_pfn_64 = 0;
 
-       if (lseek(info->fd_dumpfile, info->page_size, SEEK_SET) < 0) {
-               ERRMSG("Can't seek a file(%s). %s\n",
-                   info->name_dumpfile, strerror(errno));
-               return FALSE;
-       }
-       if (write(info->fd_dumpfile, &kh, sizeof(kh)) != sizeof(kh)) {
+       if (pwrite(info->fd_dumpfile, &kh, sizeof(kh), info->page_size)
+                       != sizeof(kh)) {
                ERRMSG("Can't write a file(%s). %s\n",
                    info->name_dumpfile, strerror(errno));
                return FALSE;
@@ -8623,22 +8521,12 @@ reassemble_kdump_pages(void)
 
                        print_progress(PROGRESS_COPY, num_dumped, num_dumpable);
 
-                       if (lseek(fd, offset_ph_org, SEEK_SET) < 0) {
-                               ERRMSG("Can't seek a file(%s). %s\n",
-                                   SPLITTING_DUMPFILE(i), strerror(errno));
-                               goto out;
-                       }
-                       if (read(fd, &pd, sizeof(pd)) != sizeof(pd)) {
+                       if (pread(fd, &pd, sizeof(pd)) != sizeof(pd), 
offset_ph_org) {
                                ERRMSG("Can't read a file(%s). %s\n",
                                    SPLITTING_DUMPFILE(i), strerror(errno));
                                goto out;
                        }
-                       if (lseek(fd, pd.offset, SEEK_SET) < 0) {
-                               ERRMSG("Can't seek a file(%s). %s\n",
-                                   SPLITTING_DUMPFILE(i), strerror(errno));
-                               goto out;
-                       }
-                       if (read(fd, data, pd.size) != pd.size) {
+                       if (pread(fd, data, pd.size, pd.offset) != pd.size) {
                                ERRMSG("Can't read a file(%s). %s\n",
                                    SPLITTING_DUMPFILE(i), strerror(errno));
                                goto out;
@@ -8692,13 +8580,9 @@ reassemble_kdump_pages(void)
                            SPLITTING_DUMPFILE(i), strerror(errno));
                        goto out;
                }
-               if (lseek(fd, SPLITTING_OFFSET_EI(i), SEEK_SET) < 0) {
-                       ERRMSG("Can't seek a file(%s). %s\n",
-                           SPLITTING_DUMPFILE(i), strerror(errno));
-                       goto out;
-               }
-               if (read(fd, data, SPLITTING_SIZE_EI(i)) !=
-                                               SPLITTING_SIZE_EI(i)) {
+               if (pread(fd, data, SPLITTING_SIZE_EI(i),
+                                       SPLITTING_OFFSET_EI(i))
+                               != SPLITTING_SIZE_EI(i)) {
                        ERRMSG("Can't read a file(%s). %s\n",
                            SPLITTING_DUMPFILE(i), strerror(errno));
                        goto out;
-- 
1.8.4


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

Reply via email to