aboutsummaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ffs
diff options
context:
space:
mode:
authorEdward Tomasz Napierala <trasz@FreeBSD.org>2018-12-15 11:36:20 +0000
committerEdward Tomasz Napierala <trasz@FreeBSD.org>2018-12-15 11:36:20 +0000
commit04e5c6f18aa2008bbc7095368876873150f36b8c (patch)
tree91f403d2842ea5318fe66e553d73d4a87eea6fc5 /sbin/fsck_ffs
parentb329fb28850f9d4ba023d65beee8399cfc865c40 (diff)
downloadsrc-04e5c6f18aa2008bbc7095368876873150f36b8c.tar.gz
src-04e5c6f18aa2008bbc7095368876873150f36b8c.zip
Make fsck(8) use pread(2). This cuts the number of syscalls by half.
Reviewed by: kib, mckusick MFC after: 2 weeks Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D17586
Notes
Notes: svn path=/head/; revision=342115
Diffstat (limited to 'sbin/fsck_ffs')
-rw-r--r--sbin/fsck_ffs/fsutil.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/sbin/fsck_ffs/fsutil.c b/sbin/fsck_ffs/fsutil.c
index 117698a09c32..98db9e2d50f5 100644
--- a/sbin/fsck_ffs/fsutil.c
+++ b/sbin/fsck_ffs/fsutil.c
@@ -576,9 +576,7 @@ blread(int fd, char *buf, ufs2_daddr_t blk, long size)
slowio_start();
totalreads++;
diskreads++;
- if (lseek(fd, offset, 0) < 0)
- rwerror("SEEK BLK", blk);
- else if (read(fd, buf, (int)size) == size) {
+ if (pread(fd, buf, (int)size, offset) == size) {
if (bkgrdflag)
slowio_end();
return (0);
@@ -595,14 +593,11 @@ blread(int fd, char *buf, ufs2_daddr_t blk, long size)
} else
rwerror("READ BLK", blk);
- if (lseek(fd, offset, 0) < 0)
- rwerror("SEEK BLK", blk);
errs = 0;
memset(buf, 0, (size_t)size);
printf("THE FOLLOWING DISK SECTORS COULD NOT BE READ:");
for (cp = buf, i = 0; i < size; i += secsize, cp += secsize) {
- if (read(fd, cp, (int)secsize) != secsize) {
- (void)lseek(fd, offset + i + secsize, 0);
+ if (pread(fd, cp, (int)secsize, offset + i) != secsize) {
if (secsize != dev_bsize && dev_bsize != 1)
printf(" %jd (%jd),",
(intmax_t)(blk * dev_bsize + i) / secsize,
@@ -629,22 +624,16 @@ blwrite(int fd, char *buf, ufs2_daddr_t blk, ssize_t size)
return;
offset = blk;
offset *= dev_bsize;
- if (lseek(fd, offset, 0) < 0)
- rwerror("SEEK BLK", blk);
- else if (write(fd, buf, size) == size) {
+ if (pwrite(fd, buf, size, offset) == size) {
fsmodified = 1;
return;
}
resolved = 0;
rwerror("WRITE BLK", blk);
- if (lseek(fd, offset, 0) < 0)
- rwerror("SEEK BLK", blk);
printf("THE FOLLOWING SECTORS COULD NOT BE WRITTEN:");
for (cp = buf, i = 0; i < size; i += dev_bsize, cp += dev_bsize)
- if (write(fd, cp, dev_bsize) != dev_bsize) {
- (void)lseek(fd, offset + i + dev_bsize, 0);
+ if (pwrite(fd, cp, dev_bsize, offset + i) != dev_bsize)
printf(" %jd,", (intmax_t)blk + i / dev_bsize);
- }
printf("\n");
return;
}