linux/drivers/mtd/ubi/vtbl.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) International Business Machines Corp., 2006
   3 * Copyright (c) Nokia Corporation, 2006, 2007
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
  13 * the GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18 *
  19 * Author: Artem Bityutskiy (Битюцкий Артём)
  20 */
  21
  22/*
  23 * This file includes volume table manipulation code. The volume table is an
  24 * on-flash table containing volume meta-data like name, number of reserved
  25 * physical eraseblocks, type, etc. The volume table is stored in the so-called
  26 * "layout volume".
  27 *
  28 * The layout volume is an internal volume which is organized as follows. It
  29 * consists of two logical eraseblocks - LEB 0 and LEB 1. Each logical
  30 * eraseblock stores one volume table copy, i.e. LEB 0 and LEB 1 duplicate each
  31 * other. This redundancy guarantees robustness to unclean reboots. The volume
  32 * table is basically an array of volume table records. Each record contains
  33 * full information about the volume and protected by a CRC checksum. Note,
  34 * nowadays we use the atomic LEB change operation when updating the volume
  35 * table, so we do not really need 2 LEBs anymore, but we preserve the older
  36 * design for the backward compatibility reasons.
  37 *
  38 * When the volume table is changed, it is first changed in RAM. Then LEB 0 is
  39 * erased, and the updated volume table is written back to LEB 0. Then same for
  40 * LEB 1. This scheme guarantees recoverability from unclean reboots.
  41 *
  42 * In this UBI implementation the on-flash volume table does not contain any
  43 * information about how much data static volumes contain.
  44 *
  45 * But it would still be beneficial to store this information in the volume
  46 * table. For example, suppose we have a static volume X, and all its physical
  47 * eraseblocks became bad for some reasons. Suppose we are attaching the
  48 * corresponding MTD device, for some reason we find no logical eraseblocks
  49 * corresponding to the volume X. According to the volume table volume X does
  50 * exist. So we don't know whether it is just empty or all its physical
  51 * eraseblocks went bad. So we cannot alarm the user properly.
  52 *
  53 * The volume table also stores so-called "update marker", which is used for
  54 * volume updates. Before updating the volume, the update marker is set, and
  55 * after the update operation is finished, the update marker is cleared. So if
  56 * the update operation was interrupted (e.g. by an unclean reboot) - the
  57 * update marker is still there and we know that the volume's contents is
  58 * damaged.
  59 */
  60
  61#include <linux/crc32.h>
  62#include <linux/err.h>
  63#include <linux/slab.h>
  64#include <asm/div64.h>
  65#include "ubi.h"
  66
  67static void self_vtbl_check(const struct ubi_device *ubi);
  68
  69/* Empty volume table record */
  70static struct ubi_vtbl_record empty_vtbl_record;
  71
  72/**
  73 * ubi_update_layout_vol - helper for updatting layout volumes on flash
  74 * @ubi: UBI device description object
  75 */
  76static int ubi_update_layout_vol(struct ubi_device *ubi)
  77{
  78        struct ubi_volume *layout_vol;
  79        int i, err;
  80
  81        layout_vol = ubi->volumes[vol_id2idx(ubi, UBI_LAYOUT_VOLUME_ID)];
  82        for (i = 0; i < UBI_LAYOUT_VOLUME_EBS; i++) {
  83                err = ubi_eba_atomic_leb_change(ubi, layout_vol, i, ubi->vtbl,
  84                                                ubi->vtbl_size);
  85                if (err)
  86                        return err;
  87        }
  88
  89        return 0;
  90}
  91
  92/**
  93 * ubi_change_vtbl_record - change volume table record.
  94 * @ubi: UBI device description object
  95 * @idx: table index to change
  96 * @vtbl_rec: new volume table record
  97 *
  98 * This function changes volume table record @idx. If @vtbl_rec is %NULL, empty
  99 * volume table record is written. The caller does not have to calculate CRC of
 100 * the record as it is done by this function. Returns zero in case of success
 101 * and a negative error code in case of failure.
 102 */
 103int ubi_change_vtbl_record(struct ubi_device *ubi, int idx,
 104                           struct ubi_vtbl_record *vtbl_rec)
 105{
 106        int err;
 107        uint32_t crc;
 108
 109        ubi_assert(idx >= 0 && idx < ubi->vtbl_slots);
 110
 111        if (!vtbl_rec)
 112                vtbl_rec = &empty_vtbl_record;
 113        else {
 114                crc = crc32(UBI_CRC32_INIT, vtbl_rec, UBI_VTBL_RECORD_SIZE_CRC);
 115                vtbl_rec->crc = cpu_to_be32(crc);
 116        }
 117
 118        memcpy(&ubi->vtbl[idx], vtbl_rec, sizeof(struct ubi_vtbl_record));
 119        err = ubi_update_layout_vol(ubi);
 120
 121        self_vtbl_check(ubi);
 122        return err ? err : 0;
 123}
 124
 125/**
 126 * ubi_vtbl_rename_volumes - rename UBI volumes in the volume table.
 127 * @ubi: UBI device description object
 128 * @rename_list: list of &struct ubi_rename_entry objects
 129 *
 130 * This function re-names multiple volumes specified in @req in the volume
 131 * table. Returns zero in case of success and a negative error code in case of
 132 * failure.
 133 */
 134int ubi_vtbl_rename_volumes(struct ubi_device *ubi,
 135                            struct list_head *rename_list)
 136{
 137        struct ubi_rename_entry *re;
 138
 139        list_for_each_entry(re, rename_list, list) {
 140                uint32_t crc;
 141                struct ubi_volume *vol = re->desc->vol;
 142                struct ubi_vtbl_record *vtbl_rec = &ubi->vtbl[vol->vol_id];
 143
 144                if (re->remove) {
 145                        memcpy(vtbl_rec, &empty_vtbl_record,
 146                               sizeof(struct ubi_vtbl_record));
 147                        continue;
 148                }
 149
 150                vtbl_rec->name_len = cpu_to_be16(re->new_name_len);
 151                memcpy(vtbl_rec->name, re->new_name, re->new_name_len);
 152                memset(vtbl_rec->name + re->new_name_len, 0,
 153                       UBI_VOL_NAME_MAX + 1 - re->new_name_len);
 154                crc = crc32(UBI_CRC32_INIT, vtbl_rec,
 155                            UBI_VTBL_RECORD_SIZE_CRC);
 156                vtbl_rec->crc = cpu_to_be32(crc);
 157        }
 158
 159        return ubi_update_layout_vol(ubi);
 160}
 161
 162/**
 163 * vtbl_check - check if volume table is not corrupted and sensible.
 164 * @ubi: UBI device description object
 165 * @vtbl: volume table
 166 *
 167 * This function returns zero if @vtbl is all right, %1 if CRC is incorrect,
 168 * and %-EINVAL if it contains inconsistent data.
 169 */
 170static int vtbl_check(const struct ubi_device *ubi,
 171                      const struct ubi_vtbl_record *vtbl)
 172{
 173        int i, n, reserved_pebs, alignment, data_pad, vol_type, name_len;
 174        int upd_marker, err;
 175        uint32_t crc;
 176        const char *name;
 177
 178        for (i = 0; i < ubi->vtbl_slots; i++) {
 179                cond_resched();
 180
 181                reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs);
 182                alignment = be32_to_cpu(vtbl[i].alignment);
 183                data_pad = be32_to_cpu(vtbl[i].data_pad);
 184                upd_marker = vtbl[i].upd_marker;
 185                vol_type = vtbl[i].vol_type;
 186                name_len = be16_to_cpu(vtbl[i].name_len);
 187                name = &vtbl[i].name[0];
 188
 189                crc = crc32(UBI_CRC32_INIT, &vtbl[i], UBI_VTBL_RECORD_SIZE_CRC);
 190                if (be32_to_cpu(vtbl[i].crc) != crc) {
 191                        ubi_err(ubi, "bad CRC at record %u: %#08x, not %#08x",
 192                                 i, crc, be32_to_cpu(vtbl[i].crc));
 193                        ubi_dump_vtbl_record(&vtbl[i], i);
 194                        return 1;
 195                }
 196
 197                if (reserved_pebs == 0) {
 198                        if (memcmp(&vtbl[i], &empty_vtbl_record,
 199                                                UBI_VTBL_RECORD_SIZE)) {
 200                                err = 2;
 201                                goto bad;
 202                        }
 203                        continue;
 204                }
 205
 206                if (reserved_pebs < 0 || alignment < 0 || data_pad < 0 ||
 207                    name_len < 0) {
 208                        err = 3;
 209                        goto bad;
 210                }
 211
 212                if (alignment > ubi->leb_size || alignment == 0) {
 213                        err = 4;
 214                        goto bad;
 215                }
 216
 217                n = alignment & (ubi->min_io_size - 1);
 218                if (alignment != 1 && n) {
 219                        err = 5;
 220                        goto bad;
 221                }
 222
 223                n = ubi->leb_size % alignment;
 224                if (data_pad != n) {
 225                        ubi_err(ubi, "bad data_pad, has to be %d", n);
 226                        err = 6;
 227                        goto bad;
 228                }
 229
 230                if (vol_type != UBI_VID_DYNAMIC && vol_type != UBI_VID_STATIC) {
 231                        err = 7;
 232                        goto bad;
 233                }
 234
 235                if (upd_marker != 0 && upd_marker != 1) {
 236                        err = 8;
 237                        goto bad;
 238                }
 239
 240                if (reserved_pebs > ubi->good_peb_count) {
 241                        ubi_err(ubi, "too large reserved_pebs %d, good PEBs %d",
 242                                reserved_pebs, ubi->good_peb_count);
 243                        err = 9;
 244                        goto bad;
 245                }
 246
 247                if (name_len > UBI_VOL_NAME_MAX) {
 248                        err = 10;
 249                        goto bad;
 250                }
 251
 252                if (name[0] == '\0') {
 253                        err = 11;
 254                        goto bad;
 255                }
 256
 257                if (name_len != strnlen(name, name_len + 1)) {
 258                        err = 12;
 259                        goto bad;
 260                }
 261        }
 262
 263        /* Checks that all names are unique */
 264        for (i = 0; i < ubi->vtbl_slots - 1; i++) {
 265                for (n = i + 1; n < ubi->vtbl_slots; n++) {
 266                        int len1 = be16_to_cpu(vtbl[i].name_len);
 267                        int len2 = be16_to_cpu(vtbl[n].name_len);
 268
 269                        if (len1 > 0 && len1 == len2 &&
 270                            !strncmp(vtbl[i].name, vtbl[n].name, len1)) {
 271                                ubi_err(ubi, "volumes %d and %d have the same name \"%s\"",
 272                                        i, n, vtbl[i].name);
 273                                ubi_dump_vtbl_record(&vtbl[i], i);
 274                                ubi_dump_vtbl_record(&vtbl[n], n);
 275                                return -EINVAL;
 276                        }
 277                }
 278        }
 279
 280        return 0;
 281
 282bad:
 283        ubi_err(ubi, "volume table check failed: record %d, error %d", i, err);
 284        ubi_dump_vtbl_record(&vtbl[i], i);
 285        return -EINVAL;
 286}
 287
 288/**
 289 * create_vtbl - create a copy of volume table.
 290 * @ubi: UBI device description object
 291 * @ai: attaching information
 292 * @copy: number of the volume table copy
 293 * @vtbl: contents of the volume table
 294 *
 295 * This function returns zero in case of success and a negative error code in
 296 * case of failure.
 297 */
 298static int create_vtbl(struct ubi_device *ubi, struct ubi_attach_info *ai,
 299                       int copy, void *vtbl)
 300{
 301        int err, tries = 0;
 302        struct ubi_vid_io_buf *vidb;
 303        struct ubi_vid_hdr *vid_hdr;
 304        struct ubi_ainf_peb *new_aeb;
 305
 306        dbg_gen("create volume table (copy #%d)", copy + 1);
 307
 308        vidb = ubi_alloc_vid_buf(ubi, GFP_KERNEL);
 309        if (!vidb)
 310                return -ENOMEM;
 311
 312        vid_hdr = ubi_get_vid_hdr(vidb);
 313
 314retry:
 315        new_aeb = ubi_early_get_peb(ubi, ai);
 316        if (IS_ERR(new_aeb)) {
 317                err = PTR_ERR(new_aeb);
 318                goto out_free;
 319        }
 320
 321        vid_hdr->vol_type = UBI_LAYOUT_VOLUME_TYPE;
 322        vid_hdr->vol_id = cpu_to_be32(UBI_LAYOUT_VOLUME_ID);
 323        vid_hdr->compat = UBI_LAYOUT_VOLUME_COMPAT;
 324        vid_hdr->data_size = vid_hdr->used_ebs =
 325                             vid_hdr->data_pad = cpu_to_be32(0);
 326        vid_hdr->lnum = cpu_to_be32(copy);
 327        vid_hdr->sqnum = cpu_to_be64(++ai->max_sqnum);
 328
 329        /* The EC header is already there, write the VID header */
 330        err = ubi_io_write_vid_hdr(ubi, new_aeb->pnum, vidb);
 331        if (err)
 332                goto write_error;
 333
 334        /* Write the layout volume contents */
 335        err = ubi_io_write_data(ubi, vtbl, new_aeb->pnum, 0, ubi->vtbl_size);
 336        if (err)
 337                goto write_error;
 338
 339        /*
 340         * And add it to the attaching information. Don't delete the old version
 341         * of this LEB as it will be deleted and freed in 'ubi_add_to_av()'.
 342         */
 343        err = ubi_add_to_av(ubi, ai, new_aeb->pnum, new_aeb->ec, vid_hdr, 0);
 344        ubi_free_aeb(ai, new_aeb);
 345        ubi_free_vid_buf(vidb);
 346        return err;
 347
 348write_error:
 349        if (err == -EIO && ++tries <= 5) {
 350                /*
 351                 * Probably this physical eraseblock went bad, try to pick
 352                 * another one.
 353                 */
 354                list_add(&new_aeb->u.list, &ai->erase);
 355                goto retry;
 356        }
 357        ubi_free_aeb(ai, new_aeb);
 358out_free:
 359        ubi_free_vid_buf(vidb);
 360        return err;
 361
 362}
 363
 364/**
 365 * process_lvol - process the layout volume.
 366 * @ubi: UBI device description object
 367 * @ai: attaching information
 368 * @av: layout volume attaching information
 369 *
 370 * This function is responsible for reading the layout volume, ensuring it is
 371 * not corrupted, and recovering from corruptions if needed. Returns volume
 372 * table in case of success and a negative error code in case of failure.
 373 */
 374static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi,
 375                                            struct ubi_attach_info *ai,
 376                                            struct ubi_ainf_volume *av)
 377{
 378        int err;
 379        struct rb_node *rb;
 380        struct ubi_ainf_peb *aeb;
 381        struct ubi_vtbl_record *leb[UBI_LAYOUT_VOLUME_EBS] = { NULL, NULL };
 382        int leb_corrupted[UBI_LAYOUT_VOLUME_EBS] = {1, 1};
 383
 384        /*
 385         * UBI goes through the following steps when it changes the layout
 386         * volume:
 387         * a. erase LEB 0;
 388         * b. write new data to LEB 0;
 389         * c. erase LEB 1;
 390         * d. write new data to LEB 1.
 391         *
 392         * Before the change, both LEBs contain the same data.
 393         *
 394         * Due to unclean reboots, the contents of LEB 0 may be lost, but there
 395         * should LEB 1. So it is OK if LEB 0 is corrupted while LEB 1 is not.
 396         * Similarly, LEB 1 may be lost, but there should be LEB 0. And
 397         * finally, unclean reboots may result in a situation when neither LEB
 398         * 0 nor LEB 1 are corrupted, but they are different. In this case, LEB
 399         * 0 contains more recent information.
 400         *
 401         * So the plan is to first check LEB 0. Then
 402         * a. if LEB 0 is OK, it must be containing the most recent data; then
 403         *    we compare it with LEB 1, and if they are different, we copy LEB
 404         *    0 to LEB 1;
 405         * b. if LEB 0 is corrupted, but LEB 1 has to be OK, and we copy LEB 1
 406         *    to LEB 0.
 407         */
 408
 409        dbg_gen("check layout volume");
 410
 411        /* Read both LEB 0 and LEB 1 into memory */
 412        ubi_rb_for_each_entry(rb, aeb, &av->root, u.rb) {
 413                leb[aeb->lnum] = vzalloc(ubi->vtbl_size);
 414                if (!leb[aeb->lnum]) {
 415                        err = -ENOMEM;
 416                        goto out_free;
 417                }
 418
 419                err = ubi_io_read_data(ubi, leb[aeb->lnum], aeb->pnum, 0,
 420                                       ubi->vtbl_size);
 421                if (err == UBI_IO_BITFLIPS || mtd_is_eccerr(err))
 422                        /*
 423                         * Scrub the PEB later. Note, -EBADMSG indicates an
 424                         * uncorrectable ECC error, but we have our own CRC and
 425                         * the data will be checked later. If the data is OK,
 426                         * the PEB will be scrubbed (because we set
 427                         * aeb->scrub). If the data is not OK, the contents of
 428                         * the PEB will be recovered from the second copy, and
 429                         * aeb->scrub will be cleared in
 430                         * 'ubi_add_to_av()'.
 431                         */
 432                        aeb->scrub = 1;
 433                else if (err)
 434                        goto out_free;
 435        }
 436
 437        err = -EINVAL;
 438        if (leb[0]) {
 439                leb_corrupted[0] = vtbl_check(ubi, leb[0]);
 440                if (leb_corrupted[0] < 0)
 441                        goto out_free;
 442        }
 443
 444        if (!leb_corrupted[0]) {
 445                /* LEB 0 is OK */
 446                if (leb[1])
 447                        leb_corrupted[1] = memcmp(leb[0], leb[1],
 448                                                  ubi->vtbl_size);
 449                if (leb_corrupted[1]) {
 450                        ubi_warn(ubi, "volume table copy #2 is corrupted");
 451                        err = create_vtbl(ubi, ai, 1, leb[0]);
 452                        if (err)
 453                                goto out_free;
 454                        ubi_msg(ubi, "volume table was restored");
 455                }
 456
 457                /* Both LEB 1 and LEB 2 are OK and consistent */
 458                vfree(leb[1]);
 459                return leb[0];
 460        } else {
 461                /* LEB 0 is corrupted or does not exist */
 462                if (leb[1]) {
 463                        leb_corrupted[1] = vtbl_check(ubi, leb[1]);
 464                        if (leb_corrupted[1] < 0)
 465                                goto out_free;
 466                }
 467                if (leb_corrupted[1]) {
 468                        /* Both LEB 0 and LEB 1 are corrupted */
 469                        ubi_err(ubi, "both volume tables are corrupted");
 470                        goto out_free;
 471                }
 472
 473                ubi_warn(ubi, "volume table copy #1 is corrupted");
 474                err = create_vtbl(ubi, ai, 0, leb[1]);
 475                if (err)
 476                        goto out_free;
 477                ubi_msg(ubi, "volume table was restored");
 478
 479                vfree(leb[0]);
 480                return leb[1];
 481        }
 482
 483out_free:
 484        vfree(leb[0]);
 485        vfree(leb[1]);
 486        return ERR_PTR(err);
 487}
 488
 489/**
 490 * create_empty_lvol - create empty layout volume.
 491 * @ubi: UBI device description object
 492 * @ai: attaching information
 493 *
 494 * This function returns volume table contents in case of success and a
 495 * negative error code in case of failure.
 496 */
 497static struct ubi_vtbl_record *create_empty_lvol(struct ubi_device *ubi,
 498                                                 struct ubi_attach_info *ai)
 499{
 500        int i;
 501        struct ubi_vtbl_record *vtbl;
 502
 503        vtbl = vzalloc(ubi->vtbl_size);
 504        if (!vtbl)
 505                return ERR_PTR(-ENOMEM);
 506
 507        for (i = 0; i < ubi->vtbl_slots; i++)
 508                memcpy(&vtbl[i], &empty_vtbl_record, UBI_VTBL_RECORD_SIZE);
 509
 510        for (i = 0; i < UBI_LAYOUT_VOLUME_EBS; i++) {
 511                int err;
 512
 513                err = create_vtbl(ubi, ai, i, vtbl);
 514                if (err) {
 515                        vfree(vtbl);
 516                        return ERR_PTR(err);
 517                }
 518        }
 519
 520        return vtbl;
 521}
 522
 523/**
 524 * init_volumes - initialize volume information for existing volumes.
 525 * @ubi: UBI device description object
 526 * @ai: scanning information
 527 * @vtbl: volume table
 528 *
 529 * This function allocates volume description objects for existing volumes.
 530 * Returns zero in case of success and a negative error code in case of
 531 * failure.
 532 */
 533static int init_volumes(struct ubi_device *ubi,
 534                        const struct ubi_attach_info *ai,
 535                        const struct ubi_vtbl_record *vtbl)
 536{
 537        int i, reserved_pebs = 0;
 538        struct ubi_ainf_volume *av;
 539        struct ubi_volume *vol;
 540
 541        for (i = 0; i < ubi->vtbl_slots; i++) {
 542                cond_resched();
 543
 544                if (be32_to_cpu(vtbl[i].reserved_pebs) == 0)
 545                        continue; /* Empty record */
 546
 547                vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
 548                if (!vol)
 549                        return -ENOMEM;
 550
 551                vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs);
 552                vol->alignment = be32_to_cpu(vtbl[i].alignment);
 553                vol->data_pad = be32_to_cpu(vtbl[i].data_pad);
 554                vol->upd_marker = vtbl[i].upd_marker;
 555                vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ?
 556                                        UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME;
 557                vol->name_len = be16_to_cpu(vtbl[i].name_len);
 558                vol->usable_leb_size = ubi->leb_size - vol->data_pad;
 559                memcpy(vol->name, vtbl[i].name, vol->name_len);
 560                vol->name[vol->name_len] = '\0';
 561                vol->vol_id = i;
 562
 563                if (vtbl[i].flags & UBI_VTBL_AUTORESIZE_FLG) {
 564                        /* Auto re-size flag may be set only for one volume */
 565                        if (ubi->autoresize_vol_id != -1) {
 566                                ubi_err(ubi, "more than one auto-resize volume (%d and %d)",
 567                                        ubi->autoresize_vol_id, i);
 568                                kfree(vol);
 569                                return -EINVAL;
 570                        }
 571
 572                        ubi->autoresize_vol_id = i;
 573                }
 574
 575                ubi_assert(!ubi->volumes[i]);
 576                ubi->volumes[i] = vol;
 577                ubi->vol_count += 1;
 578                vol->ubi = ubi;
 579                reserved_pebs += vol->reserved_pebs;
 580
 581                /*
 582                 * In case of dynamic volume UBI knows nothing about how many
 583                 * data is stored there. So assume the whole volume is used.
 584                 */
 585                if (vol->vol_type == UBI_DYNAMIC_VOLUME) {
 586                        vol->used_ebs = vol->reserved_pebs;
 587                        vol->last_eb_bytes = vol->usable_leb_size;
 588                        vol->used_bytes =
 589                                (long long)vol->used_ebs * vol->usable_leb_size;
 590                        continue;
 591                }
 592
 593                /* Static volumes only */
 594                av = ubi_find_av(ai, i);
 595                if (!av || !av->leb_count) {
 596                        /*
 597                         * No eraseblocks belonging to this volume found. We
 598                         * don't actually know whether this static volume is
 599                         * completely corrupted or just contains no data. And
 600                         * we cannot know this as long as data size is not
 601                         * stored on flash. So we just assume the volume is
 602                         * empty. FIXME: this should be handled.
 603                         */
 604                        continue;
 605                }
 606
 607                if (av->leb_count != av->used_ebs) {
 608                        /*
 609                         * We found a static volume which misses several
 610                         * eraseblocks. Treat it as corrupted.
 611                         */
 612                        ubi_warn(ubi, "static volume %d misses %d LEBs - corrupted",
 613                                 av->vol_id, av->used_ebs - av->leb_count);
 614                        vol->corrupted = 1;
 615                        continue;
 616                }
 617
 618                vol->used_ebs = av->used_ebs;
 619                vol->used_bytes =
 620                        (long long)(vol->used_ebs - 1) * vol->usable_leb_size;
 621                vol->used_bytes += av->last_data_size;
 622                vol->last_eb_bytes = av->last_data_size;
 623        }
 624
 625        /* And add the layout volume */
 626        vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
 627        if (!vol)
 628                return -ENOMEM;
 629
 630        vol->reserved_pebs = UBI_LAYOUT_VOLUME_EBS;
 631        vol->alignment = UBI_LAYOUT_VOLUME_ALIGN;
 632        vol->vol_type = UBI_DYNAMIC_VOLUME;
 633        vol->name_len = sizeof(UBI_LAYOUT_VOLUME_NAME) - 1;
 634        memcpy(vol->name, UBI_LAYOUT_VOLUME_NAME, vol->name_len + 1);
 635        vol->usable_leb_size = ubi->leb_size;
 636        vol->used_ebs = vol->reserved_pebs;
 637        vol->last_eb_bytes = vol->reserved_pebs;
 638        vol->used_bytes =
 639                (long long)vol->used_ebs * (ubi->leb_size - vol->data_pad);
 640        vol->vol_id = UBI_LAYOUT_VOLUME_ID;
 641        vol->ref_count = 1;
 642
 643        ubi_assert(!ubi->volumes[i]);
 644        ubi->volumes[vol_id2idx(ubi, vol->vol_id)] = vol;
 645        reserved_pebs += vol->reserved_pebs;
 646        ubi->vol_count += 1;
 647        vol->ubi = ubi;
 648
 649        if (reserved_pebs > ubi->avail_pebs) {
 650                ubi_err(ubi, "not enough PEBs, required %d, available %d",
 651                        reserved_pebs, ubi->avail_pebs);
 652                if (ubi->corr_peb_count)
 653                        ubi_err(ubi, "%d PEBs are corrupted and not used",
 654                                ubi->corr_peb_count);
 655                return -ENOSPC;
 656        }
 657        ubi->rsvd_pebs += reserved_pebs;
 658        ubi->avail_pebs -= reserved_pebs;
 659
 660        return 0;
 661}
 662
 663/**
 664 * check_av - check volume attaching information.
 665 * @vol: UBI volume description object
 666 * @av: volume attaching information
 667 *
 668 * This function returns zero if the volume attaching information is consistent
 669 * to the data read from the volume tabla, and %-EINVAL if not.
 670 */
 671static int check_av(const struct ubi_volume *vol,
 672                    const struct ubi_ainf_volume *av)
 673{
 674        int err;
 675
 676        if (av->highest_lnum >= vol->reserved_pebs) {
 677                err = 1;
 678                goto bad;
 679        }
 680        if (av->leb_count > vol->reserved_pebs) {
 681                err = 2;
 682                goto bad;
 683        }
 684        if (av->vol_type != vol->vol_type) {
 685                err = 3;
 686                goto bad;
 687        }
 688        if (av->used_ebs > vol->reserved_pebs) {
 689                err = 4;
 690                goto bad;
 691        }
 692        if (av->data_pad != vol->data_pad) {
 693                err = 5;
 694                goto bad;
 695        }
 696        return 0;
 697
 698bad:
 699        ubi_err(vol->ubi, "bad attaching information, error %d", err);
 700        ubi_dump_av(av);
 701        ubi_dump_vol_info(vol);
 702        return -EINVAL;
 703}
 704
 705/**
 706 * check_attaching_info - check that attaching information.
 707 * @ubi: UBI device description object
 708 * @ai: attaching information
 709 *
 710 * Even though we protect on-flash data by CRC checksums, we still don't trust
 711 * the media. This function ensures that attaching information is consistent to
 712 * the information read from the volume table. Returns zero if the attaching
 713 * information is OK and %-EINVAL if it is not.
 714 */
 715static int check_attaching_info(const struct ubi_device *ubi,
 716                               struct ubi_attach_info *ai)
 717{
 718        int err, i;
 719        struct ubi_ainf_volume *av;
 720        struct ubi_volume *vol;
 721
 722        if (ai->vols_found > UBI_INT_VOL_COUNT + ubi->vtbl_slots) {
 723                ubi_err(ubi, "found %d volumes while attaching, maximum is %d + %d",
 724                        ai->vols_found, UBI_INT_VOL_COUNT, ubi->vtbl_slots);
 725                return -EINVAL;
 726        }
 727
 728        if (ai->highest_vol_id >= ubi->vtbl_slots + UBI_INT_VOL_COUNT &&
 729            ai->highest_vol_id < UBI_INTERNAL_VOL_START) {
 730                ubi_err(ubi, "too large volume ID %d found",
 731                        ai->highest_vol_id);
 732                return -EINVAL;
 733        }
 734
 735        for (i = 0; i < ubi->vtbl_slots + UBI_INT_VOL_COUNT; i++) {
 736                cond_resched();
 737
 738                av = ubi_find_av(ai, i);
 739                vol = ubi->volumes[i];
 740                if (!vol) {
 741                        if (av)
 742                                ubi_remove_av(ai, av);
 743                        continue;
 744                }
 745
 746                if (vol->reserved_pebs == 0) {
 747                        ubi_assert(i < ubi->vtbl_slots);
 748
 749                        if (!av)
 750                                continue;
 751
 752                        /*
 753                         * During attaching we found a volume which does not
 754                         * exist according to the information in the volume
 755                         * table. This must have happened due to an unclean
 756                         * reboot while the volume was being removed. Discard
 757                         * these eraseblocks.
 758                         */
 759                        ubi_msg(ubi, "finish volume %d removal", av->vol_id);
 760                        ubi_remove_av(ai, av);
 761                } else if (av) {
 762                        err = check_av(vol, av);
 763                        if (err)
 764                                return err;
 765                }
 766        }
 767
 768        return 0;
 769}
 770
 771/**
 772 * ubi_read_volume_table - read the volume table.
 773 * @ubi: UBI device description object
 774 * @ai: attaching information
 775 *
 776 * This function reads volume table, checks it, recover from errors if needed,
 777 * or creates it if needed. Returns zero in case of success and a negative
 778 * error code in case of failure.
 779 */
 780int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai)
 781{
 782        int i, err;
 783        struct ubi_ainf_volume *av;
 784
 785        empty_vtbl_record.crc = cpu_to_be32(0xf116c36b);
 786
 787        /*
 788         * The number of supported volumes is limited by the eraseblock size
 789         * and by the UBI_MAX_VOLUMES constant.
 790         */
 791        ubi->vtbl_slots = ubi->leb_size / UBI_VTBL_RECORD_SIZE;
 792        if (ubi->vtbl_slots > UBI_MAX_VOLUMES)
 793                ubi->vtbl_slots = UBI_MAX_VOLUMES;
 794
 795        ubi->vtbl_size = ubi->vtbl_slots * UBI_VTBL_RECORD_SIZE;
 796        ubi->vtbl_size = ALIGN(ubi->vtbl_size, ubi->min_io_size);
 797
 798        av = ubi_find_av(ai, UBI_LAYOUT_VOLUME_ID);
 799        if (!av) {
 800                /*
 801                 * No logical eraseblocks belonging to the layout volume were
 802                 * found. This could mean that the flash is just empty. In
 803                 * this case we create empty layout volume.
 804                 *
 805                 * But if flash is not empty this must be a corruption or the
 806                 * MTD device just contains garbage.
 807                 */
 808                if (ai->is_empty) {
 809                        ubi->vtbl = create_empty_lvol(ubi, ai);
 810                        if (IS_ERR(ubi->vtbl))
 811                                return PTR_ERR(ubi->vtbl);
 812                } else {
 813                        ubi_err(ubi, "the layout volume was not found");
 814                        return -EINVAL;
 815                }
 816        } else {
 817                if (av->leb_count > UBI_LAYOUT_VOLUME_EBS) {
 818                        /* This must not happen with proper UBI images */
 819                        ubi_err(ubi, "too many LEBs (%d) in layout volume",
 820                                av->leb_count);
 821                        return -EINVAL;
 822                }
 823
 824                ubi->vtbl = process_lvol(ubi, ai, av);
 825                if (IS_ERR(ubi->vtbl))
 826                        return PTR_ERR(ubi->vtbl);
 827        }
 828
 829        ubi->avail_pebs = ubi->good_peb_count - ubi->corr_peb_count;
 830
 831        /*
 832         * The layout volume is OK, initialize the corresponding in-RAM data
 833         * structures.
 834         */
 835        err = init_volumes(ubi, ai, ubi->vtbl);
 836        if (err)
 837                goto out_free;
 838
 839        /*
 840         * Make sure that the attaching information is consistent to the
 841         * information stored in the volume table.
 842         */
 843        err = check_attaching_info(ubi, ai);
 844        if (err)
 845                goto out_free;
 846
 847        return 0;
 848
 849out_free:
 850        vfree(ubi->vtbl);
 851        for (i = 0; i < ubi->vtbl_slots + UBI_INT_VOL_COUNT; i++) {
 852                kfree(ubi->volumes[i]);
 853                ubi->volumes[i] = NULL;
 854        }
 855        return err;
 856}
 857
 858/**
 859 * self_vtbl_check - check volume table.
 860 * @ubi: UBI device description object
 861 */
 862static void self_vtbl_check(const struct ubi_device *ubi)
 863{
 864        if (!ubi_dbg_chk_gen(ubi))
 865                return;
 866
 867        if (vtbl_check(ubi, ubi->vtbl)) {
 868                ubi_err(ubi, "self-check failed");
 869                BUG();
 870        }
 871}
 872