linux/fs/jffs2/scan.c
<<
>>
Prefs
   1/*
   2 * JFFS2 -- Journalling Flash File System, Version 2.
   3 *
   4 * Copyright © 2001-2007 Red Hat, Inc.
   5 *
   6 * Created by David Woodhouse <dwmw2@infradead.org>
   7 *
   8 * For licensing information, see the file 'LICENCE' in this directory.
   9 *
  10 */
  11
  12#include <linux/kernel.h>
  13#include <linux/sched.h>
  14#include <linux/slab.h>
  15#include <linux/mtd/mtd.h>
  16#include <linux/pagemap.h>
  17#include <linux/crc32.h>
  18#include <linux/compiler.h>
  19#include "nodelist.h"
  20#include "summary.h"
  21#include "debug.h"
  22
  23#define DEFAULT_EMPTY_SCAN_SIZE 256
  24
  25#define noisy_printk(noise, args...) do { \
  26        if (*(noise)) { \
  27                printk(KERN_NOTICE args); \
  28                 (*(noise))--; \
  29                 if (!(*(noise))) { \
  30                         printk(KERN_NOTICE "Further such events for this erase block will not be printed\n"); \
  31                 } \
  32        } \
  33} while(0)
  34
  35static uint32_t pseudo_random;
  36
  37static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  38                                  unsigned char *buf, uint32_t buf_size, struct jffs2_summary *s);
  39
  40/* These helper functions _must_ increase ofs and also do the dirty/used space accounting.
  41 * Returning an error will abort the mount - bad checksums etc. should just mark the space
  42 * as dirty.
  43 */
  44static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  45                                 struct jffs2_raw_inode *ri, uint32_t ofs, struct jffs2_summary *s);
  46static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  47                                 struct jffs2_raw_dirent *rd, uint32_t ofs, struct jffs2_summary *s);
  48
  49static inline int min_free(struct jffs2_sb_info *c)
  50{
  51        uint32_t min = 2 * sizeof(struct jffs2_raw_inode);
  52#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
  53        if (!jffs2_can_mark_obsolete(c) && min < c->wbuf_pagesize)
  54                return c->wbuf_pagesize;
  55#endif
  56        return min;
  57
  58}
  59
  60static inline uint32_t EMPTY_SCAN_SIZE(uint32_t sector_size) {
  61        if (sector_size < DEFAULT_EMPTY_SCAN_SIZE)
  62                return sector_size;
  63        else
  64                return DEFAULT_EMPTY_SCAN_SIZE;
  65}
  66
  67static int file_dirty(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
  68{
  69        int ret;
  70
  71        if ((ret = jffs2_prealloc_raw_node_refs(c, jeb, 1)))
  72                return ret;
  73        if ((ret = jffs2_scan_dirty_space(c, jeb, jeb->free_size)))
  74                return ret;
  75        /* Turned wasted size into dirty, since we apparently 
  76           think it's recoverable now. */
  77        jeb->dirty_size += jeb->wasted_size;
  78        c->dirty_size += jeb->wasted_size;
  79        c->wasted_size -= jeb->wasted_size;
  80        jeb->wasted_size = 0;
  81        if (VERYDIRTY(c, jeb->dirty_size)) {
  82                list_add(&jeb->list, &c->very_dirty_list);
  83        } else {
  84                list_add(&jeb->list, &c->dirty_list);
  85        }
  86        return 0;
  87}
  88
  89int jffs2_scan_medium(struct jffs2_sb_info *c)
  90{
  91        int i, ret;
  92        uint32_t empty_blocks = 0, bad_blocks = 0;
  93        unsigned char *flashbuf = NULL;
  94        uint32_t buf_size = 0;
  95        struct jffs2_summary *s = NULL; /* summary info collected by the scan process */
  96#ifndef __ECOS
  97        size_t pointlen, try_size;
  98
  99        if (c->mtd->point) {
 100                ret = c->mtd->point(c->mtd, 0, c->mtd->size, &pointlen,
 101                                    (void **)&flashbuf, NULL);
 102                if (!ret && pointlen < c->mtd->size) {
 103                        /* Don't muck about if it won't let us point to the whole flash */
 104                        D1(printk(KERN_DEBUG "MTD point returned len too short: 0x%zx\n", pointlen));
 105                        c->mtd->unpoint(c->mtd, 0, pointlen);
 106                        flashbuf = NULL;
 107                }
 108                if (ret)
 109                        D1(printk(KERN_DEBUG "MTD point failed %d\n", ret));
 110        }
 111#endif
 112        if (!flashbuf) {
 113                /* For NAND it's quicker to read a whole eraseblock at a time,
 114                   apparently */
 115                if (jffs2_cleanmarker_oob(c))
 116                        try_size = c->sector_size;
 117                else
 118                        try_size = PAGE_SIZE;
 119
 120                D1(printk(KERN_DEBUG "Trying to allocate readbuf of %zu "
 121                        "bytes\n", try_size));
 122
 123                flashbuf = mtd_kmalloc_up_to(c->mtd, &try_size);
 124                if (!flashbuf)
 125                        return -ENOMEM;
 126
 127                D1(printk(KERN_DEBUG "Allocated readbuf of %zu bytes\n",
 128                        try_size));
 129
 130                buf_size = (uint32_t)try_size;
 131        }
 132
 133        if (jffs2_sum_active()) {
 134                s = kzalloc(sizeof(struct jffs2_summary), GFP_KERNEL);
 135                if (!s) {
 136                        JFFS2_WARNING("Can't allocate memory for summary\n");
 137                        ret = -ENOMEM;
 138                        goto out;
 139                }
 140        }
 141
 142        for (i=0; i<c->nr_blocks; i++) {
 143                struct jffs2_eraseblock *jeb = &c->blocks[i];
 144
 145                cond_resched();
 146
 147                /* reset summary info for next eraseblock scan */
 148                jffs2_sum_reset_collected(s);
 149
 150                ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
 151                                                buf_size, s);
 152
 153                if (ret < 0)
 154                        goto out;
 155
 156                jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
 157
 158                /* Now decide which list to put it on */
 159                switch(ret) {
 160                case BLK_STATE_ALLFF:
 161                        /*
 162                         * Empty block.   Since we can't be sure it
 163                         * was entirely erased, we just queue it for erase
 164                         * again.  It will be marked as such when the erase
 165                         * is complete.  Meanwhile we still count it as empty
 166                         * for later checks.
 167                         */
 168                        empty_blocks++;
 169                        list_add(&jeb->list, &c->erase_pending_list);
 170                        c->nr_erasing_blocks++;
 171                        break;
 172
 173                case BLK_STATE_CLEANMARKER:
 174                        /* Only a CLEANMARKER node is valid */
 175                        if (!jeb->dirty_size) {
 176                                /* It's actually free */
 177                                list_add(&jeb->list, &c->free_list);
 178                                c->nr_free_blocks++;
 179                        } else {
 180                                /* Dirt */
 181                                D1(printk(KERN_DEBUG "Adding all-dirty block at 0x%08x to erase_pending_list\n", jeb->offset));
 182                                list_add(&jeb->list, &c->erase_pending_list);
 183                                c->nr_erasing_blocks++;
 184                        }
 185                        break;
 186
 187                case BLK_STATE_CLEAN:
 188                        /* Full (or almost full) of clean data. Clean list */
 189                        list_add(&jeb->list, &c->clean_list);
 190                        break;
 191
 192                case BLK_STATE_PARTDIRTY:
 193                        /* Some data, but not full. Dirty list. */
 194                        /* We want to remember the block with most free space
 195                        and stick it in the 'nextblock' position to start writing to it. */
 196                        if (jeb->free_size > min_free(c) &&
 197                                        (!c->nextblock || c->nextblock->free_size < jeb->free_size)) {
 198                                /* Better candidate for the next writes to go to */
 199                                if (c->nextblock) {
 200                                        ret = file_dirty(c, c->nextblock);
 201                                        if (ret)
 202                                                goto out;
 203                                        /* deleting summary information of the old nextblock */
 204                                        jffs2_sum_reset_collected(c->summary);
 205                                }
 206                                /* update collected summary information for the current nextblock */
 207                                jffs2_sum_move_collected(c, s);
 208                                D1(printk(KERN_DEBUG "jffs2_scan_medium(): new nextblock = 0x%08x\n", jeb->offset));
 209                                c->nextblock = jeb;
 210                        } else {
 211                                ret = file_dirty(c, jeb);
 212                                if (ret)
 213                                        goto out;
 214                        }
 215                        break;
 216
 217                case BLK_STATE_ALLDIRTY:
 218                        /* Nothing valid - not even a clean marker. Needs erasing. */
 219                        /* For now we just put it on the erasing list. We'll start the erases later */
 220                        D1(printk(KERN_NOTICE "JFFS2: Erase block at 0x%08x is not formatted. It will be erased\n", jeb->offset));
 221                        list_add(&jeb->list, &c->erase_pending_list);
 222                        c->nr_erasing_blocks++;
 223                        break;
 224
 225                case BLK_STATE_BADBLOCK:
 226                        D1(printk(KERN_NOTICE "JFFS2: Block at 0x%08x is bad\n", jeb->offset));
 227                        list_add(&jeb->list, &c->bad_list);
 228                        c->bad_size += c->sector_size;
 229                        c->free_size -= c->sector_size;
 230                        bad_blocks++;
 231                        break;
 232                default:
 233                        printk(KERN_WARNING "jffs2_scan_medium(): unknown block state\n");
 234                        BUG();
 235                }
 236        }
 237
 238        /* Nextblock dirty is always seen as wasted, because we cannot recycle it now */
 239        if (c->nextblock && (c->nextblock->dirty_size)) {
 240                c->nextblock->wasted_size += c->nextblock->dirty_size;
 241                c->wasted_size += c->nextblock->dirty_size;
 242                c->dirty_size -= c->nextblock->dirty_size;
 243                c->nextblock->dirty_size = 0;
 244        }
 245#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
 246        if (!jffs2_can_mark_obsolete(c) && c->wbuf_pagesize && c->nextblock && (c->nextblock->free_size % c->wbuf_pagesize)) {
 247                /* If we're going to start writing into a block which already
 248                   contains data, and the end of the data isn't page-aligned,
 249                   skip a little and align it. */
 250
 251                uint32_t skip = c->nextblock->free_size % c->wbuf_pagesize;
 252
 253                D1(printk(KERN_DEBUG "jffs2_scan_medium(): Skipping %d bytes in nextblock to ensure page alignment\n",
 254                          skip));
 255                jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
 256                jffs2_scan_dirty_space(c, c->nextblock, skip);
 257        }
 258#endif
 259        if (c->nr_erasing_blocks) {
 260                if ( !c->used_size && ((c->nr_free_blocks+empty_blocks+bad_blocks)!= c->nr_blocks || bad_blocks == c->nr_blocks) ) {
 261                        printk(KERN_NOTICE "Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes\n");
 262                        printk(KERN_NOTICE "empty_blocks %d, bad_blocks %d, c->nr_blocks %d\n",empty_blocks,bad_blocks,c->nr_blocks);
 263                        ret = -EIO;
 264                        goto out;
 265                }
 266                spin_lock(&c->erase_completion_lock);
 267                jffs2_garbage_collect_trigger(c);
 268                spin_unlock(&c->erase_completion_lock);
 269        }
 270        ret = 0;
 271 out:
 272        if (buf_size)
 273                kfree(flashbuf);
 274#ifndef __ECOS
 275        else
 276                c->mtd->unpoint(c->mtd, 0, c->mtd->size);
 277#endif
 278        if (s)
 279                kfree(s);
 280
 281        return ret;
 282}
 283
 284static int jffs2_fill_scan_buf(struct jffs2_sb_info *c, void *buf,
 285                               uint32_t ofs, uint32_t len)
 286{
 287        int ret;
 288        size_t retlen;
 289
 290        ret = jffs2_flash_read(c, ofs, len, &retlen, buf);
 291        if (ret) {
 292                D1(printk(KERN_WARNING "mtd->read(0x%x bytes from 0x%x) returned %d\n", len, ofs, ret));
 293                return ret;
 294        }
 295        if (retlen < len) {
 296                D1(printk(KERN_WARNING "Read at 0x%x gave only 0x%zx bytes\n", ofs, retlen));
 297                return -EIO;
 298        }
 299        return 0;
 300}
 301
 302int jffs2_scan_classify_jeb(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
 303{
 304        if ((jeb->used_size + jeb->unchecked_size) == PAD(c->cleanmarker_size) && !jeb->dirty_size
 305            && (!jeb->first_node || !ref_next(jeb->first_node)) )
 306                return BLK_STATE_CLEANMARKER;
 307
 308        /* move blocks with max 4 byte dirty space to cleanlist */
 309        else if (!ISDIRTY(c->sector_size - (jeb->used_size + jeb->unchecked_size))) {
 310                c->dirty_size -= jeb->dirty_size;
 311                c->wasted_size += jeb->dirty_size;
 312                jeb->wasted_size += jeb->dirty_size;
 313                jeb->dirty_size = 0;
 314                return BLK_STATE_CLEAN;
 315        } else if (jeb->used_size || jeb->unchecked_size)
 316                return BLK_STATE_PARTDIRTY;
 317        else
 318                return BLK_STATE_ALLDIRTY;
 319}
 320
 321#ifdef CONFIG_JFFS2_FS_XATTR
 322static int jffs2_scan_xattr_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 323                                 struct jffs2_raw_xattr *rx, uint32_t ofs,
 324                                 struct jffs2_summary *s)
 325{
 326        struct jffs2_xattr_datum *xd;
 327        uint32_t xid, version, totlen, crc;
 328        int err;
 329
 330        crc = crc32(0, rx, sizeof(struct jffs2_raw_xattr) - 4);
 331        if (crc != je32_to_cpu(rx->node_crc)) {
 332                JFFS2_WARNING("node CRC failed at %#08x, read=%#08x, calc=%#08x\n",
 333                              ofs, je32_to_cpu(rx->node_crc), crc);
 334                if ((err = jffs2_scan_dirty_space(c, jeb, je32_to_cpu(rx->totlen))))
 335                        return err;
 336                return 0;
 337        }
 338
 339        xid = je32_to_cpu(rx->xid);
 340        version = je32_to_cpu(rx->version);
 341
 342        totlen = PAD(sizeof(struct jffs2_raw_xattr)
 343                        + rx->name_len + 1 + je16_to_cpu(rx->value_len));
 344        if (totlen != je32_to_cpu(rx->totlen)) {
 345                JFFS2_WARNING("node length mismatch at %#08x, read=%u, calc=%u\n",
 346                              ofs, je32_to_cpu(rx->totlen), totlen);
 347                if ((err = jffs2_scan_dirty_space(c, jeb, je32_to_cpu(rx->totlen))))
 348                        return err;
 349                return 0;
 350        }
 351
 352        xd = jffs2_setup_xattr_datum(c, xid, version);
 353        if (IS_ERR(xd))
 354                return PTR_ERR(xd);
 355
 356        if (xd->version > version) {
 357                struct jffs2_raw_node_ref *raw
 358                        = jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, totlen, NULL);
 359                raw->next_in_ino = xd->node->next_in_ino;
 360                xd->node->next_in_ino = raw;
 361        } else {
 362                xd->version = version;
 363                xd->xprefix = rx->xprefix;
 364                xd->name_len = rx->name_len;
 365                xd->value_len = je16_to_cpu(rx->value_len);
 366                xd->data_crc = je32_to_cpu(rx->data_crc);
 367
 368                jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, totlen, (void *)xd);
 369        }
 370
 371        if (jffs2_sum_active())
 372                jffs2_sum_add_xattr_mem(s, rx, ofs - jeb->offset);
 373        dbg_xattr("scaning xdatum at %#08x (xid=%u, version=%u)\n",
 374                  ofs, xd->xid, xd->version);
 375        return 0;
 376}
 377
 378static int jffs2_scan_xref_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 379                                struct jffs2_raw_xref *rr, uint32_t ofs,
 380                                struct jffs2_summary *s)
 381{
 382        struct jffs2_xattr_ref *ref;
 383        uint32_t crc;
 384        int err;
 385
 386        crc = crc32(0, rr, sizeof(*rr) - 4);
 387        if (crc != je32_to_cpu(rr->node_crc)) {
 388                JFFS2_WARNING("node CRC failed at %#08x, read=%#08x, calc=%#08x\n",
 389                              ofs, je32_to_cpu(rr->node_crc), crc);
 390                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(rr->totlen)))))
 391                        return err;
 392                return 0;
 393        }
 394
 395        if (PAD(sizeof(struct jffs2_raw_xref)) != je32_to_cpu(rr->totlen)) {
 396                JFFS2_WARNING("node length mismatch at %#08x, read=%u, calc=%zd\n",
 397                              ofs, je32_to_cpu(rr->totlen),
 398                              PAD(sizeof(struct jffs2_raw_xref)));
 399                if ((err = jffs2_scan_dirty_space(c, jeb, je32_to_cpu(rr->totlen))))
 400                        return err;
 401                return 0;
 402        }
 403
 404        ref = jffs2_alloc_xattr_ref();
 405        if (!ref)
 406                return -ENOMEM;
 407
 408        /* BEFORE jffs2_build_xattr_subsystem() called, 
 409         * and AFTER xattr_ref is marked as a dead xref,
 410         * ref->xid is used to store 32bit xid, xd is not used
 411         * ref->ino is used to store 32bit inode-number, ic is not used
 412         * Thoes variables are declared as union, thus using those
 413         * are exclusive. In a similar way, ref->next is temporarily
 414         * used to chain all xattr_ref object. It's re-chained to
 415         * jffs2_inode_cache in jffs2_build_xattr_subsystem() correctly.
 416         */
 417        ref->ino = je32_to_cpu(rr->ino);
 418        ref->xid = je32_to_cpu(rr->xid);
 419        ref->xseqno = je32_to_cpu(rr->xseqno);
 420        if (ref->xseqno > c->highest_xseqno)
 421                c->highest_xseqno = (ref->xseqno & ~XREF_DELETE_MARKER);
 422        ref->next = c->xref_temp;
 423        c->xref_temp = ref;
 424
 425        jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, PAD(je32_to_cpu(rr->totlen)), (void *)ref);
 426
 427        if (jffs2_sum_active())
 428                jffs2_sum_add_xref_mem(s, rr, ofs - jeb->offset);
 429        dbg_xattr("scan xref at %#08x (xid=%u, ino=%u)\n",
 430                  ofs, ref->xid, ref->ino);
 431        return 0;
 432}
 433#endif
 434
 435/* Called with 'buf_size == 0' if buf is in fact a pointer _directly_ into
 436   the flash, XIP-style */
 437static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 438                                  unsigned char *buf, uint32_t buf_size, struct jffs2_summary *s) {
 439        struct jffs2_unknown_node *node;
 440        struct jffs2_unknown_node crcnode;
 441        uint32_t ofs, prevofs, max_ofs;
 442        uint32_t hdr_crc, buf_ofs, buf_len;
 443        int err;
 444        int noise = 0;
 445
 446
 447#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
 448        int cleanmarkerfound = 0;
 449#endif
 450
 451        ofs = jeb->offset;
 452        prevofs = jeb->offset - 1;
 453
 454        D1(printk(KERN_DEBUG "jffs2_scan_eraseblock(): Scanning block at 0x%x\n", ofs));
 455
 456#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
 457        if (jffs2_cleanmarker_oob(c)) {
 458                int ret;
 459
 460                if (c->mtd->block_isbad(c->mtd, jeb->offset))
 461                        return BLK_STATE_BADBLOCK;
 462
 463                ret = jffs2_check_nand_cleanmarker(c, jeb);
 464                D2(printk(KERN_NOTICE "jffs_check_nand_cleanmarker returned %d\n",ret));
 465
 466                /* Even if it's not found, we still scan to see
 467                   if the block is empty. We use this information
 468                   to decide whether to erase it or not. */
 469                switch (ret) {
 470                case 0:         cleanmarkerfound = 1; break;
 471                case 1:         break;
 472                default:        return ret;
 473                }
 474        }
 475#endif
 476
 477        if (jffs2_sum_active()) {
 478                struct jffs2_sum_marker *sm;
 479                void *sumptr = NULL;
 480                uint32_t sumlen;
 481              
 482                if (!buf_size) {
 483                        /* XIP case. Just look, point at the summary if it's there */
 484                        sm = (void *)buf + c->sector_size - sizeof(*sm);
 485                        if (je32_to_cpu(sm->magic) == JFFS2_SUM_MAGIC) {
 486                                sumptr = buf + je32_to_cpu(sm->offset);
 487                                sumlen = c->sector_size - je32_to_cpu(sm->offset);
 488                        }
 489                } else {
 490                        /* If NAND flash, read a whole page of it. Else just the end */
 491                        if (c->wbuf_pagesize)
 492                                buf_len = c->wbuf_pagesize;
 493                        else
 494                                buf_len = sizeof(*sm);
 495
 496                        /* Read as much as we want into the _end_ of the preallocated buffer */
 497                        err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len, 
 498                                                  jeb->offset + c->sector_size - buf_len,
 499                                                  buf_len);                             
 500                        if (err)
 501                                return err;
 502
 503                        sm = (void *)buf + buf_size - sizeof(*sm);
 504                        if (je32_to_cpu(sm->magic) == JFFS2_SUM_MAGIC) {
 505                                sumlen = c->sector_size - je32_to_cpu(sm->offset);
 506                                sumptr = buf + buf_size - sumlen;
 507
 508                                /* Now, make sure the summary itself is available */
 509                                if (sumlen > buf_size) {
 510                                        /* Need to kmalloc for this. */
 511                                        sumptr = kmalloc(sumlen, GFP_KERNEL);
 512                                        if (!sumptr)
 513                                                return -ENOMEM;
 514                                        memcpy(sumptr + sumlen - buf_len, buf + buf_size - buf_len, buf_len);
 515                                }
 516                                if (buf_len < sumlen) {
 517                                        /* Need to read more so that the entire summary node is present */
 518                                        err = jffs2_fill_scan_buf(c, sumptr, 
 519                                                                  jeb->offset + c->sector_size - sumlen,
 520                                                                  sumlen - buf_len);                            
 521                                        if (err)
 522                                                return err;
 523                                }
 524                        }
 525
 526                }
 527
 528                if (sumptr) {
 529                        err = jffs2_sum_scan_sumnode(c, jeb, sumptr, sumlen, &pseudo_random);
 530
 531                        if (buf_size && sumlen > buf_size)
 532                                kfree(sumptr);
 533                        /* If it returns with a real error, bail. 
 534                           If it returns positive, that's a block classification
 535                           (i.e. BLK_STATE_xxx) so return that too.
 536                           If it returns zero, fall through to full scan. */
 537                        if (err)
 538                                return err;
 539                }
 540        }
 541
 542        buf_ofs = jeb->offset;
 543
 544        if (!buf_size) {
 545                /* This is the XIP case -- we're reading _directly_ from the flash chip */
 546                buf_len = c->sector_size;
 547        } else {
 548                buf_len = EMPTY_SCAN_SIZE(c->sector_size);
 549                err = jffs2_fill_scan_buf(c, buf, buf_ofs, buf_len);
 550                if (err)
 551                        return err;
 552        }
 553
 554        /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
 555        ofs = 0;
 556        max_ofs = EMPTY_SCAN_SIZE(c->sector_size);
 557        /* Scan only EMPTY_SCAN_SIZE of 0xFF before declaring it's empty */
 558        while(ofs < max_ofs && *(uint32_t *)(&buf[ofs]) == 0xFFFFFFFF)
 559                ofs += 4;
 560
 561        if (ofs == max_ofs) {
 562#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
 563                if (jffs2_cleanmarker_oob(c)) {
 564                        /* scan oob, take care of cleanmarker */
 565                        int ret = jffs2_check_oob_empty(c, jeb, cleanmarkerfound);
 566                        D2(printk(KERN_NOTICE "jffs2_check_oob_empty returned %d\n",ret));
 567                        switch (ret) {
 568                        case 0:         return cleanmarkerfound ? BLK_STATE_CLEANMARKER : BLK_STATE_ALLFF;
 569                        case 1:         return BLK_STATE_ALLDIRTY;
 570                        default:        return ret;
 571                        }
 572                }
 573#endif
 574                D1(printk(KERN_DEBUG "Block at 0x%08x is empty (erased)\n", jeb->offset));
 575                if (c->cleanmarker_size == 0)
 576                        return BLK_STATE_CLEANMARKER;   /* don't bother with re-erase */
 577                else
 578                        return BLK_STATE_ALLFF; /* OK to erase if all blocks are like this */
 579        }
 580        if (ofs) {
 581                D1(printk(KERN_DEBUG "Free space at %08x ends at %08x\n", jeb->offset,
 582                          jeb->offset + ofs));
 583                if ((err = jffs2_prealloc_raw_node_refs(c, jeb, 1)))
 584                        return err;
 585                if ((err = jffs2_scan_dirty_space(c, jeb, ofs)))
 586                        return err;
 587        }
 588
 589        /* Now ofs is a complete physical flash offset as it always was... */
 590        ofs += jeb->offset;
 591
 592        noise = 10;
 593
 594        dbg_summary("no summary found in jeb 0x%08x. Apply original scan.\n",jeb->offset);
 595
 596scan_more:
 597        while(ofs < jeb->offset + c->sector_size) {
 598
 599                jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
 600
 601                /* Make sure there are node refs available for use */
 602                err = jffs2_prealloc_raw_node_refs(c, jeb, 2);
 603                if (err)
 604                        return err;
 605
 606                cond_resched();
 607
 608                if (ofs & 3) {
 609                        printk(KERN_WARNING "Eep. ofs 0x%08x not word-aligned!\n", ofs);
 610                        ofs = PAD(ofs);
 611                        continue;
 612                }
 613                if (ofs == prevofs) {
 614                        printk(KERN_WARNING "ofs 0x%08x has already been seen. Skipping\n", ofs);
 615                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 616                                return err;
 617                        ofs += 4;
 618                        continue;
 619                }
 620                prevofs = ofs;
 621
 622                if (jeb->offset + c->sector_size < ofs + sizeof(*node)) {
 623                        D1(printk(KERN_DEBUG "Fewer than %zd bytes left to end of block. (%x+%x<%x+%zx) Not reading\n", sizeof(struct jffs2_unknown_node),
 624                                  jeb->offset, c->sector_size, ofs, sizeof(*node)));
 625                        if ((err = jffs2_scan_dirty_space(c, jeb, (jeb->offset + c->sector_size)-ofs)))
 626                                return err;
 627                        break;
 628                }
 629
 630                if (buf_ofs + buf_len < ofs + sizeof(*node)) {
 631                        buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
 632                        D1(printk(KERN_DEBUG "Fewer than %zd bytes (node header) left to end of buf. Reading 0x%x at 0x%08x\n",
 633                                  sizeof(struct jffs2_unknown_node), buf_len, ofs));
 634                        err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
 635                        if (err)
 636                                return err;
 637                        buf_ofs = ofs;
 638                }
 639
 640                node = (struct jffs2_unknown_node *)&buf[ofs-buf_ofs];
 641
 642                if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) {
 643                        uint32_t inbuf_ofs;
 644                        uint32_t empty_start, scan_end;
 645
 646                        empty_start = ofs;
 647                        ofs += 4;
 648                        scan_end = min_t(uint32_t, EMPTY_SCAN_SIZE(c->sector_size)/8, buf_len);
 649
 650                        D1(printk(KERN_DEBUG "Found empty flash at 0x%08x\n", ofs));
 651                more_empty:
 652                        inbuf_ofs = ofs - buf_ofs;
 653                        while (inbuf_ofs < scan_end) {
 654                                if (unlikely(*(uint32_t *)(&buf[inbuf_ofs]) != 0xffffffff)) {
 655                                        printk(KERN_WARNING "Empty flash at 0x%08x ends at 0x%08x\n",
 656                                               empty_start, ofs);
 657                                        if ((err = jffs2_scan_dirty_space(c, jeb, ofs-empty_start)))
 658                                                return err;
 659                                        goto scan_more;
 660                                }
 661
 662                                inbuf_ofs+=4;
 663                                ofs += 4;
 664                        }
 665                        /* Ran off end. */
 666                        D1(printk(KERN_DEBUG "Empty flash to end of buffer at 0x%08x\n", ofs));
 667
 668                        /* If we're only checking the beginning of a block with a cleanmarker,
 669                           bail now */
 670                        if (buf_ofs == jeb->offset && jeb->used_size == PAD(c->cleanmarker_size) &&
 671                            c->cleanmarker_size && !jeb->dirty_size && !ref_next(jeb->first_node)) {
 672                                D1(printk(KERN_DEBUG "%d bytes at start of block seems clean... assuming all clean\n", EMPTY_SCAN_SIZE(c->sector_size)));
 673                                return BLK_STATE_CLEANMARKER;
 674                        }
 675                        if (!buf_size && (scan_end != buf_len)) {/* XIP/point case */
 676                                scan_end = buf_len;
 677                                goto more_empty;
 678                        }
 679                        
 680                        /* See how much more there is to read in this eraseblock... */
 681                        buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
 682                        if (!buf_len) {
 683                                /* No more to read. Break out of main loop without marking
 684                                   this range of empty space as dirty (because it's not) */
 685                                D1(printk(KERN_DEBUG "Empty flash at %08x runs to end of block. Treating as free_space\n",
 686                                          empty_start));
 687                                break;
 688                        }
 689                        /* point never reaches here */
 690                        scan_end = buf_len;
 691                        D1(printk(KERN_DEBUG "Reading another 0x%x at 0x%08x\n", buf_len, ofs));
 692                        err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
 693                        if (err)
 694                                return err;
 695                        buf_ofs = ofs;
 696                        goto more_empty;
 697                }
 698
 699                if (ofs == jeb->offset && je16_to_cpu(node->magic) == KSAMTIB_CIGAM_2SFFJ) {
 700                        printk(KERN_WARNING "Magic bitmask is backwards at offset 0x%08x. Wrong endian filesystem?\n", ofs);
 701                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 702                                return err;
 703                        ofs += 4;
 704                        continue;
 705                }
 706                if (je16_to_cpu(node->magic) == JFFS2_DIRTY_BITMASK) {
 707                        D1(printk(KERN_DEBUG "Dirty bitmask at 0x%08x\n", ofs));
 708                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 709                                return err;
 710                        ofs += 4;
 711                        continue;
 712                }
 713                if (je16_to_cpu(node->magic) == JFFS2_OLD_MAGIC_BITMASK) {
 714                        printk(KERN_WARNING "Old JFFS2 bitmask found at 0x%08x\n", ofs);
 715                        printk(KERN_WARNING "You cannot use older JFFS2 filesystems with newer kernels\n");
 716                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 717                                return err;
 718                        ofs += 4;
 719                        continue;
 720                }
 721                if (je16_to_cpu(node->magic) != JFFS2_MAGIC_BITMASK) {
 722                        /* OK. We're out of possibilities. Whinge and move on */
 723                        noisy_printk(&noise, "jffs2_scan_eraseblock(): Magic bitmask 0x%04x not found at 0x%08x: 0x%04x instead\n",
 724                                     JFFS2_MAGIC_BITMASK, ofs,
 725                                     je16_to_cpu(node->magic));
 726                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 727                                return err;
 728                        ofs += 4;
 729                        continue;
 730                }
 731                /* We seem to have a node of sorts. Check the CRC */
 732                crcnode.magic = node->magic;
 733                crcnode.nodetype = cpu_to_je16( je16_to_cpu(node->nodetype) | JFFS2_NODE_ACCURATE);
 734                crcnode.totlen = node->totlen;
 735                hdr_crc = crc32(0, &crcnode, sizeof(crcnode)-4);
 736
 737                if (hdr_crc != je32_to_cpu(node->hdr_crc)) {
 738                        noisy_printk(&noise, "jffs2_scan_eraseblock(): Node at 0x%08x {0x%04x, 0x%04x, 0x%08x) has invalid CRC 0x%08x (calculated 0x%08x)\n",
 739                                     ofs, je16_to_cpu(node->magic),
 740                                     je16_to_cpu(node->nodetype),
 741                                     je32_to_cpu(node->totlen),
 742                                     je32_to_cpu(node->hdr_crc),
 743                                     hdr_crc);
 744                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 745                                return err;
 746                        ofs += 4;
 747                        continue;
 748                }
 749
 750                if (ofs + je32_to_cpu(node->totlen) > jeb->offset + c->sector_size) {
 751                        /* Eep. Node goes over the end of the erase block. */
 752                        printk(KERN_WARNING "Node at 0x%08x with length 0x%08x would run over the end of the erase block\n",
 753                               ofs, je32_to_cpu(node->totlen));
 754                        printk(KERN_WARNING "Perhaps the file system was created with the wrong erase size?\n");
 755                        if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
 756                                return err;
 757                        ofs += 4;
 758                        continue;
 759                }
 760
 761                if (!(je16_to_cpu(node->nodetype) & JFFS2_NODE_ACCURATE)) {
 762                        /* Wheee. This is an obsoleted node */
 763                        D2(printk(KERN_DEBUG "Node at 0x%08x is obsolete. Skipping\n", ofs));
 764                        if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
 765                                return err;
 766                        ofs += PAD(je32_to_cpu(node->totlen));
 767                        continue;
 768                }
 769
 770                switch(je16_to_cpu(node->nodetype)) {
 771                case JFFS2_NODETYPE_INODE:
 772                        if (buf_ofs + buf_len < ofs + sizeof(struct jffs2_raw_inode)) {
 773                                buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
 774                                D1(printk(KERN_DEBUG "Fewer than %zd bytes (inode node) left to end of buf. Reading 0x%x at 0x%08x\n",
 775                                          sizeof(struct jffs2_raw_inode), buf_len, ofs));
 776                                err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
 777                                if (err)
 778                                        return err;
 779                                buf_ofs = ofs;
 780                                node = (void *)buf;
 781                        }
 782                        err = jffs2_scan_inode_node(c, jeb, (void *)node, ofs, s);
 783                        if (err) return err;
 784                        ofs += PAD(je32_to_cpu(node->totlen));
 785                        break;
 786
 787                case JFFS2_NODETYPE_DIRENT:
 788                        if (buf_ofs + buf_len < ofs + je32_to_cpu(node->totlen)) {
 789                                buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
 790                                D1(printk(KERN_DEBUG "Fewer than %d bytes (dirent node) left to end of buf. Reading 0x%x at 0x%08x\n",
 791                                          je32_to_cpu(node->totlen), buf_len, ofs));
 792                                err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
 793                                if (err)
 794                                        return err;
 795                                buf_ofs = ofs;
 796                                node = (void *)buf;
 797                        }
 798                        err = jffs2_scan_dirent_node(c, jeb, (void *)node, ofs, s);
 799                        if (err) return err;
 800                        ofs += PAD(je32_to_cpu(node->totlen));
 801                        break;
 802
 803#ifdef CONFIG_JFFS2_FS_XATTR
 804                case JFFS2_NODETYPE_XATTR:
 805                        if (buf_ofs + buf_len < ofs + je32_to_cpu(node->totlen)) {
 806                                buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
 807                                D1(printk(KERN_DEBUG "Fewer than %d bytes (xattr node)"
 808                                          " left to end of buf. Reading 0x%x at 0x%08x\n",
 809                                          je32_to_cpu(node->totlen), buf_len, ofs));
 810                                err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
 811                                if (err)
 812                                        return err;
 813                                buf_ofs = ofs;
 814                                node = (void *)buf;
 815                        }
 816                        err = jffs2_scan_xattr_node(c, jeb, (void *)node, ofs, s);
 817                        if (err)
 818                                return err;
 819                        ofs += PAD(je32_to_cpu(node->totlen));
 820                        break;
 821                case JFFS2_NODETYPE_XREF:
 822                        if (buf_ofs + buf_len < ofs + je32_to_cpu(node->totlen)) {
 823                                buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
 824                                D1(printk(KERN_DEBUG "Fewer than %d bytes (xref node)"
 825                                          " left to end of buf. Reading 0x%x at 0x%08x\n",
 826                                          je32_to_cpu(node->totlen), buf_len, ofs));
 827                                err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
 828                                if (err)
 829                                        return err;
 830                                buf_ofs = ofs;
 831                                node = (void *)buf;
 832                        }
 833                        err = jffs2_scan_xref_node(c, jeb, (void *)node, ofs, s);
 834                        if (err)
 835                                return err;
 836                        ofs += PAD(je32_to_cpu(node->totlen));
 837                        break;
 838#endif  /* CONFIG_JFFS2_FS_XATTR */
 839
 840                case JFFS2_NODETYPE_CLEANMARKER:
 841                        D1(printk(KERN_DEBUG "CLEANMARKER node found at 0x%08x\n", ofs));
 842                        if (je32_to_cpu(node->totlen) != c->cleanmarker_size) {
 843                                printk(KERN_NOTICE "CLEANMARKER node found at 0x%08x has totlen 0x%x != normal 0x%x\n",
 844                                       ofs, je32_to_cpu(node->totlen), c->cleanmarker_size);
 845                                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(sizeof(struct jffs2_unknown_node)))))
 846                                        return err;
 847                                ofs += PAD(sizeof(struct jffs2_unknown_node));
 848                        } else if (jeb->first_node) {
 849                                printk(KERN_NOTICE "CLEANMARKER node found at 0x%08x, not first node in block (0x%08x)\n", ofs, jeb->offset);
 850                                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(sizeof(struct jffs2_unknown_node)))))
 851                                        return err;
 852                                ofs += PAD(sizeof(struct jffs2_unknown_node));
 853                        } else {
 854                                jffs2_link_node_ref(c, jeb, ofs | REF_NORMAL, c->cleanmarker_size, NULL);
 855
 856                                ofs += PAD(c->cleanmarker_size);
 857                        }
 858                        break;
 859
 860                case JFFS2_NODETYPE_PADDING:
 861                        if (jffs2_sum_active())
 862                                jffs2_sum_add_padding_mem(s, je32_to_cpu(node->totlen));
 863                        if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
 864                                return err;
 865                        ofs += PAD(je32_to_cpu(node->totlen));
 866                        break;
 867
 868                default:
 869                        switch (je16_to_cpu(node->nodetype) & JFFS2_COMPAT_MASK) {
 870                        case JFFS2_FEATURE_ROCOMPAT:
 871                                printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs);
 872                                c->flags |= JFFS2_SB_FLAG_RO;
 873                                if (!(jffs2_is_readonly(c)))
 874                                        return -EROFS;
 875                                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
 876                                        return err;
 877                                ofs += PAD(je32_to_cpu(node->totlen));
 878                                break;
 879
 880                        case JFFS2_FEATURE_INCOMPAT:
 881                                printk(KERN_NOTICE "Incompatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs);
 882                                return -EINVAL;
 883
 884                        case JFFS2_FEATURE_RWCOMPAT_DELETE:
 885                                D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs));
 886                                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
 887                                        return err;
 888                                ofs += PAD(je32_to_cpu(node->totlen));
 889                                break;
 890
 891                        case JFFS2_FEATURE_RWCOMPAT_COPY: {
 892                                D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs));
 893
 894                                jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, PAD(je32_to_cpu(node->totlen)), NULL);
 895
 896                                /* We can't summarise nodes we don't grok */
 897                                jffs2_sum_disable_collecting(s);
 898                                ofs += PAD(je32_to_cpu(node->totlen));
 899                                break;
 900                                }
 901                        }
 902                }
 903        }
 904
 905        if (jffs2_sum_active()) {
 906                if (PAD(s->sum_size + JFFS2_SUMMARY_FRAME_SIZE) > jeb->free_size) {
 907                        dbg_summary("There is not enough space for "
 908                                "summary information, disabling for this jeb!\n");
 909                        jffs2_sum_disable_collecting(s);
 910                }
 911        }
 912
 913        D1(printk(KERN_DEBUG "Block at 0x%08x: free 0x%08x, dirty 0x%08x, unchecked 0x%08x, used 0x%08x, wasted 0x%08x\n",
 914                  jeb->offset,jeb->free_size, jeb->dirty_size, jeb->unchecked_size, jeb->used_size, jeb->wasted_size));
 915        
 916        /* mark_node_obsolete can add to wasted !! */
 917        if (jeb->wasted_size) {
 918                jeb->dirty_size += jeb->wasted_size;
 919                c->dirty_size += jeb->wasted_size;
 920                c->wasted_size -= jeb->wasted_size;
 921                jeb->wasted_size = 0;
 922        }
 923
 924        return jffs2_scan_classify_jeb(c, jeb);
 925}
 926
 927struct jffs2_inode_cache *jffs2_scan_make_ino_cache(struct jffs2_sb_info *c, uint32_t ino)
 928{
 929        struct jffs2_inode_cache *ic;
 930
 931        ic = jffs2_get_ino_cache(c, ino);
 932        if (ic)
 933                return ic;
 934
 935        if (ino > c->highest_ino)
 936                c->highest_ino = ino;
 937
 938        ic = jffs2_alloc_inode_cache();
 939        if (!ic) {
 940                printk(KERN_NOTICE "jffs2_scan_make_inode_cache(): allocation of inode cache failed\n");
 941                return NULL;
 942        }
 943        memset(ic, 0, sizeof(*ic));
 944
 945        ic->ino = ino;
 946        ic->nodes = (void *)ic;
 947        jffs2_add_ino_cache(c, ic);
 948        if (ino == 1)
 949                ic->pino_nlink = 1;
 950        return ic;
 951}
 952
 953static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 954                                 struct jffs2_raw_inode *ri, uint32_t ofs, struct jffs2_summary *s)
 955{
 956        struct jffs2_inode_cache *ic;
 957        uint32_t crc, ino = je32_to_cpu(ri->ino);
 958
 959        D1(printk(KERN_DEBUG "jffs2_scan_inode_node(): Node at 0x%08x\n", ofs));
 960
 961        /* We do very little here now. Just check the ino# to which we should attribute
 962           this node; we can do all the CRC checking etc. later. There's a tradeoff here --
 963           we used to scan the flash once only, reading everything we want from it into
 964           memory, then building all our in-core data structures and freeing the extra
 965           information. Now we allow the first part of the mount to complete a lot quicker,
 966           but we have to go _back_ to the flash in order to finish the CRC checking, etc.
 967           Which means that the _full_ amount of time to get to proper write mode with GC
 968           operational may actually be _longer_ than before. Sucks to be me. */
 969
 970        /* Check the node CRC in any case. */
 971        crc = crc32(0, ri, sizeof(*ri)-8);
 972        if (crc != je32_to_cpu(ri->node_crc)) {
 973                printk(KERN_NOTICE "jffs2_scan_inode_node(): CRC failed on "
 974                       "node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 975                       ofs, je32_to_cpu(ri->node_crc), crc);
 976                /*
 977                 * We believe totlen because the CRC on the node
 978                 * _header_ was OK, just the node itself failed.
 979                 */
 980                return jffs2_scan_dirty_space(c, jeb,
 981                                              PAD(je32_to_cpu(ri->totlen)));
 982        }
 983
 984        ic = jffs2_get_ino_cache(c, ino);
 985        if (!ic) {
 986                ic = jffs2_scan_make_ino_cache(c, ino);
 987                if (!ic)
 988                        return -ENOMEM;
 989        }
 990
 991        /* Wheee. It worked */
 992        jffs2_link_node_ref(c, jeb, ofs | REF_UNCHECKED, PAD(je32_to_cpu(ri->totlen)), ic);
 993
 994        D1(printk(KERN_DEBUG "Node is ino #%u, version %d. Range 0x%x-0x%x\n",
 995                  je32_to_cpu(ri->ino), je32_to_cpu(ri->version),
 996                  je32_to_cpu(ri->offset),
 997                  je32_to_cpu(ri->offset)+je32_to_cpu(ri->dsize)));
 998
 999        pseudo_random += je32_to_cpu(ri->version);
1000
1001        if (jffs2_sum_active()) {
1002                jffs2_sum_add_inode_mem(s, ri, ofs - jeb->offset);
1003        }
1004
1005        return 0;
1006}
1007
1008static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
1009                                  struct jffs2_raw_dirent *rd, uint32_t ofs, struct jffs2_summary *s)
1010{
1011        struct jffs2_full_dirent *fd;
1012        struct jffs2_inode_cache *ic;
1013        uint32_t checkedlen;
1014        uint32_t crc;
1015        int err;
1016
1017        D1(printk(KERN_DEBUG "jffs2_scan_dirent_node(): Node at 0x%08x\n", ofs));
1018
1019        /* We don't get here unless the node is still valid, so we don't have to
1020           mask in the ACCURATE bit any more. */
1021        crc = crc32(0, rd, sizeof(*rd)-8);
1022
1023        if (crc != je32_to_cpu(rd->node_crc)) {
1024                printk(KERN_NOTICE "jffs2_scan_dirent_node(): Node CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
1025                       ofs, je32_to_cpu(rd->node_crc), crc);
1026                /* We believe totlen because the CRC on the node _header_ was OK, just the node itself failed. */
1027                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(rd->totlen)))))
1028                        return err;
1029                return 0;
1030        }
1031
1032        pseudo_random += je32_to_cpu(rd->version);
1033
1034        /* Should never happen. Did. (OLPC trac #4184)*/
1035        checkedlen = strnlen(rd->name, rd->nsize);
1036        if (checkedlen < rd->nsize) {
1037                printk(KERN_ERR "Dirent at %08x has zeroes in name. Truncating to %d chars\n",
1038                       ofs, checkedlen);
1039        }
1040        fd = jffs2_alloc_full_dirent(checkedlen+1);
1041        if (!fd) {
1042                return -ENOMEM;
1043        }
1044        memcpy(&fd->name, rd->name, checkedlen);
1045        fd->name[checkedlen] = 0;
1046
1047        crc = crc32(0, fd->name, rd->nsize);
1048        if (crc != je32_to_cpu(rd->name_crc)) {
1049                printk(KERN_NOTICE "jffs2_scan_dirent_node(): Name CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
1050                       ofs, je32_to_cpu(rd->name_crc), crc);
1051                D1(printk(KERN_NOTICE "Name for which CRC failed is (now) '%s', ino #%d\n", fd->name, je32_to_cpu(rd->ino)));
1052                jffs2_free_full_dirent(fd);
1053                /* FIXME: Why do we believe totlen? */
1054                /* We believe totlen because the CRC on the node _header_ was OK, just the name failed. */
1055                if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(rd->totlen)))))
1056                        return err;
1057                return 0;
1058        }
1059        ic = jffs2_scan_make_ino_cache(c, je32_to_cpu(rd->pino));
1060        if (!ic) {
1061                jffs2_free_full_dirent(fd);
1062                return -ENOMEM;
1063        }
1064
1065        fd->raw = jffs2_link_node_ref(c, jeb, ofs | dirent_node_state(rd),
1066                                      PAD(je32_to_cpu(rd->totlen)), ic);
1067
1068        fd->next = NULL;
1069        fd->version = je32_to_cpu(rd->version);
1070        fd->ino = je32_to_cpu(rd->ino);
1071        fd->nhash = full_name_hash(fd->name, checkedlen);
1072        fd->type = rd->type;
1073        jffs2_add_fd_to_list(c, fd, &ic->scan_dents);
1074
1075        if (jffs2_sum_active()) {
1076                jffs2_sum_add_dirent_mem(s, rd, ofs - jeb->offset);
1077        }
1078
1079        return 0;
1080}
1081
1082static int count_list(struct list_head *l)
1083{
1084        uint32_t count = 0;
1085        struct list_head *tmp;
1086
1087        list_for_each(tmp, l) {
1088                count++;
1089        }
1090        return count;
1091}
1092
1093/* Note: This breaks if list_empty(head). I don't care. You
1094   might, if you copy this code and use it elsewhere :) */
1095static void rotate_list(struct list_head *head, uint32_t count)
1096{
1097        struct list_head *n = head->next;
1098
1099        list_del(head);
1100        while(count--) {
1101                n = n->next;
1102        }
1103        list_add(head, n);
1104}
1105
1106void jffs2_rotate_lists(struct jffs2_sb_info *c)
1107{
1108        uint32_t x;
1109        uint32_t rotateby;
1110
1111        x = count_list(&c->clean_list);
1112        if (x) {
1113                rotateby = pseudo_random % x;
1114                rotate_list((&c->clean_list), rotateby);
1115        }
1116
1117        x = count_list(&c->very_dirty_list);
1118        if (x) {
1119                rotateby = pseudo_random % x;
1120                rotate_list((&c->very_dirty_list), rotateby);
1121        }
1122
1123        x = count_list(&c->dirty_list);
1124        if (x) {
1125                rotateby = pseudo_random % x;
1126                rotate_list((&c->dirty_list), rotateby);
1127        }
1128
1129        x = count_list(&c->erasable_list);
1130        if (x) {
1131                rotateby = pseudo_random % x;
1132                rotate_list((&c->erasable_list), rotateby);
1133        }
1134
1135        if (c->nr_erasing_blocks) {
1136                rotateby = pseudo_random % c->nr_erasing_blocks;
1137                rotate_list((&c->erase_pending_list), rotateby);
1138        }
1139
1140        if (c->nr_free_blocks) {
1141                rotateby = pseudo_random % c->nr_free_blocks;
1142                rotate_list((&c->free_list), rotateby);
1143        }
1144}
1145