uboot/fs/ubifs/sb.c
<<
>>
Prefs
   1/*
   2 * This file is part of UBIFS.
   3 *
   4 * Copyright (C) 2006-2008 Nokia Corporation.
   5 *
   6 * SPDX-License-Identifier:     GPL-2.0+
   7 *
   8 * Authors: Artem Bityutskiy (Битюцкий Артём)
   9 *          Adrian Hunter
  10 */
  11
  12/*
  13 * This file implements UBIFS superblock. The superblock is stored at the first
  14 * LEB of the volume and is never changed by UBIFS. Only user-space tools may
  15 * change it. The superblock node mostly contains geometry information.
  16 */
  17
  18#include "ubifs.h"
  19#ifndef __UBOOT__
  20#include <linux/slab.h>
  21#include <linux/random.h>
  22#include <linux/math64.h>
  23#else
  24
  25#include <linux/compat.h>
  26#include <linux/err.h>
  27#include <ubi_uboot.h>
  28#include <linux/stat.h>
  29#endif
  30
  31/*
  32 * Default journal size in logical eraseblocks as a percent of total
  33 * flash size.
  34 */
  35#define DEFAULT_JNL_PERCENT 5
  36
  37/* Default maximum journal size in bytes */
  38#define DEFAULT_MAX_JNL (32*1024*1024)
  39
  40/* Default indexing tree fanout */
  41#define DEFAULT_FANOUT 8
  42
  43/* Default number of data journal heads */
  44#define DEFAULT_JHEADS_CNT 1
  45
  46/* Default positions of different LEBs in the main area */
  47#define DEFAULT_IDX_LEB  0
  48#define DEFAULT_DATA_LEB 1
  49#define DEFAULT_GC_LEB   2
  50
  51/* Default number of LEB numbers in LPT's save table */
  52#define DEFAULT_LSAVE_CNT 256
  53
  54/* Default reserved pool size as a percent of maximum free space */
  55#define DEFAULT_RP_PERCENT 5
  56
  57/* The default maximum size of reserved pool in bytes */
  58#define DEFAULT_MAX_RP_SIZE (5*1024*1024)
  59
  60/* Default time granularity in nanoseconds */
  61#define DEFAULT_TIME_GRAN 1000000000
  62
  63#ifndef __UBOOT__
  64/**
  65 * create_default_filesystem - format empty UBI volume.
  66 * @c: UBIFS file-system description object
  67 *
  68 * This function creates default empty file-system. Returns zero in case of
  69 * success and a negative error code in case of failure.
  70 */
  71static int create_default_filesystem(struct ubifs_info *c)
  72{
  73        struct ubifs_sb_node *sup;
  74        struct ubifs_mst_node *mst;
  75        struct ubifs_idx_node *idx;
  76        struct ubifs_branch *br;
  77        struct ubifs_ino_node *ino;
  78        struct ubifs_cs_node *cs;
  79        union ubifs_key key;
  80        int err, tmp, jnl_lebs, log_lebs, max_buds, main_lebs, main_first;
  81        int lpt_lebs, lpt_first, orph_lebs, big_lpt, ino_waste, sup_flags = 0;
  82        int min_leb_cnt = UBIFS_MIN_LEB_CNT;
  83        long long tmp64, main_bytes;
  84        __le64 tmp_le64;
  85
  86        /* Some functions called from here depend on the @c->key_len filed */
  87        c->key_len = UBIFS_SK_LEN;
  88
  89        /*
  90         * First of all, we have to calculate default file-system geometry -
  91         * log size, journal size, etc.
  92         */
  93        if (c->leb_cnt < 0x7FFFFFFF / DEFAULT_JNL_PERCENT)
  94                /* We can first multiply then divide and have no overflow */
  95                jnl_lebs = c->leb_cnt * DEFAULT_JNL_PERCENT / 100;
  96        else
  97                jnl_lebs = (c->leb_cnt / 100) * DEFAULT_JNL_PERCENT;
  98
  99        if (jnl_lebs < UBIFS_MIN_JNL_LEBS)
 100                jnl_lebs = UBIFS_MIN_JNL_LEBS;
 101        if (jnl_lebs * c->leb_size > DEFAULT_MAX_JNL)
 102                jnl_lebs = DEFAULT_MAX_JNL / c->leb_size;
 103
 104        /*
 105         * The log should be large enough to fit reference nodes for all bud
 106         * LEBs. Because buds do not have to start from the beginning of LEBs
 107         * (half of the LEB may contain committed data), the log should
 108         * generally be larger, make it twice as large.
 109         */
 110        tmp = 2 * (c->ref_node_alsz * jnl_lebs) + c->leb_size - 1;
 111        log_lebs = tmp / c->leb_size;
 112        /* Plus one LEB reserved for commit */
 113        log_lebs += 1;
 114        if (c->leb_cnt - min_leb_cnt > 8) {
 115                /* And some extra space to allow writes while committing */
 116                log_lebs += 1;
 117                min_leb_cnt += 1;
 118        }
 119
 120        max_buds = jnl_lebs - log_lebs;
 121        if (max_buds < UBIFS_MIN_BUD_LEBS)
 122                max_buds = UBIFS_MIN_BUD_LEBS;
 123
 124        /*
 125         * Orphan nodes are stored in a separate area. One node can store a lot
 126         * of orphan inode numbers, but when new orphan comes we just add a new
 127         * orphan node. At some point the nodes are consolidated into one
 128         * orphan node.
 129         */
 130        orph_lebs = UBIFS_MIN_ORPH_LEBS;
 131        if (c->leb_cnt - min_leb_cnt > 1)
 132                /*
 133                 * For debugging purposes it is better to have at least 2
 134                 * orphan LEBs, because the orphan subsystem would need to do
 135                 * consolidations and would be stressed more.
 136                 */
 137                orph_lebs += 1;
 138
 139        main_lebs = c->leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS - log_lebs;
 140        main_lebs -= orph_lebs;
 141
 142        lpt_first = UBIFS_LOG_LNUM + log_lebs;
 143        c->lsave_cnt = DEFAULT_LSAVE_CNT;
 144        c->max_leb_cnt = c->leb_cnt;
 145        err = ubifs_create_dflt_lpt(c, &main_lebs, lpt_first, &lpt_lebs,
 146                                    &big_lpt);
 147        if (err)
 148                return err;
 149
 150        dbg_gen("LEB Properties Tree created (LEBs %d-%d)", lpt_first,
 151                lpt_first + lpt_lebs - 1);
 152
 153        main_first = c->leb_cnt - main_lebs;
 154
 155        /* Create default superblock */
 156        tmp = ALIGN(UBIFS_SB_NODE_SZ, c->min_io_size);
 157        sup = kzalloc(tmp, GFP_KERNEL);
 158        if (!sup)
 159                return -ENOMEM;
 160
 161        tmp64 = (long long)max_buds * c->leb_size;
 162        if (big_lpt)
 163                sup_flags |= UBIFS_FLG_BIGLPT;
 164
 165        sup->ch.node_type  = UBIFS_SB_NODE;
 166        sup->key_hash      = UBIFS_KEY_HASH_R5;
 167        sup->flags         = cpu_to_le32(sup_flags);
 168        sup->min_io_size   = cpu_to_le32(c->min_io_size);
 169        sup->leb_size      = cpu_to_le32(c->leb_size);
 170        sup->leb_cnt       = cpu_to_le32(c->leb_cnt);
 171        sup->max_leb_cnt   = cpu_to_le32(c->max_leb_cnt);
 172        sup->max_bud_bytes = cpu_to_le64(tmp64);
 173        sup->log_lebs      = cpu_to_le32(log_lebs);
 174        sup->lpt_lebs      = cpu_to_le32(lpt_lebs);
 175        sup->orph_lebs     = cpu_to_le32(orph_lebs);
 176        sup->jhead_cnt     = cpu_to_le32(DEFAULT_JHEADS_CNT);
 177        sup->fanout        = cpu_to_le32(DEFAULT_FANOUT);
 178        sup->lsave_cnt     = cpu_to_le32(c->lsave_cnt);
 179        sup->fmt_version   = cpu_to_le32(UBIFS_FORMAT_VERSION);
 180        sup->time_gran     = cpu_to_le32(DEFAULT_TIME_GRAN);
 181        if (c->mount_opts.override_compr)
 182                sup->default_compr = cpu_to_le16(c->mount_opts.compr_type);
 183        else
 184                sup->default_compr = cpu_to_le16(UBIFS_COMPR_LZO);
 185
 186        generate_random_uuid(sup->uuid);
 187
 188        main_bytes = (long long)main_lebs * c->leb_size;
 189        tmp64 = div_u64(main_bytes * DEFAULT_RP_PERCENT, 100);
 190        if (tmp64 > DEFAULT_MAX_RP_SIZE)
 191                tmp64 = DEFAULT_MAX_RP_SIZE;
 192        sup->rp_size = cpu_to_le64(tmp64);
 193        sup->ro_compat_version = cpu_to_le32(UBIFS_RO_COMPAT_VERSION);
 194
 195        err = ubifs_write_node(c, sup, UBIFS_SB_NODE_SZ, 0, 0);
 196        kfree(sup);
 197        if (err)
 198                return err;
 199
 200        dbg_gen("default superblock created at LEB 0:0");
 201
 202        /* Create default master node */
 203        mst = kzalloc(c->mst_node_alsz, GFP_KERNEL);
 204        if (!mst)
 205                return -ENOMEM;
 206
 207        mst->ch.node_type = UBIFS_MST_NODE;
 208        mst->log_lnum     = cpu_to_le32(UBIFS_LOG_LNUM);
 209        mst->highest_inum = cpu_to_le64(UBIFS_FIRST_INO);
 210        mst->cmt_no       = 0;
 211        mst->root_lnum    = cpu_to_le32(main_first + DEFAULT_IDX_LEB);
 212        mst->root_offs    = 0;
 213        tmp = ubifs_idx_node_sz(c, 1);
 214        mst->root_len     = cpu_to_le32(tmp);
 215        mst->gc_lnum      = cpu_to_le32(main_first + DEFAULT_GC_LEB);
 216        mst->ihead_lnum   = cpu_to_le32(main_first + DEFAULT_IDX_LEB);
 217        mst->ihead_offs   = cpu_to_le32(ALIGN(tmp, c->min_io_size));
 218        mst->index_size   = cpu_to_le64(ALIGN(tmp, 8));
 219        mst->lpt_lnum     = cpu_to_le32(c->lpt_lnum);
 220        mst->lpt_offs     = cpu_to_le32(c->lpt_offs);
 221        mst->nhead_lnum   = cpu_to_le32(c->nhead_lnum);
 222        mst->nhead_offs   = cpu_to_le32(c->nhead_offs);
 223        mst->ltab_lnum    = cpu_to_le32(c->ltab_lnum);
 224        mst->ltab_offs    = cpu_to_le32(c->ltab_offs);
 225        mst->lsave_lnum   = cpu_to_le32(c->lsave_lnum);
 226        mst->lsave_offs   = cpu_to_le32(c->lsave_offs);
 227        mst->lscan_lnum   = cpu_to_le32(main_first);
 228        mst->empty_lebs   = cpu_to_le32(main_lebs - 2);
 229        mst->idx_lebs     = cpu_to_le32(1);
 230        mst->leb_cnt      = cpu_to_le32(c->leb_cnt);
 231
 232        /* Calculate lprops statistics */
 233        tmp64 = main_bytes;
 234        tmp64 -= ALIGN(ubifs_idx_node_sz(c, 1), c->min_io_size);
 235        tmp64 -= ALIGN(UBIFS_INO_NODE_SZ, c->min_io_size);
 236        mst->total_free = cpu_to_le64(tmp64);
 237
 238        tmp64 = ALIGN(ubifs_idx_node_sz(c, 1), c->min_io_size);
 239        ino_waste = ALIGN(UBIFS_INO_NODE_SZ, c->min_io_size) -
 240                          UBIFS_INO_NODE_SZ;
 241        tmp64 += ino_waste;
 242        tmp64 -= ALIGN(ubifs_idx_node_sz(c, 1), 8);
 243        mst->total_dirty = cpu_to_le64(tmp64);
 244
 245        /*  The indexing LEB does not contribute to dark space */
 246        tmp64 = ((long long)(c->main_lebs - 1) * c->dark_wm);
 247        mst->total_dark = cpu_to_le64(tmp64);
 248
 249        mst->total_used = cpu_to_le64(UBIFS_INO_NODE_SZ);
 250
 251        err = ubifs_write_node(c, mst, UBIFS_MST_NODE_SZ, UBIFS_MST_LNUM, 0);
 252        if (err) {
 253                kfree(mst);
 254                return err;
 255        }
 256        err = ubifs_write_node(c, mst, UBIFS_MST_NODE_SZ, UBIFS_MST_LNUM + 1,
 257                               0);
 258        kfree(mst);
 259        if (err)
 260                return err;
 261
 262        dbg_gen("default master node created at LEB %d:0", UBIFS_MST_LNUM);
 263
 264        /* Create the root indexing node */
 265        tmp = ubifs_idx_node_sz(c, 1);
 266        idx = kzalloc(ALIGN(tmp, c->min_io_size), GFP_KERNEL);
 267        if (!idx)
 268                return -ENOMEM;
 269
 270        c->key_fmt = UBIFS_SIMPLE_KEY_FMT;
 271        c->key_hash = key_r5_hash;
 272
 273        idx->ch.node_type = UBIFS_IDX_NODE;
 274        idx->child_cnt = cpu_to_le16(1);
 275        ino_key_init(c, &key, UBIFS_ROOT_INO);
 276        br = ubifs_idx_branch(c, idx, 0);
 277        key_write_idx(c, &key, &br->key);
 278        br->lnum = cpu_to_le32(main_first + DEFAULT_DATA_LEB);
 279        br->len  = cpu_to_le32(UBIFS_INO_NODE_SZ);
 280        err = ubifs_write_node(c, idx, tmp, main_first + DEFAULT_IDX_LEB, 0);
 281        kfree(idx);
 282        if (err)
 283                return err;
 284
 285        dbg_gen("default root indexing node created LEB %d:0",
 286                main_first + DEFAULT_IDX_LEB);
 287
 288        /* Create default root inode */
 289        tmp = ALIGN(UBIFS_INO_NODE_SZ, c->min_io_size);
 290        ino = kzalloc(tmp, GFP_KERNEL);
 291        if (!ino)
 292                return -ENOMEM;
 293
 294        ino_key_init_flash(c, &ino->key, UBIFS_ROOT_INO);
 295        ino->ch.node_type = UBIFS_INO_NODE;
 296        ino->creat_sqnum = cpu_to_le64(++c->max_sqnum);
 297        ino->nlink = cpu_to_le32(2);
 298        tmp_le64 = cpu_to_le64(CURRENT_TIME_SEC.tv_sec);
 299        ino->atime_sec   = tmp_le64;
 300        ino->ctime_sec   = tmp_le64;
 301        ino->mtime_sec   = tmp_le64;
 302        ino->atime_nsec  = 0;
 303        ino->ctime_nsec  = 0;
 304        ino->mtime_nsec  = 0;
 305        ino->mode = cpu_to_le32(S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO);
 306        ino->size = cpu_to_le64(UBIFS_INO_NODE_SZ);
 307
 308        /* Set compression enabled by default */
 309        ino->flags = cpu_to_le32(UBIFS_COMPR_FL);
 310
 311        err = ubifs_write_node(c, ino, UBIFS_INO_NODE_SZ,
 312                               main_first + DEFAULT_DATA_LEB, 0);
 313        kfree(ino);
 314        if (err)
 315                return err;
 316
 317        dbg_gen("root inode created at LEB %d:0",
 318                main_first + DEFAULT_DATA_LEB);
 319
 320        /*
 321         * The first node in the log has to be the commit start node. This is
 322         * always the case during normal file-system operation. Write a fake
 323         * commit start node to the log.
 324         */
 325        tmp = ALIGN(UBIFS_CS_NODE_SZ, c->min_io_size);
 326        cs = kzalloc(tmp, GFP_KERNEL);
 327        if (!cs)
 328                return -ENOMEM;
 329
 330        cs->ch.node_type = UBIFS_CS_NODE;
 331        err = ubifs_write_node(c, cs, UBIFS_CS_NODE_SZ, UBIFS_LOG_LNUM, 0);
 332        kfree(cs);
 333        if (err)
 334                return err;
 335
 336        ubifs_msg(c, "default file-system created");
 337        return 0;
 338}
 339#endif
 340
 341/**
 342 * validate_sb - validate superblock node.
 343 * @c: UBIFS file-system description object
 344 * @sup: superblock node
 345 *
 346 * This function validates superblock node @sup. Since most of data was read
 347 * from the superblock and stored in @c, the function validates fields in @c
 348 * instead. Returns zero in case of success and %-EINVAL in case of validation
 349 * failure.
 350 */
 351static int validate_sb(struct ubifs_info *c, struct ubifs_sb_node *sup)
 352{
 353        long long max_bytes;
 354        int err = 1, min_leb_cnt;
 355
 356        if (!c->key_hash) {
 357                err = 2;
 358                goto failed;
 359        }
 360
 361        if (sup->key_fmt != UBIFS_SIMPLE_KEY_FMT) {
 362                err = 3;
 363                goto failed;
 364        }
 365
 366        if (le32_to_cpu(sup->min_io_size) != c->min_io_size) {
 367                ubifs_err(c, "min. I/O unit mismatch: %d in superblock, %d real",
 368                          le32_to_cpu(sup->min_io_size), c->min_io_size);
 369                goto failed;
 370        }
 371
 372        if (le32_to_cpu(sup->leb_size) != c->leb_size) {
 373                ubifs_err(c, "LEB size mismatch: %d in superblock, %d real",
 374                          le32_to_cpu(sup->leb_size), c->leb_size);
 375                goto failed;
 376        }
 377
 378        if (c->log_lebs < UBIFS_MIN_LOG_LEBS ||
 379            c->lpt_lebs < UBIFS_MIN_LPT_LEBS ||
 380            c->orph_lebs < UBIFS_MIN_ORPH_LEBS ||
 381            c->main_lebs < UBIFS_MIN_MAIN_LEBS) {
 382                err = 4;
 383                goto failed;
 384        }
 385
 386        /*
 387         * Calculate minimum allowed amount of main area LEBs. This is very
 388         * similar to %UBIFS_MIN_LEB_CNT, but we take into account real what we
 389         * have just read from the superblock.
 390         */
 391        min_leb_cnt = UBIFS_SB_LEBS + UBIFS_MST_LEBS + c->log_lebs;
 392        min_leb_cnt += c->lpt_lebs + c->orph_lebs + c->jhead_cnt + 6;
 393
 394        if (c->leb_cnt < min_leb_cnt || c->leb_cnt > c->vi.size) {
 395                ubifs_err(c, "bad LEB count: %d in superblock, %d on UBI volume, %d minimum required",
 396                          c->leb_cnt, c->vi.size, min_leb_cnt);
 397                goto failed;
 398        }
 399
 400        if (c->max_leb_cnt < c->leb_cnt) {
 401                ubifs_err(c, "max. LEB count %d less than LEB count %d",
 402                          c->max_leb_cnt, c->leb_cnt);
 403                goto failed;
 404        }
 405
 406        if (c->main_lebs < UBIFS_MIN_MAIN_LEBS) {
 407                ubifs_err(c, "too few main LEBs count %d, must be at least %d",
 408                          c->main_lebs, UBIFS_MIN_MAIN_LEBS);
 409                goto failed;
 410        }
 411
 412        max_bytes = (long long)c->leb_size * UBIFS_MIN_BUD_LEBS;
 413        if (c->max_bud_bytes < max_bytes) {
 414                ubifs_err(c, "too small journal (%lld bytes), must be at least %lld bytes",
 415                          c->max_bud_bytes, max_bytes);
 416                goto failed;
 417        }
 418
 419        max_bytes = (long long)c->leb_size * c->main_lebs;
 420        if (c->max_bud_bytes > max_bytes) {
 421                ubifs_err(c, "too large journal size (%lld bytes), only %lld bytes available in the main area",
 422                          c->max_bud_bytes, max_bytes);
 423                goto failed;
 424        }
 425
 426        if (c->jhead_cnt < NONDATA_JHEADS_CNT + 1 ||
 427            c->jhead_cnt > NONDATA_JHEADS_CNT + UBIFS_MAX_JHEADS) {
 428                err = 9;
 429                goto failed;
 430        }
 431
 432        if (c->fanout < UBIFS_MIN_FANOUT ||
 433            ubifs_idx_node_sz(c, c->fanout) > c->leb_size) {
 434                err = 10;
 435                goto failed;
 436        }
 437
 438        if (c->lsave_cnt < 0 || (c->lsave_cnt > DEFAULT_LSAVE_CNT &&
 439            c->lsave_cnt > c->max_leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS -
 440            c->log_lebs - c->lpt_lebs - c->orph_lebs)) {
 441                err = 11;
 442                goto failed;
 443        }
 444
 445        if (UBIFS_SB_LEBS + UBIFS_MST_LEBS + c->log_lebs + c->lpt_lebs +
 446            c->orph_lebs + c->main_lebs != c->leb_cnt) {
 447                err = 12;
 448                goto failed;
 449        }
 450
 451        if (c->default_compr >= UBIFS_COMPR_TYPES_CNT) {
 452                err = 13;
 453                goto failed;
 454        }
 455
 456        if (c->rp_size < 0 || max_bytes < c->rp_size) {
 457                err = 14;
 458                goto failed;
 459        }
 460
 461        if (le32_to_cpu(sup->time_gran) > 1000000000 ||
 462            le32_to_cpu(sup->time_gran) < 1) {
 463                err = 15;
 464                goto failed;
 465        }
 466
 467        return 0;
 468
 469failed:
 470        ubifs_err(c, "bad superblock, error %d", err);
 471        ubifs_dump_node(c, sup);
 472        return -EINVAL;
 473}
 474
 475/**
 476 * ubifs_read_sb_node - read superblock node.
 477 * @c: UBIFS file-system description object
 478 *
 479 * This function returns a pointer to the superblock node or a negative error
 480 * code. Note, the user of this function is responsible of kfree()'ing the
 481 * returned superblock buffer.
 482 */
 483struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c)
 484{
 485        struct ubifs_sb_node *sup;
 486        int err;
 487
 488        sup = kmalloc(ALIGN(UBIFS_SB_NODE_SZ, c->min_io_size), GFP_NOFS);
 489        if (!sup)
 490                return ERR_PTR(-ENOMEM);
 491
 492        err = ubifs_read_node(c, sup, UBIFS_SB_NODE, UBIFS_SB_NODE_SZ,
 493                              UBIFS_SB_LNUM, 0);
 494        if (err) {
 495                kfree(sup);
 496                return ERR_PTR(err);
 497        }
 498
 499        return sup;
 500}
 501
 502/**
 503 * ubifs_write_sb_node - write superblock node.
 504 * @c: UBIFS file-system description object
 505 * @sup: superblock node read with 'ubifs_read_sb_node()'
 506 *
 507 * This function returns %0 on success and a negative error code on failure.
 508 */
 509int ubifs_write_sb_node(struct ubifs_info *c, struct ubifs_sb_node *sup)
 510{
 511        int len = ALIGN(UBIFS_SB_NODE_SZ, c->min_io_size);
 512
 513        ubifs_prepare_node(c, sup, UBIFS_SB_NODE_SZ, 1);
 514        return ubifs_leb_change(c, UBIFS_SB_LNUM, sup, len);
 515}
 516
 517/**
 518 * ubifs_read_superblock - read superblock.
 519 * @c: UBIFS file-system description object
 520 *
 521 * This function finds, reads and checks the superblock. If an empty UBI volume
 522 * is being mounted, this function creates default superblock. Returns zero in
 523 * case of success, and a negative error code in case of failure.
 524 */
 525int ubifs_read_superblock(struct ubifs_info *c)
 526{
 527        int err, sup_flags;
 528        struct ubifs_sb_node *sup;
 529
 530        if (c->empty) {
 531#ifndef __UBOOT__
 532                err = create_default_filesystem(c);
 533                if (err)
 534                        return err;
 535#else
 536                printf("No UBIFS filesystem found!\n");
 537                return -1;
 538#endif
 539        }
 540
 541        sup = ubifs_read_sb_node(c);
 542        if (IS_ERR(sup))
 543                return PTR_ERR(sup);
 544
 545        c->fmt_version = le32_to_cpu(sup->fmt_version);
 546        c->ro_compat_version = le32_to_cpu(sup->ro_compat_version);
 547
 548        /*
 549         * The software supports all previous versions but not future versions,
 550         * due to the unavailability of time-travelling equipment.
 551         */
 552        if (c->fmt_version > UBIFS_FORMAT_VERSION) {
 553                ubifs_assert(!c->ro_media || c->ro_mount);
 554                if (!c->ro_mount ||
 555                    c->ro_compat_version > UBIFS_RO_COMPAT_VERSION) {
 556                        ubifs_err(c, "on-flash format version is w%d/r%d, but software only supports up to version w%d/r%d",
 557                                  c->fmt_version, c->ro_compat_version,
 558                                  UBIFS_FORMAT_VERSION,
 559                                  UBIFS_RO_COMPAT_VERSION);
 560                        if (c->ro_compat_version <= UBIFS_RO_COMPAT_VERSION) {
 561                                ubifs_msg(c, "only R/O mounting is possible");
 562                                err = -EROFS;
 563                        } else
 564                                err = -EINVAL;
 565                        goto out;
 566                }
 567
 568                /*
 569                 * The FS is mounted R/O, and the media format is
 570                 * R/O-compatible with the UBIFS implementation, so we can
 571                 * mount.
 572                 */
 573                c->rw_incompat = 1;
 574        }
 575
 576        if (c->fmt_version < 3) {
 577                ubifs_err(c, "on-flash format version %d is not supported",
 578                          c->fmt_version);
 579                err = -EINVAL;
 580                goto out;
 581        }
 582
 583        switch (sup->key_hash) {
 584        case UBIFS_KEY_HASH_R5:
 585                c->key_hash = key_r5_hash;
 586                c->key_hash_type = UBIFS_KEY_HASH_R5;
 587                break;
 588
 589        case UBIFS_KEY_HASH_TEST:
 590                c->key_hash = key_test_hash;
 591                c->key_hash_type = UBIFS_KEY_HASH_TEST;
 592                break;
 593        };
 594
 595        c->key_fmt = sup->key_fmt;
 596
 597        switch (c->key_fmt) {
 598        case UBIFS_SIMPLE_KEY_FMT:
 599                c->key_len = UBIFS_SK_LEN;
 600                break;
 601        default:
 602                ubifs_err(c, "unsupported key format");
 603                err = -EINVAL;
 604                goto out;
 605        }
 606
 607        c->leb_cnt       = le32_to_cpu(sup->leb_cnt);
 608        c->max_leb_cnt   = le32_to_cpu(sup->max_leb_cnt);
 609        c->max_bud_bytes = le64_to_cpu(sup->max_bud_bytes);
 610        c->log_lebs      = le32_to_cpu(sup->log_lebs);
 611        c->lpt_lebs      = le32_to_cpu(sup->lpt_lebs);
 612        c->orph_lebs     = le32_to_cpu(sup->orph_lebs);
 613        c->jhead_cnt     = le32_to_cpu(sup->jhead_cnt) + NONDATA_JHEADS_CNT;
 614        c->fanout        = le32_to_cpu(sup->fanout);
 615        c->lsave_cnt     = le32_to_cpu(sup->lsave_cnt);
 616        c->rp_size       = le64_to_cpu(sup->rp_size);
 617#ifndef __UBOOT__
 618        c->rp_uid        = make_kuid(&init_user_ns, le32_to_cpu(sup->rp_uid));
 619        c->rp_gid        = make_kgid(&init_user_ns, le32_to_cpu(sup->rp_gid));
 620#else
 621        c->rp_uid.val    = le32_to_cpu(sup->rp_uid);
 622        c->rp_gid.val    = le32_to_cpu(sup->rp_gid);
 623#endif
 624        sup_flags        = le32_to_cpu(sup->flags);
 625        if (!c->mount_opts.override_compr)
 626                c->default_compr = le16_to_cpu(sup->default_compr);
 627
 628        c->vfs_sb->s_time_gran = le32_to_cpu(sup->time_gran);
 629        memcpy(&c->uuid, &sup->uuid, 16);
 630        c->big_lpt = !!(sup_flags & UBIFS_FLG_BIGLPT);
 631        c->space_fixup = !!(sup_flags & UBIFS_FLG_SPACE_FIXUP);
 632
 633        /* Automatically increase file system size to the maximum size */
 634        c->old_leb_cnt = c->leb_cnt;
 635        if (c->leb_cnt < c->vi.size && c->leb_cnt < c->max_leb_cnt) {
 636                c->leb_cnt = min_t(int, c->max_leb_cnt, c->vi.size);
 637                if (c->ro_mount)
 638                        dbg_mnt("Auto resizing (ro) from %d LEBs to %d LEBs",
 639                                c->old_leb_cnt, c->leb_cnt);
 640#ifndef __UBOOT__
 641                else {
 642                        dbg_mnt("Auto resizing (sb) from %d LEBs to %d LEBs",
 643                                c->old_leb_cnt, c->leb_cnt);
 644                        sup->leb_cnt = cpu_to_le32(c->leb_cnt);
 645                        err = ubifs_write_sb_node(c, sup);
 646                        if (err)
 647                                goto out;
 648                        c->old_leb_cnt = c->leb_cnt;
 649                }
 650#endif
 651        }
 652
 653        c->log_bytes = (long long)c->log_lebs * c->leb_size;
 654        c->log_last = UBIFS_LOG_LNUM + c->log_lebs - 1;
 655        c->lpt_first = UBIFS_LOG_LNUM + c->log_lebs;
 656        c->lpt_last = c->lpt_first + c->lpt_lebs - 1;
 657        c->orph_first = c->lpt_last + 1;
 658        c->orph_last = c->orph_first + c->orph_lebs - 1;
 659        c->main_lebs = c->leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS;
 660        c->main_lebs -= c->log_lebs + c->lpt_lebs + c->orph_lebs;
 661        c->main_first = c->leb_cnt - c->main_lebs;
 662
 663        err = validate_sb(c, sup);
 664out:
 665        kfree(sup);
 666        return err;
 667}
 668
 669/**
 670 * fixup_leb - fixup/unmap an LEB containing free space.
 671 * @c: UBIFS file-system description object
 672 * @lnum: the LEB number to fix up
 673 * @len: number of used bytes in LEB (starting at offset 0)
 674 *
 675 * This function reads the contents of the given LEB number @lnum, then fixes
 676 * it up, so that empty min. I/O units in the end of LEB are actually erased on
 677 * flash (rather than being just all-0xff real data). If the LEB is completely
 678 * empty, it is simply unmapped.
 679 */
 680static int fixup_leb(struct ubifs_info *c, int lnum, int len)
 681{
 682        int err;
 683
 684        ubifs_assert(len >= 0);
 685        ubifs_assert(len % c->min_io_size == 0);
 686        ubifs_assert(len < c->leb_size);
 687
 688        if (len == 0) {
 689                dbg_mnt("unmap empty LEB %d", lnum);
 690                return ubifs_leb_unmap(c, lnum);
 691        }
 692
 693        dbg_mnt("fixup LEB %d, data len %d", lnum, len);
 694        err = ubifs_leb_read(c, lnum, c->sbuf, 0, len, 1);
 695        if (err)
 696                return err;
 697
 698        return ubifs_leb_change(c, lnum, c->sbuf, len);
 699}
 700
 701/**
 702 * fixup_free_space - find & remap all LEBs containing free space.
 703 * @c: UBIFS file-system description object
 704 *
 705 * This function walks through all LEBs in the filesystem and fiexes up those
 706 * containing free/empty space.
 707 */
 708static int fixup_free_space(struct ubifs_info *c)
 709{
 710        int lnum, err = 0;
 711        struct ubifs_lprops *lprops;
 712
 713        ubifs_get_lprops(c);
 714
 715        /* Fixup LEBs in the master area */
 716        for (lnum = UBIFS_MST_LNUM; lnum < UBIFS_LOG_LNUM; lnum++) {
 717                err = fixup_leb(c, lnum, c->mst_offs + c->mst_node_alsz);
 718                if (err)
 719                        goto out;
 720        }
 721
 722        /* Unmap unused log LEBs */
 723        lnum = ubifs_next_log_lnum(c, c->lhead_lnum);
 724        while (lnum != c->ltail_lnum) {
 725                err = fixup_leb(c, lnum, 0);
 726                if (err)
 727                        goto out;
 728                lnum = ubifs_next_log_lnum(c, lnum);
 729        }
 730
 731        /*
 732         * Fixup the log head which contains the only a CS node at the
 733         * beginning.
 734         */
 735        err = fixup_leb(c, c->lhead_lnum,
 736                        ALIGN(UBIFS_CS_NODE_SZ, c->min_io_size));
 737        if (err)
 738                goto out;
 739
 740        /* Fixup LEBs in the LPT area */
 741        for (lnum = c->lpt_first; lnum <= c->lpt_last; lnum++) {
 742                int free = c->ltab[lnum - c->lpt_first].free;
 743
 744                if (free > 0) {
 745                        err = fixup_leb(c, lnum, c->leb_size - free);
 746                        if (err)
 747                                goto out;
 748                }
 749        }
 750
 751        /* Unmap LEBs in the orphans area */
 752        for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) {
 753                err = fixup_leb(c, lnum, 0);
 754                if (err)
 755                        goto out;
 756        }
 757
 758        /* Fixup LEBs in the main area */
 759        for (lnum = c->main_first; lnum < c->leb_cnt; lnum++) {
 760                lprops = ubifs_lpt_lookup(c, lnum);
 761                if (IS_ERR(lprops)) {
 762                        err = PTR_ERR(lprops);
 763                        goto out;
 764                }
 765
 766                if (lprops->free > 0) {
 767                        err = fixup_leb(c, lnum, c->leb_size - lprops->free);
 768                        if (err)
 769                                goto out;
 770                }
 771        }
 772
 773out:
 774        ubifs_release_lprops(c);
 775        return err;
 776}
 777
 778/**
 779 * ubifs_fixup_free_space - find & fix all LEBs with free space.
 780 * @c: UBIFS file-system description object
 781 *
 782 * This function fixes up LEBs containing free space on first mount, if the
 783 * appropriate flag was set when the FS was created. Each LEB with one or more
 784 * empty min. I/O unit (i.e. free-space-count > 0) is re-written, to make sure
 785 * the free space is actually erased. E.g., this is necessary for some NAND
 786 * chips, since the free space may have been programmed like real "0xff" data
 787 * (generating a non-0xff ECC), causing future writes to the not-really-erased
 788 * NAND pages to behave badly. After the space is fixed up, the superblock flag
 789 * is cleared, so that this is skipped for all future mounts.
 790 */
 791int ubifs_fixup_free_space(struct ubifs_info *c)
 792{
 793        int err;
 794        struct ubifs_sb_node *sup;
 795
 796        ubifs_assert(c->space_fixup);
 797        ubifs_assert(!c->ro_mount);
 798
 799        ubifs_msg(c, "start fixing up free space");
 800
 801        err = fixup_free_space(c);
 802        if (err)
 803                return err;
 804
 805        sup = ubifs_read_sb_node(c);
 806        if (IS_ERR(sup))
 807                return PTR_ERR(sup);
 808
 809        /* Free-space fixup is no longer required */
 810        c->space_fixup = 0;
 811        sup->flags &= cpu_to_le32(~UBIFS_FLG_SPACE_FIXUP);
 812
 813        err = ubifs_write_sb_node(c, sup);
 814        kfree(sup);
 815        if (err)
 816                return err;
 817
 818        ubifs_msg(c, "free space fixup complete");
 819        return err;
 820}
 821