123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "logfsos.h"
- #include "logfs.h"
- #include "nandfs.h"
- #include "local.h"
- char *
- nandfsformatblock(Nandfs *nandfs, long absblock, uchar tag, ulong path, long baseblock, long sizeinblocks, int xcount, long *xdata, void *llsave, int *markedbad)
- {
- int page;
- char *rv;
- NandfsTags t;
- int ppb;
- if (markedbad)
- *markedbad = 0;
- t.tag = tag;
- t.magic = LogfsMagic;
- t.nerase = *(ulong *)llsave < NandfsNeraseMask ? *(ulong *)llsave + 1 : 1;
- ppb = 1 << nandfs->ll.l2pagesperblock;
- for (page = 0, rv = nil; rv == nil && page < ppb; page++) {
- if (tag == LogfsTboot && page > 0 && page < xcount + 3) {
- switch (page) {
- case 1:
- t.path = baseblock;
- break;
- case 2:
- t.path = sizeinblocks;
- break;
- default:
- t.path = xdata[page - 3];
- break;
- }
- }
- else
- t.path = path;
- rv = nandfswritepageauxiliary(nandfs, &t, absblock, page);
- if (rv)
- break;
- }
- if (rv) {
- if (strcmp(rv, Eio) != 0)
- return rv;
- if (markedbad) {
- *markedbad = 1;
- rv = nandfsmarkabsblockbad(nandfs, absblock);
- if (strcmp(rv, Eio) != 0)
- return rv;
- return nil;
- }
- return rv;
- }
-
- return nil;
- }
|