diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-04-30 18:44:29 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-04-30 18:44:29 +0000 |
commit | d24b5a7a0e45186f13d19ddefde62b0932726e42 (patch) | |
tree | a3cfeee8dd915bbd60e9f6be96c7318f81e1dfd1 /sys/src/cmd/dossrv/devio.c | |
parent | 101b3c2724779fcb0e503ae274abd7b751a3a48f (diff) |
dossrv: Implement support for != 512 sector and track sizes
The iotrack buffer layer always assumed 512 byte sector
size and 9 sectors per track.
To support 4K sector size fats, make the iotrack code
deal with it.
Instead of the fixed size Track structure, we just allocate
the pointers and buffers dynamically, and move the sector
size and tack size in the Xfs structure.
Tracks can still be reused between differnet file-systems
after a purgetrack().
The initial fat header has to be read with devread()
instead of getsect() to determine the sector/track size
of the file-system.
Diffstat (limited to 'sys/src/cmd/dossrv/devio.c')
-rw-r--r-- | sys/src/cmd/dossrv/devio.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/sys/src/cmd/dossrv/devio.c b/sys/src/cmd/dossrv/devio.c index 5193bdafd..2caaaa064 100644 --- a/sys/src/cmd/dossrv/devio.c +++ b/sys/src/cmd/dossrv/devio.c @@ -7,7 +7,7 @@ int readonly; static int -deverror(char *name, Xfs *xf, long addr, long n, long nret) +deverror(char *name, Xfs *xf, vlong addr, long n, long nret) { errno = Eio; if(nret < 0){ @@ -16,7 +16,7 @@ deverror(char *name, Xfs *xf, long addr, long n, long nret) xf->dev = -1; return -1; } - fprint(2, "dev %d sector %ld, %s: %ld, should be %ld\n", xf->dev, addr, name, nret, n); + fprint(2, "dev %d sector %lld, %s: %ld, should be %ld\n", xf->dev, addr, name, nret, n); return -1; } @@ -27,7 +27,7 @@ devread(Xfs *xf, vlong addr, void *buf, long n) if(xf->dev < 0) return -1; - nread = pread(xf->dev, buf, n, xf->offset+addr*Sectorsize); + nread = pread(xf->dev, buf, n, xf->offset+addr*xf->sectsize); if (nread == n) return 0; return deverror("read", xf, addr, n, nread); @@ -43,23 +43,8 @@ devwrite(Xfs *xf, vlong addr, void *buf, long n) if(xf->dev < 0) return -1; - nwrite = pwrite(xf->dev, buf, n, xf->offset+addr*Sectorsize); + nwrite = pwrite(xf->dev, buf, n, xf->offset+addr*xf->sectsize); if (nwrite == n) return 0; return deverror("write", xf, addr, n, nwrite); } - -int -devcheck(Xfs *xf) -{ - char buf[Sectorsize]; - - if(xf->dev < 0) - return -1; - if(pread(xf->dev, buf, Sectorsize, 0) != Sectorsize){ - close(xf->dev); - xf->dev = -1; - return -1; - } - return 0; -} |