diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-07-19 03:32:38 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-07-19 03:32:38 +0200 |
commit | 9150d2773fd3412940c7934dbd50dff01334434f (patch) | |
tree | 361fbf6e49f5e199ababa5a37e2bf7d05130864c /sys/src/cmd/fcp.c | |
parent | 1d936770706311a00f52aef6dd5cfae76c6377b9 (diff) |
fcp: use iounit() to determine buffer size, reduce number of worker procs to 8
Diffstat (limited to 'sys/src/cmd/fcp.c')
-rw-r--r-- | sys/src/cmd/fcp.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/sys/src/cmd/fcp.c b/sys/src/cmd/fcp.c index aacab8466..d820fe9dc 100644 --- a/sys/src/cmd/fcp.c +++ b/sys/src/cmd/fcp.c @@ -1,8 +1,9 @@ #include <u.h> #include <libc.h> #define DEFB (8*1024) -#define Nwork 16 +#define Nwork 8 +int buflen; int failed; int gflag; int uflag; @@ -130,6 +131,11 @@ copy(char *from, char *to, int todir) failed = 1; return; } + + buflen = iounit(fdf); + if(buflen <= 0) + buflen = DEFB; + if(copy1(fdf, fdt, from, to)==0 && (xflag || gflag || uflag)){ nulldir(&dirt); if(xflag){ @@ -191,11 +197,16 @@ copy1(int fdf, int fdt, char *from, char *to) void worker(int fdf, int fdt, char *from, char *to) { - char buf[DEFB], *bp; + char *buf, *bp; long len, n; vlong o; - len = sizeof(buf); + len = buflen; + buf = malloc(len); + if(buf == nil){ + fprint(2, "out of memory\n"); + _exits(nil); + } bp = buf; o = nextoff(); @@ -212,11 +223,13 @@ worker(int fdf, int fdt, char *from, char *to) o += n; len -= n; if(len == 0){ - len = sizeof buf; + len = buflen; bp = buf; o = nextoff(); } } + + free(buf); _exits(nil); } @@ -227,7 +240,7 @@ nextoff(void) qlock(&lk); o = off; - off += DEFB; + off += buflen; qunlock(&lk); return o; |