ref: 88412aa050adddde5cacf3a45e914bad9a5d3e22
dir: /sys/src/cmd/venti/srv/zeropart.c/
#include "stdinc.h" #include "dat.h" #include "fns.h" void zeropart(Part *part, int blocksize) { ZBlock *b; u64int addr; int w; fprint(2, "clearing %s\n", part->name); b = alloczblock(MaxIoSize, 1, blocksize); w = 0; for(addr = PartBlank; addr + MaxIoSize <= part->size; addr += MaxIoSize){ if(writepart(part, addr, b->data, MaxIoSize) < 0) sysfatal("can't initialize %s, writing block %d failed: %r", part->name, w); w++; } for(; addr + blocksize <= part->size; addr += blocksize) if(writepart(part, addr, b->data, blocksize) < 0) sysfatal("can't initialize %s: %r", part->name); if(flushpart(part) < 0) sysfatal("can't flush writes to %s: %r", part->name); freezblock(b); }