ref: 890261c2cb61659dbf00e439afde6c259cf0ab20
parent: bd0cfbf36ea4c688811b642eebedcfeeb541bfbc
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun Nov 18 07:53:31 EST 2012
hjfs: eleminate seek syscalls reduce syscalls by using pread/pwrite instead of seek/read/write.
--- a/sys/src/cmd/hjfs/dev.c
+++ b/sys/src/cmd/hjfs/dev.c
@@ -30,20 +30,27 @@
b->error = Einval;
goto reply;
}
- seek(d->fd, b->off * BLOCK, 0);
b->error = nil;
if(b->op & BWRITE){memset(buf, 0, sizeof(buf));
pack(b, buf);
- if(write(d->fd, buf, BLOCK) < BLOCK){+ if(pwrite(d->fd, buf, BLOCK, b->off*BLOCK) < BLOCK){ dprint("hjfs: write: %r\n");b->error = Eio;
}
}else{- if(readn(d->fd, buf, BLOCK) < 0){- dprint("hjfs: read: %r\n");+ int n, m;
+
+ for(n = 0; n < BLOCK; n += m){+ m = pread(d->fd, buf+n, BLOCK-n, b->off*BLOCK+n);
+ if(m < 0)
+ dprint("hjfs: read: %r\n");+ if(m <= 0)
+ break;
+ }
+ if(n < BLOCK)
b->error = Eio;
- }else
+ else
unpack(b, buf);
}
reply:
--
⑨