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