zeropart.c 877 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "stdinc.h"
  2. #include "dat.h"
  3. #include "fns.h"
  4. int chattyzero;
  5. enum
  6. {
  7. HugeIoSize = 2*1024*1024
  8. };
  9. void
  10. zeroPart(Part *part, int blockSize)
  11. {
  12. ZBlock *b;
  13. u64int addr;
  14. int w;
  15. int iosize;
  16. iosize = HugeIoSize;
  17. {char *p = getenv("XXXIOSIZE"); if(p) iosize = atoi(p); assert(iosize>0);}
  18. fprint(2, "clearing the partition\n");
  19. b = allocZBlock(iosize, 1);
  20. w = 0;
  21. for(addr = PartBlank; addr + iosize <= part->size; addr += iosize){
  22. if(!writePart(part, addr, b->data, iosize))
  23. fatal("can't initialize %s, writing block %d failed: %r", part->name, w);
  24. w++;
  25. if(chattyzero)
  26. print("%lld %lld\n", addr, part->size);
  27. }
  28. for(; addr + blockSize <= part->size; addr += blockSize){
  29. if(!writePart(part, addr, b->data, blockSize))
  30. fatal("can't initialize %s: %r", part->name);
  31. if(chattyzero)
  32. print("%lld %lld\n", addr, part->size);
  33. }
  34. freeZBlock(b);
  35. }