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_hdr *vid_hdr;
 303        struct ubi_ainf_peb *new_aeb;
 304
 305        dbg_gen("create volume table (copy #%d)", copy + 1);
 306
 307        vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_KERNEL);
 308        if (!vid_hdr)
 309                return -ENOMEM;
 310
 311retry:
 312        new_aeb = ubi_early_get_peb(ubi, ai);
 313        if (IS_ERR(new_aeb)) {
 314                err = PTR_ERR(new_aeb);
 315                goto out_free;
 316        }
 317
 318        vid_hdr->vol_type = UBI_LAYOUT_VOLUME_TYPE;
 319        vid_hdr->vol_id = cpu_to_be32(UBI_LAYOUT_VOLUME_ID);
 320        vid_hdr->compat = UBI_LAYOUT_VOLUME_COMPAT;
 321        vid_hdr->data_size = vid_hdr->used_ebs =
 322                             vid_hdr->data_pad = cpu_to_be32(0);
 323        vid_hdr->lnum = cpu_to_be32(copy);
 324        vid_hdr->sqnum = cpu_to_be64(++ai->max_sqnum);
 325
 326        /* The EC header is already there, write the VID header */
 327        err = ubi_io_write_vid_hdr(ubi, new_aeb->pnum, vid_hdr);
 328        if (err)
 329                goto write_error;
 330
 331        /* Write the layout volume contents */
 332        err = ubi_io_write_data(ubi, vtbl, new_aeb->pnum, 0, ubi->vtbl_size);
 333        if (err)
 334                goto write_error;
 335
 336        /*
 337         * And add it to the attaching information. Don't delete the old version
 338         * of this LEB as it will be deleted and freed in 'ubi_add_to_av()'.
 339         */
 340        err = ubi_add_to_av(ubi, ai, new_aeb->pnum, new_aeb->ec, vid_hdr, 0);
 341        kmem_cache_free(ai->aeb_slab_cache, new_aeb);
 342        ubi_free_vid_hdr(ubi, vid_hdr);
 343        return err;
 344
 345write_error:
 346        if (err == -EIO && ++tries <= 5) {
 347                /*
 348                 * Probably this physical eraseblock went bad, try to pick
 349                 * another one.
 350                 */
 351                list_add(&new_aeb->u.list, &ai->erase);
 352                goto retry;
 353        }
 354        kmem_cache_free(ai->aeb_slab_cache, new_aeb);
 355out_free:
 356        ubi_free_vid_hdr(ubi, vid_hdr);
 357        return err;
 358
 359}
 360
 361/**
 362 * process_lvol - process the layout volume.
 363 * @ubi: UBI device description object
 364 * @ai: attaching information
 365 * @av: layout volume attaching information
 366 *
 367 * This function is responsible for reading the layout volume, ensuring it is
 368 * not corrupted, and recovering from corruptions if needed. Returns volume
 369 * table in case of success and a negative error code in case of failure.
 370 */
 371static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi,
 372                                            struct ubi_attach_info *ai,
 373                                            struct ubi_ainf_volume *av)
 374{
 375        int err;
 376        struct rb_node *rb;
 377        struct ubi_ainf_peb *aeb;
 378        struct ubi_vtbl_record *leb[UBI_LAYOUT_VOLUME_EBS] = { NULL, NULL };
 379        int leb_corrupted[UBI_LAYOUT_VOLUME_EBS] = {1, 1};
 380
 381        /*
 382         * UBI goes through the following steps when it changes the layout
 383         * volume:
 384         * a. erase LEB 0;
 385         * b. write new data to LEB 0;
 386         * c. erase LEB 1;
 387         * d. write new data to LEB 1.
 388         *
 389         * Before the change, both LEBs contain the same data.
 390         *
 391         * Due to unclean reboots, the contents of LEB 0 may be lost, but there
 392         * should LEB 1. So it is OK if LEB 0 is corrupted while LEB 1 is not.
 393         * Similarly, LEB 1 may be lost, but there should be LEB 0. And
 394         * finally, unclean reboots may result in a situation when neither LEB
 395         * 0 nor LEB 1 are corrupted, but they are different. In this case, LEB
 396         * 0 contains more recent information.
 397         *
 398         * So the plan is to first check LEB 0. Then
 399         * a. if LEB 0 is OK, it must be containing the most recent data; then
 400         *    we compare it with LEB 1, and if they are different, we copy LEB
 401         *    0 to LEB 1;
 402         * b. if LEB 0 is corrupted, but LEB 1 has to be OK, and we copy LEB 1
 403         *    to LEB 0.
 404         */
 405
 406        dbg_gen("check layout volume");
 407
 408        /* Read both LEB 0 and LEB 1 into memory */
 409        ubi_rb_for_each_entry(rb, aeb, &av->root, u.rb) {
 410                leb[aeb->lnum] = vzalloc(ubi->vtbl_size);
 411                if (!leb[aeb->lnum]) {
 412                        err = -ENOMEM;
 413                        goto out_free;
 414                }
 415
 416                err = ubi_io_read_data(ubi, leb[aeb->lnum], aeb->pnum, 0,
 417                                       ubi->vtbl_size);
 418                if (err == UBI_IO_BITFLIPS || mtd_is_eccerr(err))
 419                        /*
 420                         * Scrub the PEB later. Note, -EBADMSG indicates an
 421                         * uncorrectable ECC error, but we have our own CRC and
 422                         * the data will be checked later. If the data is OK,
 423                         * the PEB will be scrubbed (because we set
 424                         * aeb->scrub). If the data is not OK, the contents of
 425                         * the PEB will be recovered from the second copy, and
 426                         * aeb->scrub will be cleared in
 427                         * 'ubi_add_to_av()'.
 428                         */
 429                        aeb->scrub = 1;
 430                else if (err)
 431                        goto out_free;
 432        }
 433
 434        err = -EINVAL;
 435        if (leb[0]) {
 436                leb_corrupted[0] = vtbl_check(ubi, leb[0]);
 437                if (leb_corrupted[0] < 0)
 438                        goto out_free;
 439        }
 440
 441        if (!leb_corrupted[0]) {
 442                /* LEB 0 is OK */
 443                if (leb[1])
 444                        leb_corrupted[1] = memcmp(leb[0], leb[1],
 445                                                  ubi->vtbl_size);
 446                if (leb_corrupted[1]) {
 447                        ubi_warn(ubi, "volume table copy #2 is corrupted");
 448                        err = create_vtbl(ubi, ai, 1, leb[0]);
 449                        if (err)
 450                                goto out_free;
 451                        ubi_msg(ubi, "volume table was restored");
 452                }
 453
 454                /* Both LEB 1 and LEB 2 are OK and consistent */
 455                vfree(leb[1]);
 456                return leb[0];
 457        } else {
 458                /* LEB 0 is corrupted or does not exist */
 459                if (leb[1]) {
 460                        leb_corrupted[1] = vtbl_check(ubi, leb[1]);
 461                        if (leb_corrupted[1] < 0)
 462                                goto out_free;
 463                }
 464                if (leb_corrupted[1]) {
 465                        /* Both LEB 0 and LEB 1 are corrupted */
 466                        ubi_err(ubi, "both volume tables are corrupted");
 467                        goto out_free;
 468                }
 469
 470                ubi_warn(ubi, "volume table copy #1 is corrupted");
 471                err = create_vtbl(ubi, ai, 0, leb[1]);
 472                if (err)
 473                        goto out_free;
 474                ubi_msg(ubi, "volume table was restored");
 475
 476                vfree(leb[0]);
 477                return leb[1];
 478        }
 479
 480out_free:
 481        vfree(leb[0]);
 482        vfree(leb[1]);
 483        return ERR_PTR(err);
 484}
 485
 486/**
 487 * create_empty_lvol - create empty layout volume.
 488 * @ubi: UBI device description object
 489 * @ai: attaching information
 490 *
 491 * This function returns volume table contents in case of success and a
 492 * negative error code in case of failure.
 493 */
 494static struct ubi_vtbl_record *create_empty_lvol(struct ubi_device *ubi,
 495                                                 struct ubi_attach_info *ai)
 496{
 497        int i;
 498        struct ubi_vtbl_record *vtbl;
 499
 500        vtbl = vzalloc(ubi->vtbl_size);
 501        if (!vtbl)
 502                return ERR_PTR(-ENOMEM);
 503
 504        for (i = 0; i < ubi->vtbl_slots; i++)
 505                memcpy(&vtbl[i], &empty_vtbl_record, UBI_VTBL_RECORD_SIZE);
 506
 507        for (i = 0; i < UBI_LAYOUT_VOLUME_EBS; i++) {
 508                int err;
 509
 510                err = create_vtbl(ubi, ai, i, vtbl);
 511                if (err) {
 512                        vfree(vtbl);
 513                        return ERR_PTR(err);
 514                }
 515        }
 516
 517        return vtbl;
 518}
 519
 520/**
 521 * init_volumes - initialize volume information for existing volumes.
 522 * @ubi: UBI device description object
 523 * @ai: scanning information
 524 * @vtbl: volume table
 525 *
 526 * This function allocates volume description objects for existing volumes.
 527 * Returns zero in case of success and a negative error code in case of
 528 * failure.
 529 */
 530static int init_volumes(struct ubi_device *ubi,
 531                        const struct ubi_attach_info *ai,
 532                        const struct ubi_vtbl_record *vtbl)
 533{
 534        int i, reserved_pebs = 0;
 535        struct ubi_ainf_volume *av;
 536        struct ubi_volume *vol;
 537
 538        for (i = 0; i < ubi->vtbl_slots; i++) {
 539                cond_resched();
 540
 541                if (be32_to_cpu(vtbl[i].reserved_pebs) == 0)
 542                        continue; /* Empty record */
 543
 544                vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
 545                if (!vol)
 546                        return -ENOMEM;
 547
 548                vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs);
 549                vol->alignment = be32_to_cpu(vtbl[i].alignment);
 550                vol->data_pad = be32_to_cpu(vtbl[i].data_pad);
 551                vol->upd_marker = vtbl[i].upd_marker;
 552                vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ?
 553                                        UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME;
 554                vol->name_len = be16_to_cpu(vtbl[i].name_len);
 555                vol->usable_leb_size = ubi->leb_size - vol->data_pad;
 556                memcpy(vol->name, vtbl[i].name, vol->name_len);
 557                vol->name[vol->name_len] = '\0';
 558                vol->vol_id = i;
 559
 560                if (vtbl[i].flags & UBI_VTBL_AUTORESIZE_FLG) {
 561                        /* Auto re-size flag may be set only for one volume */
 562                        if (ubi->autoresize_vol_id != -1) {
 563                                ubi_err(ubi, "more than one auto-resize volume (%d and %d)",
 564                                        ubi->autoresize_vol_id, i);
 565                                kfree(vol);
 566                                return -EINVAL;
 567                        }
 568
 569                        ubi->autoresize_vol_id = i;
 570                }
 571
 572                ubi_assert(!ubi->volumes[i]);
 573                ubi->volumes[i] = vol;
 574                ubi->vol_count += 1;
 575                vol->ubi = ubi;
 576                reserved_pebs += vol->reserved_pebs;
 577
 578                /*
 579                 * In case of dynamic volume UBI knows nothing about how many
 580                 * data is stored there. So assume the whole volume is used.
 581                 */
 582                if (vol->vol_type == UBI_DYNAMIC_VOLUME) {
 583                        vol->used_ebs = vol->reserved_pebs;
 584                        vol->last_eb_bytes = vol->usable_leb_size;
 585                        vol->used_bytes =
 586                                (long long)vol->used_ebs * vol->usable_leb_size;
 587                        continue;
 588                }
 589
 590                /* Static volumes only */
 591                av = ubi_find_av(ai, i);
 592                if (!av || !av->leb_count) {
 593                        /*
 594                         * No eraseblocks belonging to this volume found. We
 595                         * don't actually know whether this static volume is
 596                         * completely corrupted or just contains no data. And
 597                         * we cannot know this as long as data size is not
 598                         * stored on flash. So we just assume the volume is
 599                         * empty. FIXME: this should be handled.
 600                         */
 601                        continue;
 602                }
 603
 604                if (av->leb_count != av->used_ebs) {
 605                        /*
 606                         * We found a static volume which misses several
 607                         * eraseblocks. Treat it as corrupted.
 608                         */
 609                        ubi_warn(ubi, "static volume %d misses %d LEBs - corrupted",
 610                                 av->vol_id, av->used_ebs - av->leb_count);
 611                        vol->corrupted = 1;
 612                        continue;
 613                }
 614
 615                vol->used_ebs = av->used_ebs;
 616                vol->used_bytes =
 617                        (long long)(vol->used_ebs - 1) * vol->usable_leb_size;
 618                vol->used_bytes += av->last_data_size;
 619                vol->last_eb_bytes = av->last_data_size;
 620        }
 621
 622        /* And add the layout volume */
 623        vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
 624        if (!vol)
 625                return -ENOMEM;
 626
 627        vol->reserved_pebs = UBI_LAYOUT_VOLUME_EBS;
 628        vol->alignment = UBI_LAYOUT_VOLUME_ALIGN;
 629        vol->vol_type = UBI_DYNAMIC_VOLUME;
 630        vol->name_len = sizeof(UBI_LAYOUT_VOLUME_NAME) - 1;
 631        memcpy(vol->name, UBI_LAYOUT_VOLUME_NAME, vol->name_len + 1);
 632        vol->usable_leb_size = ubi->leb_size;
 633        vol->used_ebs = vol->reserved_pebs;
 634        vol->last_eb_bytes = vol->reserved_pebs;
 635        vol->used_bytes =
 636                (long long)vol->used_ebs * (ubi->leb_size - vol->data_pad);
 637        vol->vol_id = UBI_LAYOUT_VOLUME_ID;
 638        vol->ref_count = 1;
 639
 640        ubi_assert(!ubi->volumes[i]);
 641        ubi->volumes[vol_id2idx(ubi, vol->vol_id)] = vol;
 642        reserved_pebs += vol->reserved_pebs;
 643        ubi->vol_count += 1;
 644        vol->ubi = ubi;
 645
 646        if (reserved_pebs > ubi->avail_pebs) {
 647                ubi_err(ubi, "not enough PEBs, required %d, available %d",
 648                        reserved_pebs, ubi->avail_pebs);
 649                if (ubi->corr_peb_count)
 650                        ubi_err(ubi, "%d PEBs are corrupted and not used",
 651                                ubi->corr_peb_count);
 652        }
 653        ubi->rsvd_pebs += reserved_pebs;
 654        ubi->avail_pebs -= reserved_pebs;
 655
 656        return 0;
 657}
 658
 659/**
 660 * check_av - check volume attaching information.
 661 * @vol: UBI volume description object
 662 * @av: volume attaching information
 663 *
 664 * This function returns zero if the volume attaching information is consistent
 665 * to the data read from the volume tabla, and %-EINVAL if not.
 666 */
 667static int check_av(const struct ubi_volume *vol,
 668                    const struct ubi_ainf_volume *av)
 669{
 670        int err;
 671
 672        if (av->highest_lnum >= vol->reserved_pebs) {
 673                err = 1;
 674                goto bad;
 675        }
 676        if (av->leb_count > vol->reserved_pebs) {
 677                err = 2;
 678                goto bad;
 679        }
 680        if (av->vol_type != vol->vol_type) {
 681                err = 3;
 682                goto bad;
 683        }
 684        if (av->used_ebs > vol->reserved_pebs) {
 685                err = 4;
 686                goto bad;
 687        }
 688        if (av->data_pad != vol->data_pad) {
 689                err = 5;
 690                goto bad;
 691        }
 692        return 0;
 693
 694bad:
 695        ubi_err(vol->ubi, "bad attaching information, error %d", err);
 696        ubi_dump_av(av);
 697        ubi_dump_vol_info(vol);
 698        return -EINVAL;
 699}
 700
 701/**
 702 * check_attaching_info - check that attaching information.
 703 * @ubi: UBI device description object
 704 * @ai: attaching information
 705 *
 706 * Even though we protect on-flash data by CRC checksums, we still don't trust
 707 * the media. This function ensures that attaching information is consistent to
 708 * the information read from the volume table. Returns zero if the attaching
 709 * information is OK and %-EINVAL if it is not.
 710 */
 711static int check_attaching_info(const struct ubi_device *ubi,
 712                               struct ubi_attach_info *ai)
 713{
 714        int err, i;
 715        struct ubi_ainf_volume *av;
 716        struct ubi_volume *vol;
 717
 718        if (ai->vols_found > UBI_INT_VOL_COUNT + ubi->vtbl_slots) {
 719                ubi_err(ubi, "found %d volumes while attaching, maximum is %d + %d",
 720                        ai->vols_found, UBI_INT_VOL_COUNT, ubi->vtbl_slots);
 721                return -EINVAL;
 722        }
 723
 724        if (ai->highest_vol_id >= ubi->vtbl_slots + UBI_INT_VOL_COUNT &&
 725            ai->highest_vol_id < UBI_INTERNAL_VOL_START) {
 726                ubi_err(ubi, "too large volume ID %d found",
 727                        ai->highest_vol_id);
 728                return -EINVAL;
 729        }
 730
 731        for (i = 0; i < ubi->vtbl_slots + UBI_INT_VOL_COUNT; i++) {
 732                cond_resched();
 733
 734                av = ubi_find_av(ai, i);
 735                vol = ubi->volumes[i];
 736                if (!vol) {
 737                        if (av)
 738                                ubi_remove_av(ai, av);
 739                        continue;
 740                }
 741
 742                if (vol->reserved_pebs == 0) {
 743                        ubi_assert(i < ubi->vtbl_slots);
 744
 745                        if (!av)
 746                                continue;
 747
 748                        /*
 749                         * During attaching we found a volume which does not
 750                         * exist according to the information in the volume
 751                         * table. This must have happened due to an unclean
 752                         * reboot while the volume was being removed. Discard
 753                         * these eraseblocks.
 754                         */
 755                        ubi_msg(ubi, "finish volume %d removal", av->vol_id);
 756                        ubi_remove_av(ai, av);
 757                } else if (av) {
 758                        err = check_av(vol, av);
 759                        if (err)
 760                                return err;
 761                }
 762        }
 763
 764        return 0;
 765}
 766
 767/**
 768 * ubi_read_volume_table - read the volume table.
 769 * @ubi: UBI device description object
 770 * @ai: attaching information
 771 *
 772 * This function reads volume table, checks it, recover from errors if needed,
 773 * or creates it if needed. Returns zero in case of success and a negative
 774 * error code in case of failure.
 775 */
 776int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai)
 777{
 778        int i, err;
 779        struct ubi_ainf_volume *av;
 780
 781        empty_vtbl_record.crc = cpu_to_be32(0xf116c36b);
 782
 783        /*
 784         * The number of supported volumes is limited by the eraseblock size
 785         * and by the UBI_MAX_VOLUMES constant.
 786         */
 787        ubi->vtbl_slots = ubi->leb_size / UBI_VTBL_RECORD_SIZE;
 788        if (ubi->vtbl_slots > UBI_MAX_VOLUMES)
 789                ubi->vtbl_slots = UBI_MAX_VOLUMES;
 790
 791        ubi->vtbl_size = ubi->vtbl_slots * UBI_VTBL_RECORD_SIZE;
 792        ubi->vtbl_size = ALIGN(ubi->vtbl_size, ubi->min_io_size);
 793
 794        av = ubi_find_av(ai, UBI_LAYOUT_VOLUME_ID);
 795        if (!av) {
 796                /*
 797                 * No logical eraseblocks belonging to the layout volume were
 798                 * found. This could mean that the flash is just empty. In
 799                 * this case we create empty layout volume.
 800                 *
 801                 * But if flash is not empty this must be a corruption or the
 802                 * MTD device just contains garbage.
 803                 */
 804                if (ai->is_empty) {
 805                        ubi->vtbl = create_empty_lvol(ubi, ai);
 806                        if (IS_ERR(ubi->vtbl))
 807                                return PTR_ERR(ubi->vtbl);
 808                } else {
 809                        ubi_err(ubi, "the layout volume was not found");
 810                        return -EINVAL;
 811                }
 812        } else {
 813                if (av->leb_count > UBI_LAYOUT_VOLUME_EBS) {
 814                        /* This must not happen with proper UBI images */
 815                        ubi_err(ubi, "too many LEBs (%d) in layout volume",
 816                                av->leb_count);
 817                        return -EINVAL;
 818                }
 819
 820                ubi->vtbl = process_lvol(ubi, ai, av);
 821                if (IS_ERR(ubi->vtbl))
 822                        return PTR_ERR(ubi->vtbl);
 823        }
 824
 825        ubi->avail_pebs = ubi->good_peb_count - ubi->corr_peb_count;
 826
 827        /*
 828         * The layout volume is OK, initialize the corresponding in-RAM data
 829         * structures.
 830         */
 831        err = init_volumes(ubi, ai, ubi->vtbl);
 832        if (err)
 833                goto out_free;
 834
 835        /*
 836         * Make sure that the attaching information is consistent to the
 837         * information stored in the volume table.
 838         */
 839        err = check_attaching_info(ubi, ai);
 840        if (err)
 841                goto out_free;
 842
 843        return 0;
 844
 845out_free:
 846        vfree(ubi->vtbl);
 847        for (i = 0; i < ubi->vtbl_slots + UBI_INT_VOL_COUNT; i++) {
 848                kfree(ubi->volumes[i]);
 849                ubi->volumes[i] = NULL;
 850        }
 851        return err;
 852}
 853
 854/**
 855 * self_vtbl_check - check volume table.
 856 * @ubi: UBI device description object
 857 */
 858static void self_vtbl_check(const struct ubi_device *ubi)
 859{
 860        if (!ubi_dbg_chk_gen(ubi))
 861                return;
 862
 863        if (vtbl_check(ubi, ubi->vtbl)) {
 864                ubi_err(ubi, "self-check failed");
 865                BUG();
 866        }
 867}
 868