URI: 
       tventi: disk i/o fixes and tweaks - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit afaa1397f3b6fd24329c21a871f40f01bb70f130
   DIR parent 3b06b757665bbec4bf2617e7e0ed0db8e96eeada
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Tue, 23 Dec 2008 12:39:06 -0800
       
       venti: disk i/o fixes and tweaks
       
       Diffstat:
         M src/cmd/venti/srv/part.c            |      25 +++++++++++++++++--------
       
       1 file changed, 17 insertions(+), 8 deletions(-)
       ---
   DIR diff --git a/src/cmd/venti/srv/part.c b/src/cmd/venti/srv/part.c
       t@@ -141,10 +141,13 @@ initpart(char *name, int mode)
                }
                if(dir->length == 0){
                        free(dir);
       -                freepart(part);
       -                seterr(EOk, "can't determine size of partition %s", file);
       -                free(file);
       -                return nil;
       +                dir = dirstat(file);
       +                if(dir == nil || dir->length == 0) {
       +                        freepart(part);
       +                        seterr(EOk, "can't determine size of partition %s", file);
       +                        free(file);
       +                        return nil;
       +                }
                }
                if(dir->length < hi || dir->length < lo){
                        freepart(part);
       t@@ -159,7 +162,7 @@ initpart(char *name, int mode)
        #ifdef CANBLOCKSIZE
                {
                        struct statfs sfs;
       -                if(fstatfs(part->fd, &sfs) >= 0)
       +                if(fstatfs(part->fd, &sfs) >= 0 && sfs.f_bsize > 512)
                                part->fsblocksize = sfs.f_bsize;
                }
        #endif
       t@@ -229,7 +232,7 @@ prwb(char *name, int fd, int isread, u64int offset, void *vbuf, u32int count, u3
                char *op;
                u8int *buf, *freetmp, *dst;
                u32int icount, opsize;
       -        int r;
       +        int r, count1;
        
        
        #ifndef PLAN9PORT
       t@@ -286,6 +289,7 @@ prwb(char *name, int fd, int isread, u64int offset, void *vbuf, u32int count, u3
                                dst = tmp;
                                offset = offset-delta;
                                op = "read";
       +                        count1 = blocksize;
                                goto Error;
                        }
                        c = min(count, blocksize-delta);
       t@@ -298,6 +302,7 @@ prwb(char *name, int fd, int isread, u64int offset, void *vbuf, u32int count, u3
                                        dst = tmp;
                                        offset = offset-delta;
                                        op = "read";
       +                                count1 = blocksize;
                                        goto Error;
                                }
                        }
       t@@ -323,6 +328,7 @@ prwb(char *name, int fd, int isread, u64int offset, void *vbuf, u32int count, u3
                        if(isread){
                                if((r=pread(fd, dst, opsize, offset))<=0 || r%blocksize){
                                        op = "read";
       +                                count1 = opsize;
                                        goto Error;
                                }
                                if(dst == tmp){
       t@@ -335,6 +341,7 @@ prwb(char *name, int fd, int isread, u64int offset, void *vbuf, u32int count, u3
                                        memmove(dst, buf, blocksize);
                                }
                                if((r=pwrite(fd, dst, opsize, offset))<=0 || r%blocksize){
       +                                count1 = opsize;
                                        op = "write";
                                        goto Error;
                                }
       t@@ -362,14 +369,16 @@ prwb(char *name, int fd, int isread, u64int offset, void *vbuf, u32int count, u3
        print("FAILED isread=%d r=%d count=%d blocksize=%d\n", isread, r, count, blocksize);
                                dst = tmp;
                                op = "read";
       +                        count1 = blocksize;
                                goto Error;
                        }
                        if(isread)
                                memmove(buf, tmp, count);
                        else{
                                memmove(tmp, buf, count);
       -                        if(pwrite(fd, tmp, opsize, offset) != blocksize){
       +                        if(pwrite(fd, tmp, blocksize, offset) != blocksize){
                                        dst = tmp;
       +                                count1 = blocksize;
                                        op = "write";
                                        goto Error;
                                }
       t@@ -382,7 +391,7 @@ print("FAILED isread=%d r=%d count=%d blocksize=%d\n", isread, r, count, blocksi
        
        Error:
                seterr(EAdmin, "%s %s offset 0x%llux count %ud buf %p returned %d: %r",
       -                op, name, offset, opsize, dst, r);
       +                op, name, offset, count1, dst, r);
                if(freetmp)
                        free(freetmp);
                return -1;