Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
vtbl.c
Go to the documentation of this file.
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 
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 {
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 
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,
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 
172 static int vtbl_check(const struct ubi_device *ubi,
173  const struct ubi_vtbl_record *vtbl)
174 {
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 
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,
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 \"%s\"",
274  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 
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  dbg_gen("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;
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 
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 
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 
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 ?
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 and %d)",
566  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 
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);
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 
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 
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",
723  return -EINVAL;
724  }
725 
726  if (ai->highest_vol_id >= ubi->vtbl_slots + UBI_INT_VOL_COUNT &&
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 
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  */
789  if (ubi->vtbl_slots > UBI_MAX_VOLUMES)
791 
793  ubi->vtbl_size = ALIGN(ubi->vtbl_size, ubi->min_io_size);
794 
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 
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 }