]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/mtd/ubi/fastmap.c
Merge branch 'master' of http://git.denx.de/u-boot-samsung
[karo-tx-uboot.git] / drivers / mtd / ubi / fastmap.c
1 /*
2  * Copyright (c) 2012 Linutronix GmbH
3  * Author: Richard Weinberger <richard@nod.at>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  *
7  */
8
9 #ifndef __UBOOT__
10 #include <linux/crc32.h>
11 #else
12 #include <div64.h>
13 #include <malloc.h>
14 #include <ubi_uboot.h>
15 #endif
16
17 #include <linux/compat.h>
18 #include <linux/math64.h>
19 #include "ubi.h"
20
21 /**
22  * ubi_calc_fm_size - calculates the fastmap size in bytes for an UBI device.
23  * @ubi: UBI device description object
24  */
25 size_t ubi_calc_fm_size(struct ubi_device *ubi)
26 {
27         size_t size;
28
29         size = sizeof(struct ubi_fm_hdr) + \
30                 sizeof(struct ubi_fm_scan_pool) + \
31                 sizeof(struct ubi_fm_scan_pool) + \
32                 (ubi->peb_count * sizeof(struct ubi_fm_ec)) + \
33                 (sizeof(struct ubi_fm_eba) + \
34                 (ubi->peb_count * sizeof(__be32))) + \
35                 sizeof(struct ubi_fm_volhdr) * UBI_MAX_VOLUMES;
36         return roundup(size, ubi->leb_size);
37 }
38
39
40 /**
41  * new_fm_vhdr - allocate a new volume header for fastmap usage.
42  * @ubi: UBI device description object
43  * @vol_id: the VID of the new header
44  *
45  * Returns a new struct ubi_vid_hdr on success.
46  * NULL indicates out of memory.
47  */
48 static struct ubi_vid_hdr *new_fm_vhdr(struct ubi_device *ubi, int vol_id)
49 {
50         struct ubi_vid_hdr *new;
51
52         new = ubi_zalloc_vid_hdr(ubi, GFP_KERNEL);
53         if (!new)
54                 goto out;
55
56         new->vol_type = UBI_VID_DYNAMIC;
57         new->vol_id = cpu_to_be32(vol_id);
58
59         /* UBI implementations without fastmap support have to delete the
60          * fastmap.
61          */
62         new->compat = UBI_COMPAT_DELETE;
63
64 out:
65         return new;
66 }
67
68 /**
69  * add_aeb - create and add a attach erase block to a given list.
70  * @ai: UBI attach info object
71  * @list: the target list
72  * @pnum: PEB number of the new attach erase block
73  * @ec: erease counter of the new LEB
74  * @scrub: scrub this PEB after attaching
75  *
76  * Returns 0 on success, < 0 indicates an internal error.
77  */
78 static int add_aeb(struct ubi_attach_info *ai, struct list_head *list,
79                    int pnum, int ec, int scrub)
80 {
81         struct ubi_ainf_peb *aeb;
82
83         aeb = kmem_cache_alloc(ai->aeb_slab_cache, GFP_KERNEL);
84         if (!aeb)
85                 return -ENOMEM;
86
87         aeb->pnum = pnum;
88         aeb->ec = ec;
89         aeb->lnum = -1;
90         aeb->scrub = scrub;
91         aeb->copy_flag = aeb->sqnum = 0;
92
93         ai->ec_sum += aeb->ec;
94         ai->ec_count++;
95
96         if (ai->max_ec < aeb->ec)
97                 ai->max_ec = aeb->ec;
98
99         if (ai->min_ec > aeb->ec)
100                 ai->min_ec = aeb->ec;
101
102         list_add_tail(&aeb->u.list, list);
103
104         return 0;
105 }
106
107 /**
108  * add_vol - create and add a new volume to ubi_attach_info.
109  * @ai: ubi_attach_info object
110  * @vol_id: VID of the new volume
111  * @used_ebs: number of used EBS
112  * @data_pad: data padding value of the new volume
113  * @vol_type: volume type
114  * @last_eb_bytes: number of bytes in the last LEB
115  *
116  * Returns the new struct ubi_ainf_volume on success.
117  * NULL indicates an error.
118  */
119 static struct ubi_ainf_volume *add_vol(struct ubi_attach_info *ai, int vol_id,
120                                        int used_ebs, int data_pad, u8 vol_type,
121                                        int last_eb_bytes)
122 {
123         struct ubi_ainf_volume *av;
124         struct rb_node **p = &ai->volumes.rb_node, *parent = NULL;
125
126         while (*p) {
127                 parent = *p;
128                 av = rb_entry(parent, struct ubi_ainf_volume, rb);
129
130                 if (vol_id > av->vol_id)
131                         p = &(*p)->rb_left;
132                 else if (vol_id > av->vol_id)
133                         p = &(*p)->rb_right;
134         }
135
136         av = kmalloc(sizeof(struct ubi_ainf_volume), GFP_KERNEL);
137         if (!av)
138                 goto out;
139
140         av->highest_lnum = av->leb_count = 0;
141         av->vol_id = vol_id;
142         av->used_ebs = used_ebs;
143         av->data_pad = data_pad;
144         av->last_data_size = last_eb_bytes;
145         av->compat = 0;
146         av->vol_type = vol_type;
147         av->root = RB_ROOT;
148
149         dbg_bld("found volume (ID %i)", vol_id);
150
151         rb_link_node(&av->rb, parent, p);
152         rb_insert_color(&av->rb, &ai->volumes);
153
154 out:
155         return av;
156 }
157
158 /**
159  * assign_aeb_to_av - assigns a SEB to a given ainf_volume and removes it
160  * from it's original list.
161  * @ai: ubi_attach_info object
162  * @aeb: the to be assigned SEB
163  * @av: target scan volume
164  */
165 static void assign_aeb_to_av(struct ubi_attach_info *ai,
166                              struct ubi_ainf_peb *aeb,
167                              struct ubi_ainf_volume *av)
168 {
169         struct ubi_ainf_peb *tmp_aeb;
170         struct rb_node **p = &ai->volumes.rb_node, *parent = NULL;
171
172         p = &av->root.rb_node;
173         while (*p) {
174                 parent = *p;
175
176                 tmp_aeb = rb_entry(parent, struct ubi_ainf_peb, u.rb);
177                 if (aeb->lnum != tmp_aeb->lnum) {
178                         if (aeb->lnum < tmp_aeb->lnum)
179                                 p = &(*p)->rb_left;
180                         else
181                                 p = &(*p)->rb_right;
182
183                         continue;
184                 } else
185                         break;
186         }
187
188         list_del(&aeb->u.list);
189         av->leb_count++;
190
191         rb_link_node(&aeb->u.rb, parent, p);
192         rb_insert_color(&aeb->u.rb, &av->root);
193 }
194
195 /**
196  * update_vol - inserts or updates a LEB which was found a pool.
197  * @ubi: the UBI device object
198  * @ai: attach info object
199  * @av: the volume this LEB belongs to
200  * @new_vh: the volume header derived from new_aeb
201  * @new_aeb: the AEB to be examined
202  *
203  * Returns 0 on success, < 0 indicates an internal error.
204  */
205 static int update_vol(struct ubi_device *ubi, struct ubi_attach_info *ai,
206                       struct ubi_ainf_volume *av, struct ubi_vid_hdr *new_vh,
207                       struct ubi_ainf_peb *new_aeb)
208 {
209         struct rb_node **p = &av->root.rb_node, *parent = NULL;
210         struct ubi_ainf_peb *aeb, *victim;
211         int cmp_res;
212
213         while (*p) {
214                 parent = *p;
215                 aeb = rb_entry(parent, struct ubi_ainf_peb, u.rb);
216
217                 if (be32_to_cpu(new_vh->lnum) != aeb->lnum) {
218                         if (be32_to_cpu(new_vh->lnum) < aeb->lnum)
219                                 p = &(*p)->rb_left;
220                         else
221                                 p = &(*p)->rb_right;
222
223                         continue;
224                 }
225
226                 /* This case can happen if the fastmap gets written
227                  * because of a volume change (creation, deletion, ..).
228                  * Then a PEB can be within the persistent EBA and the pool.
229                  */
230                 if (aeb->pnum == new_aeb->pnum) {
231                         ubi_assert(aeb->lnum == new_aeb->lnum);
232                         kmem_cache_free(ai->aeb_slab_cache, new_aeb);
233
234                         return 0;
235                 }
236
237                 cmp_res = ubi_compare_lebs(ubi, aeb, new_aeb->pnum, new_vh);
238                 if (cmp_res < 0)
239                         return cmp_res;
240
241                 /* new_aeb is newer */
242                 if (cmp_res & 1) {
243                         victim = kmem_cache_alloc(ai->aeb_slab_cache,
244                                 GFP_KERNEL);
245                         if (!victim)
246                                 return -ENOMEM;
247
248                         victim->ec = aeb->ec;
249                         victim->pnum = aeb->pnum;
250                         list_add_tail(&victim->u.list, &ai->erase);
251
252                         if (av->highest_lnum == be32_to_cpu(new_vh->lnum))
253                                 av->last_data_size = \
254                                         be32_to_cpu(new_vh->data_size);
255
256                         dbg_bld("vol %i: AEB %i's PEB %i is the newer",
257                                 av->vol_id, aeb->lnum, new_aeb->pnum);
258
259                         aeb->ec = new_aeb->ec;
260                         aeb->pnum = new_aeb->pnum;
261                         aeb->copy_flag = new_vh->copy_flag;
262                         aeb->scrub = new_aeb->scrub;
263                         kmem_cache_free(ai->aeb_slab_cache, new_aeb);
264
265                 /* new_aeb is older */
266                 } else {
267                         dbg_bld("vol %i: AEB %i's PEB %i is old, dropping it",
268                                 av->vol_id, aeb->lnum, new_aeb->pnum);
269                         list_add_tail(&new_aeb->u.list, &ai->erase);
270                 }
271
272                 return 0;
273         }
274         /* This LEB is new, let's add it to the volume */
275
276         if (av->highest_lnum <= be32_to_cpu(new_vh->lnum)) {
277                 av->highest_lnum = be32_to_cpu(new_vh->lnum);
278                 av->last_data_size = be32_to_cpu(new_vh->data_size);
279         }
280
281         if (av->vol_type == UBI_STATIC_VOLUME)
282                 av->used_ebs = be32_to_cpu(new_vh->used_ebs);
283
284         av->leb_count++;
285
286         rb_link_node(&new_aeb->u.rb, parent, p);
287         rb_insert_color(&new_aeb->u.rb, &av->root);
288
289         return 0;
290 }
291
292 /**
293  * process_pool_aeb - we found a non-empty PEB in a pool.
294  * @ubi: UBI device object
295  * @ai: attach info object
296  * @new_vh: the volume header derived from new_aeb
297  * @new_aeb: the AEB to be examined
298  *
299  * Returns 0 on success, < 0 indicates an internal error.
300  */
301 static int process_pool_aeb(struct ubi_device *ubi, struct ubi_attach_info *ai,
302                             struct ubi_vid_hdr *new_vh,
303                             struct ubi_ainf_peb *new_aeb)
304 {
305         struct ubi_ainf_volume *av, *tmp_av = NULL;
306         struct rb_node **p = &ai->volumes.rb_node, *parent = NULL;
307         int found = 0;
308
309         if (be32_to_cpu(new_vh->vol_id) == UBI_FM_SB_VOLUME_ID ||
310                 be32_to_cpu(new_vh->vol_id) == UBI_FM_DATA_VOLUME_ID) {
311                 kmem_cache_free(ai->aeb_slab_cache, new_aeb);
312
313                 return 0;
314         }
315
316         /* Find the volume this SEB belongs to */
317         while (*p) {
318                 parent = *p;
319                 tmp_av = rb_entry(parent, struct ubi_ainf_volume, rb);
320
321                 if (be32_to_cpu(new_vh->vol_id) > tmp_av->vol_id)
322                         p = &(*p)->rb_left;
323                 else if (be32_to_cpu(new_vh->vol_id) < tmp_av->vol_id)
324                         p = &(*p)->rb_right;
325                 else {
326                         found = 1;
327                         break;
328                 }
329         }
330
331         if (found)
332                 av = tmp_av;
333         else {
334                 ubi_err("orphaned volume in fastmap pool!");
335                 return UBI_BAD_FASTMAP;
336         }
337
338         ubi_assert(be32_to_cpu(new_vh->vol_id) == av->vol_id);
339
340         return update_vol(ubi, ai, av, new_vh, new_aeb);
341 }
342
343 /**
344  * unmap_peb - unmap a PEB.
345  * If fastmap detects a free PEB in the pool it has to check whether
346  * this PEB has been unmapped after writing the fastmap.
347  *
348  * @ai: UBI attach info object
349  * @pnum: The PEB to be unmapped
350  */
351 static void unmap_peb(struct ubi_attach_info *ai, int pnum)
352 {
353         struct ubi_ainf_volume *av;
354         struct rb_node *node, *node2;
355         struct ubi_ainf_peb *aeb;
356
357         for (node = rb_first(&ai->volumes); node; node = rb_next(node)) {
358                 av = rb_entry(node, struct ubi_ainf_volume, rb);
359
360                 for (node2 = rb_first(&av->root); node2;
361                      node2 = rb_next(node2)) {
362                         aeb = rb_entry(node2, struct ubi_ainf_peb, u.rb);
363                         if (aeb->pnum == pnum) {
364                                 rb_erase(&aeb->u.rb, &av->root);
365                                 kmem_cache_free(ai->aeb_slab_cache, aeb);
366                                 return;
367                         }
368                 }
369         }
370 }
371
372 /**
373  * scan_pool - scans a pool for changed (no longer empty PEBs).
374  * @ubi: UBI device object
375  * @ai: attach info object
376  * @pebs: an array of all PEB numbers in the to be scanned pool
377  * @pool_size: size of the pool (number of entries in @pebs)
378  * @max_sqnum: pointer to the maximal sequence number
379  * @eba_orphans: list of PEBs which need to be scanned
380  * @free: list of PEBs which are most likely free (and go into @ai->free)
381  *
382  * Returns 0 on success, if the pool is unusable UBI_BAD_FASTMAP is returned.
383  * < 0 indicates an internal error.
384  */
385 #ifndef __UBOOT__
386 static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai,
387                      int *pebs, int pool_size, unsigned long long *max_sqnum,
388                      struct list_head *eba_orphans, struct list_head *freef)
389 #else
390 static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai,
391                      __be32 *pebs, int pool_size, unsigned long long *max_sqnum,
392                      struct list_head *eba_orphans, struct list_head *freef)
393 #endif
394 {
395         struct ubi_vid_hdr *vh;
396         struct ubi_ec_hdr *ech;
397         struct ubi_ainf_peb *new_aeb, *tmp_aeb;
398         int i, pnum, err, found_orphan, ret = 0;
399
400         ech = kzalloc(ubi->ec_hdr_alsize, GFP_KERNEL);
401         if (!ech)
402                 return -ENOMEM;
403
404         vh = ubi_zalloc_vid_hdr(ubi, GFP_KERNEL);
405         if (!vh) {
406                 kfree(ech);
407                 return -ENOMEM;
408         }
409
410         dbg_bld("scanning fastmap pool: size = %i", pool_size);
411
412         /*
413          * Now scan all PEBs in the pool to find changes which have been made
414          * after the creation of the fastmap
415          */
416         for (i = 0; i < pool_size; i++) {
417                 int scrub = 0;
418                 int image_seq;
419
420                 pnum = be32_to_cpu(pebs[i]);
421
422                 if (ubi_io_is_bad(ubi, pnum)) {
423                         ubi_err("bad PEB in fastmap pool!");
424                         ret = UBI_BAD_FASTMAP;
425                         goto out;
426                 }
427
428                 err = ubi_io_read_ec_hdr(ubi, pnum, ech, 0);
429                 if (err && err != UBI_IO_BITFLIPS) {
430                         ubi_err("unable to read EC header! PEB:%i err:%i",
431                                 pnum, err);
432                         ret = err > 0 ? UBI_BAD_FASTMAP : err;
433                         goto out;
434                 } else if (ret == UBI_IO_BITFLIPS)
435                         scrub = 1;
436
437                 /*
438                  * Older UBI implementations have image_seq set to zero, so
439                  * we shouldn't fail if image_seq == 0.
440                  */
441                 image_seq = be32_to_cpu(ech->image_seq);
442
443                 if (image_seq && (image_seq != ubi->image_seq)) {
444                         ubi_err("bad image seq: 0x%x, expected: 0x%x",
445                                 be32_to_cpu(ech->image_seq), ubi->image_seq);
446                         ret = UBI_BAD_FASTMAP;
447                         goto out;
448                 }
449
450                 err = ubi_io_read_vid_hdr(ubi, pnum, vh, 0);
451                 if (err == UBI_IO_FF || err == UBI_IO_FF_BITFLIPS) {
452                         unsigned long long ec = be64_to_cpu(ech->ec);
453                         unmap_peb(ai, pnum);
454                         dbg_bld("Adding PEB to free: %i", pnum);
455                         if (err == UBI_IO_FF_BITFLIPS)
456                                 add_aeb(ai, freef, pnum, ec, 1);
457                         else
458                                 add_aeb(ai, freef, pnum, ec, 0);
459                         continue;
460                 } else if (err == 0 || err == UBI_IO_BITFLIPS) {
461                         dbg_bld("Found non empty PEB:%i in pool", pnum);
462
463                         if (err == UBI_IO_BITFLIPS)
464                                 scrub = 1;
465
466                         found_orphan = 0;
467                         list_for_each_entry(tmp_aeb, eba_orphans, u.list) {
468                                 if (tmp_aeb->pnum == pnum) {
469                                         found_orphan = 1;
470                                         break;
471                                 }
472                         }
473                         if (found_orphan) {
474                                 list_del(&tmp_aeb->u.list);
475                                 kmem_cache_free(ai->aeb_slab_cache, tmp_aeb);
476                         }
477
478                         new_aeb = kmem_cache_alloc(ai->aeb_slab_cache,
479                                                    GFP_KERNEL);
480                         if (!new_aeb) {
481                                 ret = -ENOMEM;
482                                 goto out;
483                         }
484
485                         new_aeb->ec = be64_to_cpu(ech->ec);
486                         new_aeb->pnum = pnum;
487                         new_aeb->lnum = be32_to_cpu(vh->lnum);
488                         new_aeb->sqnum = be64_to_cpu(vh->sqnum);
489                         new_aeb->copy_flag = vh->copy_flag;
490                         new_aeb->scrub = scrub;
491
492                         if (*max_sqnum < new_aeb->sqnum)
493                                 *max_sqnum = new_aeb->sqnum;
494
495                         err = process_pool_aeb(ubi, ai, vh, new_aeb);
496                         if (err) {
497                                 ret = err > 0 ? UBI_BAD_FASTMAP : err;
498                                 goto out;
499                         }
500                 } else {
501                         /* We are paranoid and fall back to scanning mode */
502                         ubi_err("fastmap pool PEBs contains damaged PEBs!");
503                         ret = err > 0 ? UBI_BAD_FASTMAP : err;
504                         goto out;
505                 }
506
507         }
508
509 out:
510         ubi_free_vid_hdr(ubi, vh);
511         kfree(ech);
512         return ret;
513 }
514
515 /**
516  * count_fastmap_pebs - Counts the PEBs found by fastmap.
517  * @ai: The UBI attach info object
518  */
519 static int count_fastmap_pebs(struct ubi_attach_info *ai)
520 {
521         struct ubi_ainf_peb *aeb;
522         struct ubi_ainf_volume *av;
523         struct rb_node *rb1, *rb2;
524         int n = 0;
525
526         list_for_each_entry(aeb, &ai->erase, u.list)
527                 n++;
528
529         list_for_each_entry(aeb, &ai->free, u.list)
530                 n++;
531
532          ubi_rb_for_each_entry(rb1, av, &ai->volumes, rb)
533                 ubi_rb_for_each_entry(rb2, aeb, &av->root, u.rb)
534                         n++;
535
536         return n;
537 }
538
539 /**
540  * ubi_attach_fastmap - creates ubi_attach_info from a fastmap.
541  * @ubi: UBI device object
542  * @ai: UBI attach info object
543  * @fm: the fastmap to be attached
544  *
545  * Returns 0 on success, UBI_BAD_FASTMAP if the found fastmap was unusable.
546  * < 0 indicates an internal error.
547  */
548 static int ubi_attach_fastmap(struct ubi_device *ubi,
549                               struct ubi_attach_info *ai,
550                               struct ubi_fastmap_layout *fm)
551 {
552         struct list_head used, eba_orphans, freef;
553         struct ubi_ainf_volume *av;
554         struct ubi_ainf_peb *aeb, *tmp_aeb, *_tmp_aeb;
555         struct ubi_ec_hdr *ech;
556         struct ubi_fm_sb *fmsb;
557         struct ubi_fm_hdr *fmhdr;
558         struct ubi_fm_scan_pool *fmpl1, *fmpl2;
559         struct ubi_fm_ec *fmec;
560         struct ubi_fm_volhdr *fmvhdr;
561         struct ubi_fm_eba *fm_eba;
562         int ret, i, j, pool_size, wl_pool_size;
563         size_t fm_pos = 0, fm_size = ubi->fm_size;
564         unsigned long long max_sqnum = 0;
565         void *fm_raw = ubi->fm_buf;
566
567         INIT_LIST_HEAD(&used);
568         INIT_LIST_HEAD(&freef);
569         INIT_LIST_HEAD(&eba_orphans);
570         INIT_LIST_HEAD(&ai->corr);
571         INIT_LIST_HEAD(&ai->free);
572         INIT_LIST_HEAD(&ai->erase);
573         INIT_LIST_HEAD(&ai->alien);
574         ai->volumes = RB_ROOT;
575         ai->min_ec = UBI_MAX_ERASECOUNTER;
576
577         ai->aeb_slab_cache = kmem_cache_create("ubi_ainf_peb_slab",
578                                                sizeof(struct ubi_ainf_peb),
579                                                0, 0, NULL);
580         if (!ai->aeb_slab_cache) {
581                 ret = -ENOMEM;
582                 goto fail;
583         }
584
585         fmsb = (struct ubi_fm_sb *)(fm_raw);
586         ai->max_sqnum = fmsb->sqnum;
587         fm_pos += sizeof(struct ubi_fm_sb);
588         if (fm_pos >= fm_size)
589                 goto fail_bad;
590
591         fmhdr = (struct ubi_fm_hdr *)(fm_raw + fm_pos);
592         fm_pos += sizeof(*fmhdr);
593         if (fm_pos >= fm_size)
594                 goto fail_bad;
595
596         if (be32_to_cpu(fmhdr->magic) != UBI_FM_HDR_MAGIC) {
597                 ubi_err("bad fastmap header magic: 0x%x, expected: 0x%x",
598                         be32_to_cpu(fmhdr->magic), UBI_FM_HDR_MAGIC);
599                 goto fail_bad;
600         }
601
602         fmpl1 = (struct ubi_fm_scan_pool *)(fm_raw + fm_pos);
603         fm_pos += sizeof(*fmpl1);
604         if (fm_pos >= fm_size)
605                 goto fail_bad;
606         if (be32_to_cpu(fmpl1->magic) != UBI_FM_POOL_MAGIC) {
607                 ubi_err("bad fastmap pool magic: 0x%x, expected: 0x%x",
608                         be32_to_cpu(fmpl1->magic), UBI_FM_POOL_MAGIC);
609                 goto fail_bad;
610         }
611
612         fmpl2 = (struct ubi_fm_scan_pool *)(fm_raw + fm_pos);
613         fm_pos += sizeof(*fmpl2);
614         if (fm_pos >= fm_size)
615                 goto fail_bad;
616         if (be32_to_cpu(fmpl2->magic) != UBI_FM_POOL_MAGIC) {
617                 ubi_err("bad fastmap pool magic: 0x%x, expected: 0x%x",
618                         be32_to_cpu(fmpl2->magic), UBI_FM_POOL_MAGIC);
619                 goto fail_bad;
620         }
621
622         pool_size = be16_to_cpu(fmpl1->size);
623         wl_pool_size = be16_to_cpu(fmpl2->size);
624         fm->max_pool_size = be16_to_cpu(fmpl1->max_size);
625         fm->max_wl_pool_size = be16_to_cpu(fmpl2->max_size);
626
627         if (pool_size > UBI_FM_MAX_POOL_SIZE || pool_size < 0) {
628                 ubi_err("bad pool size: %i", pool_size);
629                 goto fail_bad;
630         }
631
632         if (wl_pool_size > UBI_FM_MAX_POOL_SIZE || wl_pool_size < 0) {
633                 ubi_err("bad WL pool size: %i", wl_pool_size);
634                 goto fail_bad;
635         }
636
637
638         if (fm->max_pool_size > UBI_FM_MAX_POOL_SIZE ||
639             fm->max_pool_size < 0) {
640                 ubi_err("bad maximal pool size: %i", fm->max_pool_size);
641                 goto fail_bad;
642         }
643
644         if (fm->max_wl_pool_size > UBI_FM_MAX_POOL_SIZE ||
645             fm->max_wl_pool_size < 0) {
646                 ubi_err("bad maximal WL pool size: %i", fm->max_wl_pool_size);
647                 goto fail_bad;
648         }
649
650         /* read EC values from free list */
651         for (i = 0; i < be32_to_cpu(fmhdr->free_peb_count); i++) {
652                 fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
653                 fm_pos += sizeof(*fmec);
654                 if (fm_pos >= fm_size)
655                         goto fail_bad;
656
657                 add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
658                         be32_to_cpu(fmec->ec), 0);
659         }
660
661         /* read EC values from used list */
662         for (i = 0; i < be32_to_cpu(fmhdr->used_peb_count); i++) {
663                 fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
664                 fm_pos += sizeof(*fmec);
665                 if (fm_pos >= fm_size)
666                         goto fail_bad;
667
668                 add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
669                         be32_to_cpu(fmec->ec), 0);
670         }
671
672         /* read EC values from scrub list */
673         for (i = 0; i < be32_to_cpu(fmhdr->scrub_peb_count); i++) {
674                 fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
675                 fm_pos += sizeof(*fmec);
676                 if (fm_pos >= fm_size)
677                         goto fail_bad;
678
679                 add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
680                         be32_to_cpu(fmec->ec), 1);
681         }
682
683         /* read EC values from erase list */
684         for (i = 0; i < be32_to_cpu(fmhdr->erase_peb_count); i++) {
685                 fmec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
686                 fm_pos += sizeof(*fmec);
687                 if (fm_pos >= fm_size)
688                         goto fail_bad;
689
690                 add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
691                         be32_to_cpu(fmec->ec), 1);
692         }
693
694         ai->mean_ec = div_u64(ai->ec_sum, ai->ec_count);
695         ai->bad_peb_count = be32_to_cpu(fmhdr->bad_peb_count);
696
697         /* Iterate over all volumes and read their EBA table */
698         for (i = 0; i < be32_to_cpu(fmhdr->vol_count); i++) {
699                 fmvhdr = (struct ubi_fm_volhdr *)(fm_raw + fm_pos);
700                 fm_pos += sizeof(*fmvhdr);
701                 if (fm_pos >= fm_size)
702                         goto fail_bad;
703
704                 if (be32_to_cpu(fmvhdr->magic) != UBI_FM_VHDR_MAGIC) {
705                         ubi_err("bad fastmap vol header magic: 0x%x, " \
706                                 "expected: 0x%x",
707                                 be32_to_cpu(fmvhdr->magic), UBI_FM_VHDR_MAGIC);
708                         goto fail_bad;
709                 }
710
711                 av = add_vol(ai, be32_to_cpu(fmvhdr->vol_id),
712                              be32_to_cpu(fmvhdr->used_ebs),
713                              be32_to_cpu(fmvhdr->data_pad),
714                              fmvhdr->vol_type,
715                              be32_to_cpu(fmvhdr->last_eb_bytes));
716
717                 if (!av)
718                         goto fail_bad;
719
720                 ai->vols_found++;
721                 if (ai->highest_vol_id < be32_to_cpu(fmvhdr->vol_id))
722                         ai->highest_vol_id = be32_to_cpu(fmvhdr->vol_id);
723
724                 fm_eba = (struct ubi_fm_eba *)(fm_raw + fm_pos);
725                 fm_pos += sizeof(*fm_eba);
726                 fm_pos += (sizeof(__be32) * be32_to_cpu(fm_eba->reserved_pebs));
727                 if (fm_pos >= fm_size)
728                         goto fail_bad;
729
730                 if (be32_to_cpu(fm_eba->magic) != UBI_FM_EBA_MAGIC) {
731                         ubi_err("bad fastmap EBA header magic: 0x%x, " \
732                                 "expected: 0x%x",
733                                 be32_to_cpu(fm_eba->magic), UBI_FM_EBA_MAGIC);
734                         goto fail_bad;
735                 }
736
737                 for (j = 0; j < be32_to_cpu(fm_eba->reserved_pebs); j++) {
738                         int pnum = be32_to_cpu(fm_eba->pnum[j]);
739
740                         if ((int)be32_to_cpu(fm_eba->pnum[j]) < 0)
741                                 continue;
742
743                         aeb = NULL;
744                         list_for_each_entry(tmp_aeb, &used, u.list) {
745                                 if (tmp_aeb->pnum == pnum) {
746                                         aeb = tmp_aeb;
747                                         break;
748                                 }
749                         }
750
751                         /* This can happen if a PEB is already in an EBA known
752                          * by this fastmap but the PEB itself is not in the used
753                          * list.
754                          * In this case the PEB can be within the fastmap pool
755                          * or while writing the fastmap it was in the protection
756                          * queue.
757                          */
758                         if (!aeb) {
759                                 aeb = kmem_cache_alloc(ai->aeb_slab_cache,
760                                                        GFP_KERNEL);
761                                 if (!aeb) {
762                                         ret = -ENOMEM;
763
764                                         goto fail;
765                                 }
766
767                                 aeb->lnum = j;
768                                 aeb->pnum = be32_to_cpu(fm_eba->pnum[j]);
769                                 aeb->ec = -1;
770                                 aeb->scrub = aeb->copy_flag = aeb->sqnum = 0;
771                                 list_add_tail(&aeb->u.list, &eba_orphans);
772                                 continue;
773                         }
774
775                         aeb->lnum = j;
776
777                         if (av->highest_lnum <= aeb->lnum)
778                                 av->highest_lnum = aeb->lnum;
779
780                         assign_aeb_to_av(ai, aeb, av);
781
782                         dbg_bld("inserting PEB:%i (LEB %i) to vol %i",
783                                 aeb->pnum, aeb->lnum, av->vol_id);
784                 }
785
786                 ech = kzalloc(ubi->ec_hdr_alsize, GFP_KERNEL);
787                 if (!ech) {
788                         ret = -ENOMEM;
789                         goto fail;
790                 }
791
792                 list_for_each_entry_safe(tmp_aeb, _tmp_aeb, &eba_orphans,
793                                          u.list) {
794                         int err;
795
796                         if (ubi_io_is_bad(ubi, tmp_aeb->pnum)) {
797                                 ubi_err("bad PEB in fastmap EBA orphan list");
798                                 ret = UBI_BAD_FASTMAP;
799                                 kfree(ech);
800                                 goto fail;
801                         }
802
803                         err = ubi_io_read_ec_hdr(ubi, tmp_aeb->pnum, ech, 0);
804                         if (err && err != UBI_IO_BITFLIPS) {
805                                 ubi_err("unable to read EC header! PEB:%i " \
806                                         "err:%i", tmp_aeb->pnum, err);
807                                 ret = err > 0 ? UBI_BAD_FASTMAP : err;
808                                 kfree(ech);
809
810                                 goto fail;
811                         } else if (err == UBI_IO_BITFLIPS)
812                                 tmp_aeb->scrub = 1;
813
814                         tmp_aeb->ec = be64_to_cpu(ech->ec);
815                         assign_aeb_to_av(ai, tmp_aeb, av);
816                 }
817
818                 kfree(ech);
819         }
820
821         ret = scan_pool(ubi, ai, fmpl1->pebs, pool_size, &max_sqnum,
822                         &eba_orphans, &freef);
823         if (ret)
824                 goto fail;
825
826         ret = scan_pool(ubi, ai, fmpl2->pebs, wl_pool_size, &max_sqnum,
827                         &eba_orphans, &freef);
828         if (ret)
829                 goto fail;
830
831         if (max_sqnum > ai->max_sqnum)
832                 ai->max_sqnum = max_sqnum;
833
834         list_for_each_entry_safe(tmp_aeb, _tmp_aeb, &freef, u.list)
835                 list_move_tail(&tmp_aeb->u.list, &ai->free);
836
837         ubi_assert(list_empty(&used));
838         ubi_assert(list_empty(&eba_orphans));
839         ubi_assert(list_empty(&freef));
840
841         /*
842          * If fastmap is leaking PEBs (must not happen), raise a
843          * fat warning and fall back to scanning mode.
844          * We do this here because in ubi_wl_init() it's too late
845          * and we cannot fall back to scanning.
846          */
847 #ifndef __UBOOT__
848         if (WARN_ON(count_fastmap_pebs(ai) != ubi->peb_count -
849                     ai->bad_peb_count - fm->used_blocks))
850                 goto fail_bad;
851 #else
852         if (count_fastmap_pebs(ai) != ubi->peb_count -
853                     ai->bad_peb_count - fm->used_blocks) {
854                 WARN_ON(1);
855                 goto fail_bad;
856         }
857 #endif
858
859         return 0;
860
861 fail_bad:
862         ret = UBI_BAD_FASTMAP;
863 fail:
864         list_for_each_entry_safe(tmp_aeb, _tmp_aeb, &used, u.list) {
865                 list_del(&tmp_aeb->u.list);
866                 kmem_cache_free(ai->aeb_slab_cache, tmp_aeb);
867         }
868         list_for_each_entry_safe(tmp_aeb, _tmp_aeb, &eba_orphans, u.list) {
869                 list_del(&tmp_aeb->u.list);
870                 kmem_cache_free(ai->aeb_slab_cache, tmp_aeb);
871         }
872         list_for_each_entry_safe(tmp_aeb, _tmp_aeb, &freef, u.list) {
873                 list_del(&tmp_aeb->u.list);
874                 kmem_cache_free(ai->aeb_slab_cache, tmp_aeb);
875         }
876
877         return ret;
878 }
879
880 /**
881  * ubi_scan_fastmap - scan the fastmap.
882  * @ubi: UBI device object
883  * @ai: UBI attach info to be filled
884  * @fm_anchor: The fastmap starts at this PEB
885  *
886  * Returns 0 on success, UBI_NO_FASTMAP if no fastmap was found,
887  * UBI_BAD_FASTMAP if one was found but is not usable.
888  * < 0 indicates an internal error.
889  */
890 int ubi_scan_fastmap(struct ubi_device *ubi, struct ubi_attach_info *ai,
891                      int fm_anchor)
892 {
893         struct ubi_fm_sb *fmsb, *fmsb2;
894         struct ubi_vid_hdr *vh;
895         struct ubi_ec_hdr *ech;
896         struct ubi_fastmap_layout *fm;
897         int i, used_blocks, pnum, ret = 0;
898         size_t fm_size;
899         __be32 crc, tmp_crc;
900         unsigned long long sqnum = 0;
901
902         mutex_lock(&ubi->fm_mutex);
903         memset(ubi->fm_buf, 0, ubi->fm_size);
904
905         fmsb = kmalloc(sizeof(*fmsb), GFP_KERNEL);
906         if (!fmsb) {
907                 ret = -ENOMEM;
908                 goto out;
909         }
910
911         fm = kzalloc(sizeof(*fm), GFP_KERNEL);
912         if (!fm) {
913                 ret = -ENOMEM;
914                 kfree(fmsb);
915                 goto out;
916         }
917
918         ret = ubi_io_read(ubi, fmsb, fm_anchor, ubi->leb_start, sizeof(*fmsb));
919         if (ret && ret != UBI_IO_BITFLIPS)
920                 goto free_fm_sb;
921         else if (ret == UBI_IO_BITFLIPS)
922                 fm->to_be_tortured[0] = 1;
923
924         if (be32_to_cpu(fmsb->magic) != UBI_FM_SB_MAGIC) {
925                 ubi_err("bad super block magic: 0x%x, expected: 0x%x",
926                         be32_to_cpu(fmsb->magic), UBI_FM_SB_MAGIC);
927                 ret = UBI_BAD_FASTMAP;
928                 goto free_fm_sb;
929         }
930
931         if (fmsb->version != UBI_FM_FMT_VERSION) {
932                 ubi_err("bad fastmap version: %i, expected: %i",
933                         fmsb->version, UBI_FM_FMT_VERSION);
934                 ret = UBI_BAD_FASTMAP;
935                 goto free_fm_sb;
936         }
937
938         used_blocks = be32_to_cpu(fmsb->used_blocks);
939         if (used_blocks > UBI_FM_MAX_BLOCKS || used_blocks < 1) {
940                 ubi_err("number of fastmap blocks is invalid: %i", used_blocks);
941                 ret = UBI_BAD_FASTMAP;
942                 goto free_fm_sb;
943         }
944
945         fm_size = ubi->leb_size * used_blocks;
946         if (fm_size != ubi->fm_size) {
947                 ubi_err("bad fastmap size: %zi, expected: %zi", fm_size,
948                         ubi->fm_size);
949                 ret = UBI_BAD_FASTMAP;
950                 goto free_fm_sb;
951         }
952
953         ech = kzalloc(ubi->ec_hdr_alsize, GFP_KERNEL);
954         if (!ech) {
955                 ret = -ENOMEM;
956                 goto free_fm_sb;
957         }
958
959         vh = ubi_zalloc_vid_hdr(ubi, GFP_KERNEL);
960         if (!vh) {
961                 ret = -ENOMEM;
962                 goto free_hdr;
963         }
964
965         for (i = 0; i < used_blocks; i++) {
966                 int image_seq;
967
968                 pnum = be32_to_cpu(fmsb->block_loc[i]);
969
970                 if (ubi_io_is_bad(ubi, pnum)) {
971                         ret = UBI_BAD_FASTMAP;
972                         goto free_hdr;
973                 }
974
975                 ret = ubi_io_read_ec_hdr(ubi, pnum, ech, 0);
976                 if (ret && ret != UBI_IO_BITFLIPS) {
977                         ubi_err("unable to read fastmap block# %i EC (PEB: %i)",
978                                 i, pnum);
979                         if (ret > 0)
980                                 ret = UBI_BAD_FASTMAP;
981                         goto free_hdr;
982                 } else if (ret == UBI_IO_BITFLIPS)
983                         fm->to_be_tortured[i] = 1;
984
985                 image_seq = be32_to_cpu(ech->image_seq);
986                 if (!ubi->image_seq)
987                         ubi->image_seq = image_seq;
988
989                 /*
990                  * Older UBI implementations have image_seq set to zero, so
991                  * we shouldn't fail if image_seq == 0.
992                  */
993                 if (image_seq && (image_seq != ubi->image_seq)) {
994                         ubi_err("wrong image seq:%d instead of %d",
995                                 be32_to_cpu(ech->image_seq), ubi->image_seq);
996                         ret = UBI_BAD_FASTMAP;
997                         goto free_hdr;
998                 }
999
1000                 ret = ubi_io_read_vid_hdr(ubi, pnum, vh, 0);
1001                 if (ret && ret != UBI_IO_BITFLIPS) {
1002                         ubi_err("unable to read fastmap block# %i (PEB: %i)",
1003                                 i, pnum);
1004                         goto free_hdr;
1005                 }
1006
1007                 if (i == 0) {
1008                         if (be32_to_cpu(vh->vol_id) != UBI_FM_SB_VOLUME_ID) {
1009                                 ubi_err("bad fastmap anchor vol_id: 0x%x," \
1010                                         " expected: 0x%x",
1011                                         be32_to_cpu(vh->vol_id),
1012                                         UBI_FM_SB_VOLUME_ID);
1013                                 ret = UBI_BAD_FASTMAP;
1014                                 goto free_hdr;
1015                         }
1016                 } else {
1017                         if (be32_to_cpu(vh->vol_id) != UBI_FM_DATA_VOLUME_ID) {
1018                                 ubi_err("bad fastmap data vol_id: 0x%x," \
1019                                         " expected: 0x%x",
1020                                         be32_to_cpu(vh->vol_id),
1021                                         UBI_FM_DATA_VOLUME_ID);
1022                                 ret = UBI_BAD_FASTMAP;
1023                                 goto free_hdr;
1024                         }
1025                 }
1026
1027                 if (sqnum < be64_to_cpu(vh->sqnum))
1028                         sqnum = be64_to_cpu(vh->sqnum);
1029
1030                 ret = ubi_io_read(ubi, ubi->fm_buf + (ubi->leb_size * i), pnum,
1031                                   ubi->leb_start, ubi->leb_size);
1032                 if (ret && ret != UBI_IO_BITFLIPS) {
1033                         ubi_err("unable to read fastmap block# %i (PEB: %i, " \
1034                                 "err: %i)", i, pnum, ret);
1035                         goto free_hdr;
1036                 }
1037         }
1038
1039         kfree(fmsb);
1040         fmsb = NULL;
1041
1042         fmsb2 = (struct ubi_fm_sb *)(ubi->fm_buf);
1043         tmp_crc = be32_to_cpu(fmsb2->data_crc);
1044         fmsb2->data_crc = 0;
1045         crc = crc32(UBI_CRC32_INIT, ubi->fm_buf, fm_size);
1046         if (crc != tmp_crc) {
1047                 ubi_err("fastmap data CRC is invalid");
1048                 ubi_err("CRC should be: 0x%x, calc: 0x%x", tmp_crc, crc);
1049                 ret = UBI_BAD_FASTMAP;
1050                 goto free_hdr;
1051         }
1052
1053         fmsb2->sqnum = sqnum;
1054
1055         fm->used_blocks = used_blocks;
1056
1057         ret = ubi_attach_fastmap(ubi, ai, fm);
1058         if (ret) {
1059                 if (ret > 0)
1060                         ret = UBI_BAD_FASTMAP;
1061                 goto free_hdr;
1062         }
1063
1064         for (i = 0; i < used_blocks; i++) {
1065                 struct ubi_wl_entry *e;
1066
1067                 e = kmem_cache_alloc(ubi_wl_entry_slab, GFP_KERNEL);
1068                 if (!e) {
1069                         while (i--)
1070                                 kfree(fm->e[i]);
1071
1072                         ret = -ENOMEM;
1073                         goto free_hdr;
1074                 }
1075
1076                 e->pnum = be32_to_cpu(fmsb2->block_loc[i]);
1077                 e->ec = be32_to_cpu(fmsb2->block_ec[i]);
1078                 fm->e[i] = e;
1079         }
1080
1081         ubi->fm = fm;
1082         ubi->fm_pool.max_size = ubi->fm->max_pool_size;
1083         ubi->fm_wl_pool.max_size = ubi->fm->max_wl_pool_size;
1084         ubi_msg("attached by fastmap");
1085         ubi_msg("fastmap pool size: %d", ubi->fm_pool.max_size);
1086         ubi_msg("fastmap WL pool size: %d", ubi->fm_wl_pool.max_size);
1087         ubi->fm_disabled = 0;
1088
1089         ubi_free_vid_hdr(ubi, vh);
1090         kfree(ech);
1091 out:
1092         mutex_unlock(&ubi->fm_mutex);
1093         if (ret == UBI_BAD_FASTMAP)
1094                 ubi_err("Attach by fastmap failed, doing a full scan!");
1095         return ret;
1096
1097 free_hdr:
1098         ubi_free_vid_hdr(ubi, vh);
1099         kfree(ech);
1100 free_fm_sb:
1101         kfree(fmsb);
1102         kfree(fm);
1103         goto out;
1104 }
1105
1106 /**
1107  * ubi_write_fastmap - writes a fastmap.
1108  * @ubi: UBI device object
1109  * @new_fm: the to be written fastmap
1110  *
1111  * Returns 0 on success, < 0 indicates an internal error.
1112  */
1113 static int ubi_write_fastmap(struct ubi_device *ubi,
1114                              struct ubi_fastmap_layout *new_fm)
1115 {
1116         size_t fm_pos = 0;
1117         void *fm_raw;
1118         struct ubi_fm_sb *fmsb;
1119         struct ubi_fm_hdr *fmh;
1120         struct ubi_fm_scan_pool *fmpl1, *fmpl2;
1121         struct ubi_fm_ec *fec;
1122         struct ubi_fm_volhdr *fvh;
1123         struct ubi_fm_eba *feba;
1124         struct rb_node *node;
1125         struct ubi_wl_entry *wl_e;
1126         struct ubi_volume *vol;
1127         struct ubi_vid_hdr *avhdr, *dvhdr;
1128         struct ubi_work *ubi_wrk;
1129         int ret, i, j, free_peb_count, used_peb_count, vol_count;
1130         int scrub_peb_count, erase_peb_count;
1131
1132         fm_raw = ubi->fm_buf;
1133         memset(ubi->fm_buf, 0, ubi->fm_size);
1134
1135         avhdr = new_fm_vhdr(ubi, UBI_FM_SB_VOLUME_ID);
1136         if (!avhdr) {
1137                 ret = -ENOMEM;
1138                 goto out;
1139         }
1140
1141         dvhdr = new_fm_vhdr(ubi, UBI_FM_DATA_VOLUME_ID);
1142         if (!dvhdr) {
1143                 ret = -ENOMEM;
1144                 goto out_kfree;
1145         }
1146
1147         spin_lock(&ubi->volumes_lock);
1148         spin_lock(&ubi->wl_lock);
1149
1150         fmsb = (struct ubi_fm_sb *)fm_raw;
1151         fm_pos += sizeof(*fmsb);
1152         ubi_assert(fm_pos <= ubi->fm_size);
1153
1154         fmh = (struct ubi_fm_hdr *)(fm_raw + fm_pos);
1155         fm_pos += sizeof(*fmh);
1156         ubi_assert(fm_pos <= ubi->fm_size);
1157
1158         fmsb->magic = cpu_to_be32(UBI_FM_SB_MAGIC);
1159         fmsb->version = UBI_FM_FMT_VERSION;
1160         fmsb->used_blocks = cpu_to_be32(new_fm->used_blocks);
1161         /* the max sqnum will be filled in while *reading* the fastmap */
1162         fmsb->sqnum = 0;
1163
1164         fmh->magic = cpu_to_be32(UBI_FM_HDR_MAGIC);
1165         free_peb_count = 0;
1166         used_peb_count = 0;
1167         scrub_peb_count = 0;
1168         erase_peb_count = 0;
1169         vol_count = 0;
1170
1171         fmpl1 = (struct ubi_fm_scan_pool *)(fm_raw + fm_pos);
1172         fm_pos += sizeof(*fmpl1);
1173         fmpl1->magic = cpu_to_be32(UBI_FM_POOL_MAGIC);
1174         fmpl1->size = cpu_to_be16(ubi->fm_pool.size);
1175         fmpl1->max_size = cpu_to_be16(ubi->fm_pool.max_size);
1176
1177         for (i = 0; i < ubi->fm_pool.size; i++)
1178                 fmpl1->pebs[i] = cpu_to_be32(ubi->fm_pool.pebs[i]);
1179
1180         fmpl2 = (struct ubi_fm_scan_pool *)(fm_raw + fm_pos);
1181         fm_pos += sizeof(*fmpl2);
1182         fmpl2->magic = cpu_to_be32(UBI_FM_POOL_MAGIC);
1183         fmpl2->size = cpu_to_be16(ubi->fm_wl_pool.size);
1184         fmpl2->max_size = cpu_to_be16(ubi->fm_wl_pool.max_size);
1185
1186         for (i = 0; i < ubi->fm_wl_pool.size; i++)
1187                 fmpl2->pebs[i] = cpu_to_be32(ubi->fm_wl_pool.pebs[i]);
1188
1189         for (node = rb_first(&ubi->free); node; node = rb_next(node)) {
1190                 wl_e = rb_entry(node, struct ubi_wl_entry, u.rb);
1191                 fec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
1192
1193                 fec->pnum = cpu_to_be32(wl_e->pnum);
1194                 fec->ec = cpu_to_be32(wl_e->ec);
1195
1196                 free_peb_count++;
1197                 fm_pos += sizeof(*fec);
1198                 ubi_assert(fm_pos <= ubi->fm_size);
1199         }
1200         fmh->free_peb_count = cpu_to_be32(free_peb_count);
1201
1202         for (node = rb_first(&ubi->used); node; node = rb_next(node)) {
1203                 wl_e = rb_entry(node, struct ubi_wl_entry, u.rb);
1204                 fec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
1205
1206                 fec->pnum = cpu_to_be32(wl_e->pnum);
1207                 fec->ec = cpu_to_be32(wl_e->ec);
1208
1209                 used_peb_count++;
1210                 fm_pos += sizeof(*fec);
1211                 ubi_assert(fm_pos <= ubi->fm_size);
1212         }
1213         fmh->used_peb_count = cpu_to_be32(used_peb_count);
1214
1215         for (node = rb_first(&ubi->scrub); node; node = rb_next(node)) {
1216                 wl_e = rb_entry(node, struct ubi_wl_entry, u.rb);
1217                 fec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
1218
1219                 fec->pnum = cpu_to_be32(wl_e->pnum);
1220                 fec->ec = cpu_to_be32(wl_e->ec);
1221
1222                 scrub_peb_count++;
1223                 fm_pos += sizeof(*fec);
1224                 ubi_assert(fm_pos <= ubi->fm_size);
1225         }
1226         fmh->scrub_peb_count = cpu_to_be32(scrub_peb_count);
1227
1228
1229         list_for_each_entry(ubi_wrk, &ubi->works, list) {
1230                 if (ubi_is_erase_work(ubi_wrk)) {
1231                         wl_e = ubi_wrk->e;
1232                         ubi_assert(wl_e);
1233
1234                         fec = (struct ubi_fm_ec *)(fm_raw + fm_pos);
1235
1236                         fec->pnum = cpu_to_be32(wl_e->pnum);
1237                         fec->ec = cpu_to_be32(wl_e->ec);
1238
1239                         erase_peb_count++;
1240                         fm_pos += sizeof(*fec);
1241                         ubi_assert(fm_pos <= ubi->fm_size);
1242                 }
1243         }
1244         fmh->erase_peb_count = cpu_to_be32(erase_peb_count);
1245
1246         for (i = 0; i < UBI_MAX_VOLUMES + UBI_INT_VOL_COUNT; i++) {
1247                 vol = ubi->volumes[i];
1248
1249                 if (!vol)
1250                         continue;
1251
1252                 vol_count++;
1253
1254                 fvh = (struct ubi_fm_volhdr *)(fm_raw + fm_pos);
1255                 fm_pos += sizeof(*fvh);
1256                 ubi_assert(fm_pos <= ubi->fm_size);
1257
1258                 fvh->magic = cpu_to_be32(UBI_FM_VHDR_MAGIC);
1259                 fvh->vol_id = cpu_to_be32(vol->vol_id);
1260                 fvh->vol_type = vol->vol_type;
1261                 fvh->used_ebs = cpu_to_be32(vol->used_ebs);
1262                 fvh->data_pad = cpu_to_be32(vol->data_pad);
1263                 fvh->last_eb_bytes = cpu_to_be32(vol->last_eb_bytes);
1264
1265                 ubi_assert(vol->vol_type == UBI_DYNAMIC_VOLUME ||
1266                         vol->vol_type == UBI_STATIC_VOLUME);
1267
1268                 feba = (struct ubi_fm_eba *)(fm_raw + fm_pos);
1269                 fm_pos += sizeof(*feba) + (sizeof(__be32) * vol->reserved_pebs);
1270                 ubi_assert(fm_pos <= ubi->fm_size);
1271
1272                 for (j = 0; j < vol->reserved_pebs; j++)
1273                         feba->pnum[j] = cpu_to_be32(vol->eba_tbl[j]);
1274
1275                 feba->reserved_pebs = cpu_to_be32(j);
1276                 feba->magic = cpu_to_be32(UBI_FM_EBA_MAGIC);
1277         }
1278         fmh->vol_count = cpu_to_be32(vol_count);
1279         fmh->bad_peb_count = cpu_to_be32(ubi->bad_peb_count);
1280
1281         avhdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
1282         avhdr->lnum = 0;
1283
1284         spin_unlock(&ubi->wl_lock);
1285         spin_unlock(&ubi->volumes_lock);
1286
1287         dbg_bld("writing fastmap SB to PEB %i", new_fm->e[0]->pnum);
1288         ret = ubi_io_write_vid_hdr(ubi, new_fm->e[0]->pnum, avhdr);
1289         if (ret) {
1290                 ubi_err("unable to write vid_hdr to fastmap SB!");
1291                 goto out_kfree;
1292         }
1293
1294         for (i = 0; i < new_fm->used_blocks; i++) {
1295                 fmsb->block_loc[i] = cpu_to_be32(new_fm->e[i]->pnum);
1296                 fmsb->block_ec[i] = cpu_to_be32(new_fm->e[i]->ec);
1297         }
1298
1299         fmsb->data_crc = 0;
1300         fmsb->data_crc = cpu_to_be32(crc32(UBI_CRC32_INIT, fm_raw,
1301                                            ubi->fm_size));
1302
1303         for (i = 1; i < new_fm->used_blocks; i++) {
1304                 dvhdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
1305                 dvhdr->lnum = cpu_to_be32(i);
1306                 dbg_bld("writing fastmap data to PEB %i sqnum %llu",
1307                         new_fm->e[i]->pnum, be64_to_cpu(dvhdr->sqnum));
1308                 ret = ubi_io_write_vid_hdr(ubi, new_fm->e[i]->pnum, dvhdr);
1309                 if (ret) {
1310                         ubi_err("unable to write vid_hdr to PEB %i!",
1311                                 new_fm->e[i]->pnum);
1312                         goto out_kfree;
1313                 }
1314         }
1315
1316         for (i = 0; i < new_fm->used_blocks; i++) {
1317                 ret = ubi_io_write(ubi, fm_raw + (i * ubi->leb_size),
1318                         new_fm->e[i]->pnum, ubi->leb_start, ubi->leb_size);
1319                 if (ret) {
1320                         ubi_err("unable to write fastmap to PEB %i!",
1321                                 new_fm->e[i]->pnum);
1322                         goto out_kfree;
1323                 }
1324         }
1325
1326         ubi_assert(new_fm);
1327         ubi->fm = new_fm;
1328
1329         dbg_bld("fastmap written!");
1330
1331 out_kfree:
1332         ubi_free_vid_hdr(ubi, avhdr);
1333         ubi_free_vid_hdr(ubi, dvhdr);
1334 out:
1335         return ret;
1336 }
1337
1338 /**
1339  * erase_block - Manually erase a PEB.
1340  * @ubi: UBI device object
1341  * @pnum: PEB to be erased
1342  *
1343  * Returns the new EC value on success, < 0 indicates an internal error.
1344  */
1345 static int erase_block(struct ubi_device *ubi, int pnum)
1346 {
1347         int ret;
1348         struct ubi_ec_hdr *ec_hdr;
1349         long long ec;
1350
1351         ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_KERNEL);
1352         if (!ec_hdr)
1353                 return -ENOMEM;
1354
1355         ret = ubi_io_read_ec_hdr(ubi, pnum, ec_hdr, 0);
1356         if (ret < 0)
1357                 goto out;
1358         else if (ret && ret != UBI_IO_BITFLIPS) {
1359                 ret = -EINVAL;
1360                 goto out;
1361         }
1362
1363         ret = ubi_io_sync_erase(ubi, pnum, 0);
1364         if (ret < 0)
1365                 goto out;
1366
1367         ec = be64_to_cpu(ec_hdr->ec);
1368         ec += ret;
1369         if (ec > UBI_MAX_ERASECOUNTER) {
1370                 ret = -EINVAL;
1371                 goto out;
1372         }
1373
1374         ec_hdr->ec = cpu_to_be64(ec);
1375         ret = ubi_io_write_ec_hdr(ubi, pnum, ec_hdr);
1376         if (ret < 0)
1377                 goto out;
1378
1379         ret = ec;
1380 out:
1381         kfree(ec_hdr);
1382         return ret;
1383 }
1384
1385 /**
1386  * invalidate_fastmap - destroys a fastmap.
1387  * @ubi: UBI device object
1388  * @fm: the fastmap to be destroyed
1389  *
1390  * Returns 0 on success, < 0 indicates an internal error.
1391  */
1392 static int invalidate_fastmap(struct ubi_device *ubi,
1393                               struct ubi_fastmap_layout *fm)
1394 {
1395         int ret;
1396         struct ubi_vid_hdr *vh;
1397
1398         ret = erase_block(ubi, fm->e[0]->pnum);
1399         if (ret < 0)
1400                 return ret;
1401
1402         vh = new_fm_vhdr(ubi, UBI_FM_SB_VOLUME_ID);
1403         if (!vh)
1404                 return -ENOMEM;
1405
1406         /* deleting the current fastmap SB is not enough, an old SB may exist,
1407          * so create a (corrupted) SB such that fastmap will find it and fall
1408          * back to scanning mode in any case */
1409         vh->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
1410         ret = ubi_io_write_vid_hdr(ubi, fm->e[0]->pnum, vh);
1411
1412         return ret;
1413 }
1414
1415 /**
1416  * ubi_update_fastmap - will be called by UBI if a volume changes or
1417  * a fastmap pool becomes full.
1418  * @ubi: UBI device object
1419  *
1420  * Returns 0 on success, < 0 indicates an internal error.
1421  */
1422 int ubi_update_fastmap(struct ubi_device *ubi)
1423 {
1424         int ret, i;
1425         struct ubi_fastmap_layout *new_fm, *old_fm;
1426         struct ubi_wl_entry *tmp_e;
1427
1428         mutex_lock(&ubi->fm_mutex);
1429
1430         ubi_refill_pools(ubi);
1431
1432         if (ubi->ro_mode || ubi->fm_disabled) {
1433                 mutex_unlock(&ubi->fm_mutex);
1434                 return 0;
1435         }
1436
1437         ret = ubi_ensure_anchor_pebs(ubi);
1438         if (ret) {
1439                 mutex_unlock(&ubi->fm_mutex);
1440                 return ret;
1441         }
1442
1443         new_fm = kzalloc(sizeof(*new_fm), GFP_KERNEL);
1444         if (!new_fm) {
1445                 mutex_unlock(&ubi->fm_mutex);
1446                 return -ENOMEM;
1447         }
1448
1449         new_fm->used_blocks = ubi->fm_size / ubi->leb_size;
1450
1451         for (i = 0; i < new_fm->used_blocks; i++) {
1452                 new_fm->e[i] = kmem_cache_alloc(ubi_wl_entry_slab, GFP_KERNEL);
1453                 if (!new_fm->e[i]) {
1454                         while (i--)
1455                                 kfree(new_fm->e[i]);
1456
1457                         kfree(new_fm);
1458                         mutex_unlock(&ubi->fm_mutex);
1459                         return -ENOMEM;
1460                 }
1461         }
1462
1463         old_fm = ubi->fm;
1464         ubi->fm = NULL;
1465
1466         if (new_fm->used_blocks > UBI_FM_MAX_BLOCKS) {
1467                 ubi_err("fastmap too large");
1468                 ret = -ENOSPC;
1469                 goto err;
1470         }
1471
1472         for (i = 1; i < new_fm->used_blocks; i++) {
1473                 spin_lock(&ubi->wl_lock);
1474                 tmp_e = ubi_wl_get_fm_peb(ubi, 0);
1475                 spin_unlock(&ubi->wl_lock);
1476
1477                 if (!tmp_e && !old_fm) {
1478                         int j;
1479                         ubi_err("could not get any free erase block");
1480
1481                         for (j = 1; j < i; j++)
1482                                 ubi_wl_put_fm_peb(ubi, new_fm->e[j], j, 0);
1483
1484                         ret = -ENOSPC;
1485                         goto err;
1486                 } else if (!tmp_e && old_fm) {
1487                         ret = erase_block(ubi, old_fm->e[i]->pnum);
1488                         if (ret < 0) {
1489                                 int j;
1490
1491                                 for (j = 1; j < i; j++)
1492                                         ubi_wl_put_fm_peb(ubi, new_fm->e[j],
1493                                                           j, 0);
1494
1495                                 ubi_err("could not erase old fastmap PEB");
1496                                 goto err;
1497                         }
1498
1499                         new_fm->e[i]->pnum = old_fm->e[i]->pnum;
1500                         new_fm->e[i]->ec = old_fm->e[i]->ec;
1501                 } else {
1502                         new_fm->e[i]->pnum = tmp_e->pnum;
1503                         new_fm->e[i]->ec = tmp_e->ec;
1504
1505                         if (old_fm)
1506                                 ubi_wl_put_fm_peb(ubi, old_fm->e[i], i,
1507                                                   old_fm->to_be_tortured[i]);
1508                 }
1509         }
1510
1511         spin_lock(&ubi->wl_lock);
1512         tmp_e = ubi_wl_get_fm_peb(ubi, 1);
1513         spin_unlock(&ubi->wl_lock);
1514
1515         if (old_fm) {
1516                 /* no fresh anchor PEB was found, reuse the old one */
1517                 if (!tmp_e) {
1518                         ret = erase_block(ubi, old_fm->e[0]->pnum);
1519                         if (ret < 0) {
1520                                 int i;
1521                                 ubi_err("could not erase old anchor PEB");
1522
1523                                 for (i = 1; i < new_fm->used_blocks; i++)
1524                                         ubi_wl_put_fm_peb(ubi, new_fm->e[i],
1525                                                           i, 0);
1526                                 goto err;
1527                         }
1528
1529                         new_fm->e[0]->pnum = old_fm->e[0]->pnum;
1530                         new_fm->e[0]->ec = ret;
1531                 } else {
1532                         /* we've got a new anchor PEB, return the old one */
1533                         ubi_wl_put_fm_peb(ubi, old_fm->e[0], 0,
1534                                           old_fm->to_be_tortured[0]);
1535
1536                         new_fm->e[0]->pnum = tmp_e->pnum;
1537                         new_fm->e[0]->ec = tmp_e->ec;
1538                 }
1539         } else {
1540                 if (!tmp_e) {
1541                         int i;
1542                         ubi_err("could not find any anchor PEB");
1543
1544                         for (i = 1; i < new_fm->used_blocks; i++)
1545                                 ubi_wl_put_fm_peb(ubi, new_fm->e[i], i, 0);
1546
1547                         ret = -ENOSPC;
1548                         goto err;
1549                 }
1550
1551                 new_fm->e[0]->pnum = tmp_e->pnum;
1552                 new_fm->e[0]->ec = tmp_e->ec;
1553         }
1554
1555         down_write(&ubi->work_sem);
1556         down_write(&ubi->fm_sem);
1557         ret = ubi_write_fastmap(ubi, new_fm);
1558         up_write(&ubi->fm_sem);
1559         up_write(&ubi->work_sem);
1560
1561         if (ret)
1562                 goto err;
1563
1564 out_unlock:
1565         mutex_unlock(&ubi->fm_mutex);
1566         kfree(old_fm);
1567         return ret;
1568
1569 err:
1570         kfree(new_fm);
1571
1572         ubi_warn("Unable to write new fastmap, err=%i", ret);
1573
1574         ret = 0;
1575         if (old_fm) {
1576                 ret = invalidate_fastmap(ubi, old_fm);
1577                 if (ret < 0)
1578                         ubi_err("Unable to invalidiate current fastmap!");
1579                 else if (ret)
1580                         ret = 0;
1581         }
1582         goto out_unlock;
1583 }