Previously crash use lseek/read for kcore and vmcore reading, this involves 2
syscalls. And we can replace them with pread, only 1 syscall is needed for
kcore/vmcore reading, and we can have a better performance. Please note there
are plenty of places in crash using lseek/read, this patch doesn't modify all
of them, just the most commonly used kcore and diskdump vmcore reading.
Signed-off-by: Tao Liu <ltao(a)redhat.com>
---
diskdump.c | 11 ++---------
netdump.c | 5 +----
2 files changed, 3 insertions(+), 13 deletions(-)
diff --git a/diskdump.c b/diskdump.c
index cf5f5d9..acf79f2 100644
--- a/diskdump.c
+++ b/diskdump.c
@@ -515,15 +515,11 @@ arm_kdump_header_adjust(int header_version)
static int
read_pd(int fd, off_t offset, page_desc_t *pd)
{
- const off_t failed = (off_t)-1;
-
if (FLAT_FORMAT()) {
if (!read_flattened_format(fd, offset, pd, sizeof(*pd)))
return READ_ERROR;
} else {
- if (lseek(fd, offset, SEEK_SET) == failed)
- return SEEK_ERROR;
- if (read(fd, pd, sizeof(*pd)) != sizeof(*pd))
+ if (pread(fd, pd, sizeof(*pd), offset) != sizeof(*pd))
return READ_ERROR;
}
@@ -1125,7 +1121,6 @@ cache_page(physaddr_t paddr)
off_t seek_offset;
page_desc_t pd;
const int block_size = dd->block_size;
- const off_t failed = (off_t)-1;
ulong retlen;
#ifdef ZSTD
static ZSTD_DCtx *dctx = NULL;
@@ -1190,9 +1185,7 @@ cache_page(physaddr_t paddr)
return PAGE_INCOMPLETE;
}
} else {
- if (lseek(dd->dfd, pd.offset, SEEK_SET) == failed)
- return SEEK_ERROR;
- if (read(dd->dfd, dd->compressed_page, pd.size) != pd.size)
+ if (pread(dd->dfd, dd->compressed_page, pd.size, pd.offset) != pd.size)
return READ_ERROR;
}
diff --git a/netdump.c b/netdump.c
index 01af145..e76807a 100644
--- a/netdump.c
+++ b/netdump.c
@@ -4436,10 +4436,7 @@ read_proc_kcore(int fd, void *bufptr, int cnt, ulong addr,
physaddr_t paddr)
if (offset == UNINITIALIZED)
return SEEK_ERROR;
- if (lseek(fd, offset, SEEK_SET) != offset)
- perror("lseek");
-
- if (read(fd, bufptr, readcnt) != readcnt)
+ if (pread(fd, bufptr, readcnt, offset) != readcnt)
return READ_ERROR;
return cnt;
--
2.33.1