UBI: add ubi_leb_map interface
[pandora-kernel.git] / drivers / mtd / ubi / eba.c
1 /*
2  * Copyright (c) International Business Machines Corp., 2006
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12  * the GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Artem Bityutskiy (Битюцкий Артём)
19  */
20
21 /*
22  * The UBI Eraseblock Association (EBA) unit.
23  *
24  * This unit is responsible for I/O to/from logical eraseblock.
25  *
26  * Although in this implementation the EBA table is fully kept and managed in
27  * RAM, which assumes poor scalability, it might be (partially) maintained on
28  * flash in future implementations.
29  *
30  * The EBA unit implements per-logical eraseblock locking. Before accessing a
31  * logical eraseblock it is locked for reading or writing. The per-logical
32  * eraseblock locking is implemented by means of the lock tree. The lock tree
33  * is an RB-tree which refers all the currently locked logical eraseblocks. The
34  * lock tree elements are &struct ltree_entry objects. They are indexed by
35  * (@vol_id, @lnum) pairs.
36  *
37  * EBA also maintains the global sequence counter which is incremented each
38  * time a logical eraseblock is mapped to a physical eraseblock and it is
39  * stored in the volume identifier header. This means that each VID header has
40  * a unique sequence number. The sequence number is only increased an we assume
41  * 64 bits is enough to never overflow.
42  */
43
44 #include <linux/slab.h>
45 #include <linux/crc32.h>
46 #include <linux/err.h>
47 #include "ubi.h"
48
49 /* Number of physical eraseblocks reserved for atomic LEB change operation */
50 #define EBA_RESERVED_PEBS 1
51
52 /**
53  * struct ltree_entry - an entry in the lock tree.
54  * @rb: links RB-tree nodes
55  * @vol_id: volume ID of the locked logical eraseblock
56  * @lnum: locked logical eraseblock number
57  * @users: how many tasks are using this logical eraseblock or wait for it
58  * @mutex: read/write mutex to implement read/write access serialization to
59  * the (@vol_id, @lnum) logical eraseblock
60  *
61  * When a logical eraseblock is being locked - corresponding &struct ltree_entry
62  * object is inserted to the lock tree (@ubi->ltree).
63  */
64 struct ltree_entry {
65         struct rb_node rb;
66         int vol_id;
67         int lnum;
68         int users;
69         struct rw_semaphore mutex;
70 };
71
72 /* Slab cache for lock-tree entries */
73 static struct kmem_cache *ltree_slab;
74
75 /**
76  * next_sqnum - get next sequence number.
77  * @ubi: UBI device description object
78  *
79  * This function returns next sequence number to use, which is just the current
80  * global sequence counter value. It also increases the global sequence
81  * counter.
82  */
83 static unsigned long long next_sqnum(struct ubi_device *ubi)
84 {
85         unsigned long long sqnum;
86
87         spin_lock(&ubi->ltree_lock);
88         sqnum = ubi->global_sqnum++;
89         spin_unlock(&ubi->ltree_lock);
90
91         return sqnum;
92 }
93
94 /**
95  * ubi_get_compat - get compatibility flags of a volume.
96  * @ubi: UBI device description object
97  * @vol_id: volume ID
98  *
99  * This function returns compatibility flags for an internal volume. User
100  * volumes have no compatibility flags, so %0 is returned.
101  */
102 static int ubi_get_compat(const struct ubi_device *ubi, int vol_id)
103 {
104         if (vol_id == UBI_LAYOUT_VOL_ID)
105                 return UBI_LAYOUT_VOLUME_COMPAT;
106         return 0;
107 }
108
109 /**
110  * ltree_lookup - look up the lock tree.
111  * @ubi: UBI device description object
112  * @vol_id: volume ID
113  * @lnum: logical eraseblock number
114  *
115  * This function returns a pointer to the corresponding &struct ltree_entry
116  * object if the logical eraseblock is locked and %NULL if it is not.
117  * @ubi->ltree_lock has to be locked.
118  */
119 static struct ltree_entry *ltree_lookup(struct ubi_device *ubi, int vol_id,
120                                         int lnum)
121 {
122         struct rb_node *p;
123
124         p = ubi->ltree.rb_node;
125         while (p) {
126                 struct ltree_entry *le;
127
128                 le = rb_entry(p, struct ltree_entry, rb);
129
130                 if (vol_id < le->vol_id)
131                         p = p->rb_left;
132                 else if (vol_id > le->vol_id)
133                         p = p->rb_right;
134                 else {
135                         if (lnum < le->lnum)
136                                 p = p->rb_left;
137                         else if (lnum > le->lnum)
138                                 p = p->rb_right;
139                         else
140                                 return le;
141                 }
142         }
143
144         return NULL;
145 }
146
147 /**
148  * ltree_add_entry - add new entry to the lock tree.
149  * @ubi: UBI device description object
150  * @vol_id: volume ID
151  * @lnum: logical eraseblock number
152  *
153  * This function adds new entry for logical eraseblock (@vol_id, @lnum) to the
154  * lock tree. If such entry is already there, its usage counter is increased.
155  * Returns pointer to the lock tree entry or %-ENOMEM if memory allocation
156  * failed.
157  */
158 static struct ltree_entry *ltree_add_entry(struct ubi_device *ubi, int vol_id,
159                                            int lnum)
160 {
161         struct ltree_entry *le, *le1, *le_free;
162
163         le = kmem_cache_alloc(ltree_slab, GFP_NOFS);
164         if (!le)
165                 return ERR_PTR(-ENOMEM);
166
167         le->vol_id = vol_id;
168         le->lnum = lnum;
169
170         spin_lock(&ubi->ltree_lock);
171         le1 = ltree_lookup(ubi, vol_id, lnum);
172
173         if (le1) {
174                 /*
175                  * This logical eraseblock is already locked. The newly
176                  * allocated lock entry is not needed.
177                  */
178                 le_free = le;
179                 le = le1;
180         } else {
181                 struct rb_node **p, *parent = NULL;
182
183                 /*
184                  * No lock entry, add the newly allocated one to the
185                  * @ubi->ltree RB-tree.
186                  */
187                 le_free = NULL;
188
189                 p = &ubi->ltree.rb_node;
190                 while (*p) {
191                         parent = *p;
192                         le1 = rb_entry(parent, struct ltree_entry, rb);
193
194                         if (vol_id < le1->vol_id)
195                                 p = &(*p)->rb_left;
196                         else if (vol_id > le1->vol_id)
197                                 p = &(*p)->rb_right;
198                         else {
199                                 ubi_assert(lnum != le1->lnum);
200                                 if (lnum < le1->lnum)
201                                         p = &(*p)->rb_left;
202                                 else
203                                         p = &(*p)->rb_right;
204                         }
205                 }
206
207                 rb_link_node(&le->rb, parent, p);
208                 rb_insert_color(&le->rb, &ubi->ltree);
209         }
210         le->users += 1;
211         spin_unlock(&ubi->ltree_lock);
212
213         if (le_free)
214                 kmem_cache_free(ltree_slab, le_free);
215
216         return le;
217 }
218
219 /**
220  * leb_read_lock - lock logical eraseblock for reading.
221  * @ubi: UBI device description object
222  * @vol_id: volume ID
223  * @lnum: logical eraseblock number
224  *
225  * This function locks a logical eraseblock for reading. Returns zero in case
226  * of success and a negative error code in case of failure.
227  */
228 static int leb_read_lock(struct ubi_device *ubi, int vol_id, int lnum)
229 {
230         struct ltree_entry *le;
231
232         le = ltree_add_entry(ubi, vol_id, lnum);
233         if (IS_ERR(le))
234                 return PTR_ERR(le);
235         down_read(&le->mutex);
236         return 0;
237 }
238
239 /**
240  * leb_read_unlock - unlock logical eraseblock.
241  * @ubi: UBI device description object
242  * @vol_id: volume ID
243  * @lnum: logical eraseblock number
244  */
245 static void leb_read_unlock(struct ubi_device *ubi, int vol_id, int lnum)
246 {
247         int free = 0;
248         struct ltree_entry *le;
249
250         spin_lock(&ubi->ltree_lock);
251         le = ltree_lookup(ubi, vol_id, lnum);
252         le->users -= 1;
253         ubi_assert(le->users >= 0);
254         if (le->users == 0) {
255                 rb_erase(&le->rb, &ubi->ltree);
256                 free = 1;
257         }
258         spin_unlock(&ubi->ltree_lock);
259
260         up_read(&le->mutex);
261         if (free)
262                 kmem_cache_free(ltree_slab, le);
263 }
264
265 /**
266  * leb_write_lock - lock logical eraseblock for writing.
267  * @ubi: UBI device description object
268  * @vol_id: volume ID
269  * @lnum: logical eraseblock number
270  *
271  * This function locks a logical eraseblock for writing. Returns zero in case
272  * of success and a negative error code in case of failure.
273  */
274 static int leb_write_lock(struct ubi_device *ubi, int vol_id, int lnum)
275 {
276         struct ltree_entry *le;
277
278         le = ltree_add_entry(ubi, vol_id, lnum);
279         if (IS_ERR(le))
280                 return PTR_ERR(le);
281         down_write(&le->mutex);
282         return 0;
283 }
284
285 /**
286  * leb_write_unlock - unlock logical eraseblock.
287  * @ubi: UBI device description object
288  * @vol_id: volume ID
289  * @lnum: logical eraseblock number
290  */
291 static void leb_write_unlock(struct ubi_device *ubi, int vol_id, int lnum)
292 {
293         int free;
294         struct ltree_entry *le;
295
296         spin_lock(&ubi->ltree_lock);
297         le = ltree_lookup(ubi, vol_id, lnum);
298         le->users -= 1;
299         ubi_assert(le->users >= 0);
300         if (le->users == 0) {
301                 rb_erase(&le->rb, &ubi->ltree);
302                 free = 1;
303         } else
304                 free = 0;
305         spin_unlock(&ubi->ltree_lock);
306
307         up_write(&le->mutex);
308         if (free)
309                 kmem_cache_free(ltree_slab, le);
310 }
311
312 /**
313  * ubi_eba_unmap_leb - un-map logical eraseblock.
314  * @ubi: UBI device description object
315  * @vol_id: volume ID
316  * @lnum: logical eraseblock number
317  *
318  * This function un-maps logical eraseblock @lnum and schedules corresponding
319  * physical eraseblock for erasure. Returns zero in case of success and a
320  * negative error code in case of failure.
321  */
322 int ubi_eba_unmap_leb(struct ubi_device *ubi, int vol_id, int lnum)
323 {
324         int idx = vol_id2idx(ubi, vol_id), err, pnum;
325         struct ubi_volume *vol = ubi->volumes[idx];
326
327         if (ubi->ro_mode)
328                 return -EROFS;
329
330         err = leb_write_lock(ubi, vol_id, lnum);
331         if (err)
332                 return err;
333
334         pnum = vol->eba_tbl[lnum];
335         if (pnum < 0)
336                 /* This logical eraseblock is already unmapped */
337                 goto out_unlock;
338
339         dbg_eba("erase LEB %d:%d, PEB %d", vol_id, lnum, pnum);
340
341         vol->eba_tbl[lnum] = UBI_LEB_UNMAPPED;
342         err = ubi_wl_put_peb(ubi, pnum, 0);
343
344 out_unlock:
345         leb_write_unlock(ubi, vol_id, lnum);
346         return err;
347 }
348
349 /**
350  * ubi_eba_read_leb - read data.
351  * @ubi: UBI device description object
352  * @vol_id: volume ID
353  * @lnum: logical eraseblock number
354  * @buf: buffer to store the read data
355  * @offset: offset from where to read
356  * @len: how many bytes to read
357  * @check: data CRC check flag
358  *
359  * If the logical eraseblock @lnum is unmapped, @buf is filled with 0xFF
360  * bytes. The @check flag only makes sense for static volumes and forces
361  * eraseblock data CRC checking.
362  *
363  * In case of success this function returns zero. In case of a static volume,
364  * if data CRC mismatches - %-EBADMSG is returned. %-EBADMSG may also be
365  * returned for any volume type if an ECC error was detected by the MTD device
366  * driver. Other negative error cored may be returned in case of other errors.
367  */
368 int ubi_eba_read_leb(struct ubi_device *ubi, int vol_id, int lnum, void *buf,
369                      int offset, int len, int check)
370 {
371         int err, pnum, scrub = 0, idx = vol_id2idx(ubi, vol_id);
372         struct ubi_vid_hdr *vid_hdr;
373         struct ubi_volume *vol = ubi->volumes[idx];
374         uint32_t uninitialized_var(crc);
375
376         err = leb_read_lock(ubi, vol_id, lnum);
377         if (err)
378                 return err;
379
380         pnum = vol->eba_tbl[lnum];
381         if (pnum < 0) {
382                 /*
383                  * The logical eraseblock is not mapped, fill the whole buffer
384                  * with 0xFF bytes. The exception is static volumes for which
385                  * it is an error to read unmapped logical eraseblocks.
386                  */
387                 dbg_eba("read %d bytes from offset %d of LEB %d:%d (unmapped)",
388                         len, offset, vol_id, lnum);
389                 leb_read_unlock(ubi, vol_id, lnum);
390                 ubi_assert(vol->vol_type != UBI_STATIC_VOLUME);
391                 memset(buf, 0xFF, len);
392                 return 0;
393         }
394
395         dbg_eba("read %d bytes from offset %d of LEB %d:%d, PEB %d",
396                 len, offset, vol_id, lnum, pnum);
397
398         if (vol->vol_type == UBI_DYNAMIC_VOLUME)
399                 check = 0;
400
401 retry:
402         if (check) {
403                 vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
404                 if (!vid_hdr) {
405                         err = -ENOMEM;
406                         goto out_unlock;
407                 }
408
409                 err = ubi_io_read_vid_hdr(ubi, pnum, vid_hdr, 1);
410                 if (err && err != UBI_IO_BITFLIPS) {
411                         if (err > 0) {
412                                 /*
413                                  * The header is either absent or corrupted.
414                                  * The former case means there is a bug -
415                                  * switch to read-only mode just in case.
416                                  * The latter case means a real corruption - we
417                                  * may try to recover data. FIXME: but this is
418                                  * not implemented.
419                                  */
420                                 if (err == UBI_IO_BAD_VID_HDR) {
421                                         ubi_warn("bad VID header at PEB %d, LEB"
422                                                  "%d:%d", pnum, vol_id, lnum);
423                                         err = -EBADMSG;
424                                 } else
425                                         ubi_ro_mode(ubi);
426                         }
427                         goto out_free;
428                 } else if (err == UBI_IO_BITFLIPS)
429                         scrub = 1;
430
431                 ubi_assert(lnum < be32_to_cpu(vid_hdr->used_ebs));
432                 ubi_assert(len == be32_to_cpu(vid_hdr->data_size));
433
434                 crc = be32_to_cpu(vid_hdr->data_crc);
435                 ubi_free_vid_hdr(ubi, vid_hdr);
436         }
437
438         err = ubi_io_read_data(ubi, buf, pnum, offset, len);
439         if (err) {
440                 if (err == UBI_IO_BITFLIPS) {
441                         scrub = 1;
442                         err = 0;
443                 } else if (err == -EBADMSG) {
444                         if (vol->vol_type == UBI_DYNAMIC_VOLUME)
445                                 goto out_unlock;
446                         scrub = 1;
447                         if (!check) {
448                                 ubi_msg("force data checking");
449                                 check = 1;
450                                 goto retry;
451                         }
452                 } else
453                         goto out_unlock;
454         }
455
456         if (check) {
457                 uint32_t crc1 = crc32(UBI_CRC32_INIT, buf, len);
458                 if (crc1 != crc) {
459                         ubi_warn("CRC error: calculated %#08x, must be %#08x",
460                                  crc1, crc);
461                         err = -EBADMSG;
462                         goto out_unlock;
463                 }
464         }
465
466         if (scrub)
467                 err = ubi_wl_scrub_peb(ubi, pnum);
468
469         leb_read_unlock(ubi, vol_id, lnum);
470         return err;
471
472 out_free:
473         ubi_free_vid_hdr(ubi, vid_hdr);
474 out_unlock:
475         leb_read_unlock(ubi, vol_id, lnum);
476         return err;
477 }
478
479 /**
480  * recover_peb - recover from write failure.
481  * @ubi: UBI device description object
482  * @pnum: the physical eraseblock to recover
483  * @vol_id: volume ID
484  * @lnum: logical eraseblock number
485  * @buf: data which was not written because of the write failure
486  * @offset: offset of the failed write
487  * @len: how many bytes should have been written
488  *
489  * This function is called in case of a write failure and moves all good data
490  * from the potentially bad physical eraseblock to a good physical eraseblock.
491  * This function also writes the data which was not written due to the failure.
492  * Returns new physical eraseblock number in case of success, and a negative
493  * error code in case of failure.
494  */
495 static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
496                        const void *buf, int offset, int len)
497 {
498         int err, idx = vol_id2idx(ubi, vol_id), new_pnum, data_size, tries = 0;
499         struct ubi_volume *vol = ubi->volumes[idx];
500         struct ubi_vid_hdr *vid_hdr;
501
502         vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
503         if (!vid_hdr) {
504                 return -ENOMEM;
505         }
506
507         mutex_lock(&ubi->buf_mutex);
508
509 retry:
510         new_pnum = ubi_wl_get_peb(ubi, UBI_UNKNOWN);
511         if (new_pnum < 0) {
512                 mutex_unlock(&ubi->buf_mutex);
513                 ubi_free_vid_hdr(ubi, vid_hdr);
514                 return new_pnum;
515         }
516
517         ubi_msg("recover PEB %d, move data to PEB %d", pnum, new_pnum);
518
519         err = ubi_io_read_vid_hdr(ubi, pnum, vid_hdr, 1);
520         if (err && err != UBI_IO_BITFLIPS) {
521                 if (err > 0)
522                         err = -EIO;
523                 goto out_put;
524         }
525
526         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
527         err = ubi_io_write_vid_hdr(ubi, new_pnum, vid_hdr);
528         if (err)
529                 goto write_error;
530
531         data_size = offset + len;
532         memset(ubi->peb_buf1 + offset, 0xFF, len);
533
534         /* Read everything before the area where the write failure happened */
535         if (offset > 0) {
536                 err = ubi_io_read_data(ubi, ubi->peb_buf1, pnum, 0, offset);
537                 if (err && err != UBI_IO_BITFLIPS)
538                         goto out_put;
539         }
540
541         memcpy(ubi->peb_buf1 + offset, buf, len);
542
543         err = ubi_io_write_data(ubi, ubi->peb_buf1, new_pnum, 0, data_size);
544         if (err)
545                 goto write_error;
546
547         mutex_unlock(&ubi->buf_mutex);
548         ubi_free_vid_hdr(ubi, vid_hdr);
549
550         vol->eba_tbl[lnum] = new_pnum;
551         ubi_wl_put_peb(ubi, pnum, 1);
552
553         ubi_msg("data was successfully recovered");
554         return 0;
555
556 out_put:
557         mutex_unlock(&ubi->buf_mutex);
558         ubi_wl_put_peb(ubi, new_pnum, 1);
559         ubi_free_vid_hdr(ubi, vid_hdr);
560         return err;
561
562 write_error:
563         /*
564          * Bad luck? This physical eraseblock is bad too? Crud. Let's try to
565          * get another one.
566          */
567         ubi_warn("failed to write to PEB %d", new_pnum);
568         ubi_wl_put_peb(ubi, new_pnum, 1);
569         if (++tries > UBI_IO_RETRIES) {
570                 mutex_unlock(&ubi->buf_mutex);
571                 ubi_free_vid_hdr(ubi, vid_hdr);
572                 return err;
573         }
574         ubi_msg("try again");
575         goto retry;
576 }
577
578 /**
579  * ubi_eba_write_leb - write data to dynamic volume.
580  * @ubi: UBI device description object
581  * @vol_id: volume ID
582  * @lnum: logical eraseblock number
583  * @buf: the data to write
584  * @offset: offset within the logical eraseblock where to write
585  * @len: how many bytes to write
586  * @dtype: data type
587  *
588  * This function writes data to logical eraseblock @lnum of a dynamic volume
589  * @vol_id. Returns zero in case of success and a negative error code in case
590  * of failure. In case of error, it is possible that something was still
591  * written to the flash media, but may be some garbage.
592  */
593 int ubi_eba_write_leb(struct ubi_device *ubi, int vol_id, int lnum,
594                       const void *buf, int offset, int len, int dtype)
595 {
596         int idx = vol_id2idx(ubi, vol_id), err, pnum, tries = 0;
597         struct ubi_volume *vol = ubi->volumes[idx];
598         struct ubi_vid_hdr *vid_hdr;
599
600         if (ubi->ro_mode)
601                 return -EROFS;
602
603         err = leb_write_lock(ubi, vol_id, lnum);
604         if (err)
605                 return err;
606
607         pnum = vol->eba_tbl[lnum];
608         if (pnum >= 0) {
609                 dbg_eba("write %d bytes at offset %d of LEB %d:%d, PEB %d",
610                         len, offset, vol_id, lnum, pnum);
611
612                 err = ubi_io_write_data(ubi, buf, pnum, offset, len);
613                 if (err) {
614                         ubi_warn("failed to write data to PEB %d", pnum);
615                         if (err == -EIO && ubi->bad_allowed)
616                                 err = recover_peb(ubi, pnum, vol_id, lnum, buf, offset, len);
617                         if (err)
618                                 ubi_ro_mode(ubi);
619                 }
620                 leb_write_unlock(ubi, vol_id, lnum);
621                 return err;
622         }
623
624         /*
625          * The logical eraseblock is not mapped. We have to get a free physical
626          * eraseblock and write the volume identifier header there first.
627          */
628         vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
629         if (!vid_hdr) {
630                 leb_write_unlock(ubi, vol_id, lnum);
631                 return -ENOMEM;
632         }
633
634         vid_hdr->vol_type = UBI_VID_DYNAMIC;
635         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
636         vid_hdr->vol_id = cpu_to_be32(vol_id);
637         vid_hdr->lnum = cpu_to_be32(lnum);
638         vid_hdr->compat = ubi_get_compat(ubi, vol_id);
639         vid_hdr->data_pad = cpu_to_be32(vol->data_pad);
640
641 retry:
642         pnum = ubi_wl_get_peb(ubi, dtype);
643         if (pnum < 0) {
644                 ubi_free_vid_hdr(ubi, vid_hdr);
645                 leb_write_unlock(ubi, vol_id, lnum);
646                 return pnum;
647         }
648
649         dbg_eba("write VID hdr and %d bytes at offset %d of LEB %d:%d, PEB %d",
650                 len, offset, vol_id, lnum, pnum);
651
652         err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr);
653         if (err) {
654                 ubi_warn("failed to write VID header to LEB %d:%d, PEB %d",
655                          vol_id, lnum, pnum);
656                 goto write_error;
657         }
658
659         if (len) {
660                 err = ubi_io_write_data(ubi, buf, pnum, offset, len);
661                 if (err) {
662                         ubi_warn("failed to write %d bytes at offset %d of "
663                                  "LEB %d:%d, PEB %d", len, offset, vol_id,
664                                  lnum, pnum);
665                         goto write_error;
666                 }
667         }
668
669         vol->eba_tbl[lnum] = pnum;
670
671         leb_write_unlock(ubi, vol_id, lnum);
672         ubi_free_vid_hdr(ubi, vid_hdr);
673         return 0;
674
675 write_error:
676         if (err != -EIO || !ubi->bad_allowed) {
677                 ubi_ro_mode(ubi);
678                 leb_write_unlock(ubi, vol_id, lnum);
679                 ubi_free_vid_hdr(ubi, vid_hdr);
680                 return err;
681         }
682
683         /*
684          * Fortunately, this is the first write operation to this physical
685          * eraseblock, so just put it and request a new one. We assume that if
686          * this physical eraseblock went bad, the erase code will handle that.
687          */
688         err = ubi_wl_put_peb(ubi, pnum, 1);
689         if (err || ++tries > UBI_IO_RETRIES) {
690                 ubi_ro_mode(ubi);
691                 leb_write_unlock(ubi, vol_id, lnum);
692                 ubi_free_vid_hdr(ubi, vid_hdr);
693                 return err;
694         }
695
696         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
697         ubi_msg("try another PEB");
698         goto retry;
699 }
700
701 /**
702  * ubi_eba_write_leb_st - write data to static volume.
703  * @ubi: UBI device description object
704  * @vol_id: volume ID
705  * @lnum: logical eraseblock number
706  * @buf: data to write
707  * @len: how many bytes to write
708  * @dtype: data type
709  * @used_ebs: how many logical eraseblocks will this volume contain
710  *
711  * This function writes data to logical eraseblock @lnum of static volume
712  * @vol_id. The @used_ebs argument should contain total number of logical
713  * eraseblock in this static volume.
714  *
715  * When writing to the last logical eraseblock, the @len argument doesn't have
716  * to be aligned to the minimal I/O unit size. Instead, it has to be equivalent
717  * to the real data size, although the @buf buffer has to contain the
718  * alignment. In all other cases, @len has to be aligned.
719  *
720  * It is prohibited to write more then once to logical eraseblocks of static
721  * volumes. This function returns zero in case of success and a negative error
722  * code in case of failure.
723  */
724 int ubi_eba_write_leb_st(struct ubi_device *ubi, int vol_id, int lnum,
725                          const void *buf, int len, int dtype, int used_ebs)
726 {
727         int err, pnum, tries = 0, data_size = len;
728         int idx = vol_id2idx(ubi, vol_id);
729         struct ubi_volume *vol = ubi->volumes[idx];
730         struct ubi_vid_hdr *vid_hdr;
731         uint32_t crc;
732
733         if (ubi->ro_mode)
734                 return -EROFS;
735
736         if (lnum == used_ebs - 1)
737                 /* If this is the last LEB @len may be unaligned */
738                 len = ALIGN(data_size, ubi->min_io_size);
739         else
740                 ubi_assert(len % ubi->min_io_size == 0);
741
742         vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
743         if (!vid_hdr)
744                 return -ENOMEM;
745
746         err = leb_write_lock(ubi, vol_id, lnum);
747         if (err) {
748                 ubi_free_vid_hdr(ubi, vid_hdr);
749                 return err;
750         }
751
752         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
753         vid_hdr->vol_id = cpu_to_be32(vol_id);
754         vid_hdr->lnum = cpu_to_be32(lnum);
755         vid_hdr->compat = ubi_get_compat(ubi, vol_id);
756         vid_hdr->data_pad = cpu_to_be32(vol->data_pad);
757
758         crc = crc32(UBI_CRC32_INIT, buf, data_size);
759         vid_hdr->vol_type = UBI_VID_STATIC;
760         vid_hdr->data_size = cpu_to_be32(data_size);
761         vid_hdr->used_ebs = cpu_to_be32(used_ebs);
762         vid_hdr->data_crc = cpu_to_be32(crc);
763
764 retry:
765         pnum = ubi_wl_get_peb(ubi, dtype);
766         if (pnum < 0) {
767                 ubi_free_vid_hdr(ubi, vid_hdr);
768                 leb_write_unlock(ubi, vol_id, lnum);
769                 return pnum;
770         }
771
772         dbg_eba("write VID hdr and %d bytes at LEB %d:%d, PEB %d, used_ebs %d",
773                 len, vol_id, lnum, pnum, used_ebs);
774
775         err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr);
776         if (err) {
777                 ubi_warn("failed to write VID header to LEB %d:%d, PEB %d",
778                          vol_id, lnum, pnum);
779                 goto write_error;
780         }
781
782         err = ubi_io_write_data(ubi, buf, pnum, 0, len);
783         if (err) {
784                 ubi_warn("failed to write %d bytes of data to PEB %d",
785                          len, pnum);
786                 goto write_error;
787         }
788
789         ubi_assert(vol->eba_tbl[lnum] < 0);
790         vol->eba_tbl[lnum] = pnum;
791
792         leb_write_unlock(ubi, vol_id, lnum);
793         ubi_free_vid_hdr(ubi, vid_hdr);
794         return 0;
795
796 write_error:
797         if (err != -EIO || !ubi->bad_allowed) {
798                 /*
799                  * This flash device does not admit of bad eraseblocks or
800                  * something nasty and unexpected happened. Switch to read-only
801                  * mode just in case.
802                  */
803                 ubi_ro_mode(ubi);
804                 leb_write_unlock(ubi, vol_id, lnum);
805                 ubi_free_vid_hdr(ubi, vid_hdr);
806                 return err;
807         }
808
809         err = ubi_wl_put_peb(ubi, pnum, 1);
810         if (err || ++tries > UBI_IO_RETRIES) {
811                 ubi_ro_mode(ubi);
812                 leb_write_unlock(ubi, vol_id, lnum);
813                 ubi_free_vid_hdr(ubi, vid_hdr);
814                 return err;
815         }
816
817         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
818         ubi_msg("try another PEB");
819         goto retry;
820 }
821
822 /*
823  * ubi_eba_atomic_leb_change - change logical eraseblock atomically.
824  * @ubi: UBI device description object
825  * @vol_id: volume ID
826  * @lnum: logical eraseblock number
827  * @buf: data to write
828  * @len: how many bytes to write
829  * @dtype: data type
830  *
831  * This function changes the contents of a logical eraseblock atomically. @buf
832  * has to contain new logical eraseblock data, and @len - the length of the
833  * data, which has to be aligned. This function guarantees that in case of an
834  * unclean reboot the old contents is preserved. Returns zero in case of
835  * success and a negative error code in case of failure.
836  *
837  * UBI reserves one LEB for the "atomic LEB change" operation, so only one
838  * LEB change may be done at a time. This is ensured by @ubi->alc_mutex.
839  */
840 int ubi_eba_atomic_leb_change(struct ubi_device *ubi, int vol_id, int lnum,
841                               const void *buf, int len, int dtype)
842 {
843         int err, pnum, tries = 0, idx = vol_id2idx(ubi, vol_id);
844         struct ubi_volume *vol = ubi->volumes[idx];
845         struct ubi_vid_hdr *vid_hdr;
846         uint32_t crc;
847
848         if (ubi->ro_mode)
849                 return -EROFS;
850
851         vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
852         if (!vid_hdr)
853                 return -ENOMEM;
854
855         mutex_lock(&ubi->alc_mutex);
856         err = leb_write_lock(ubi, vol_id, lnum);
857         if (err)
858                 goto out_mutex;
859
860         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
861         vid_hdr->vol_id = cpu_to_be32(vol_id);
862         vid_hdr->lnum = cpu_to_be32(lnum);
863         vid_hdr->compat = ubi_get_compat(ubi, vol_id);
864         vid_hdr->data_pad = cpu_to_be32(vol->data_pad);
865
866         crc = crc32(UBI_CRC32_INIT, buf, len);
867         vid_hdr->vol_type = UBI_VID_DYNAMIC;
868         vid_hdr->data_size = cpu_to_be32(len);
869         vid_hdr->copy_flag = 1;
870         vid_hdr->data_crc = cpu_to_be32(crc);
871
872 retry:
873         pnum = ubi_wl_get_peb(ubi, dtype);
874         if (pnum < 0) {
875                 err = pnum;
876                 goto out_leb_unlock;
877         }
878
879         dbg_eba("change LEB %d:%d, PEB %d, write VID hdr to PEB %d",
880                 vol_id, lnum, vol->eba_tbl[lnum], pnum);
881
882         err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr);
883         if (err) {
884                 ubi_warn("failed to write VID header to LEB %d:%d, PEB %d",
885                          vol_id, lnum, pnum);
886                 goto write_error;
887         }
888
889         err = ubi_io_write_data(ubi, buf, pnum, 0, len);
890         if (err) {
891                 ubi_warn("failed to write %d bytes of data to PEB %d",
892                          len, pnum);
893                 goto write_error;
894         }
895
896         if (vol->eba_tbl[lnum] >= 0) {
897                 err = ubi_wl_put_peb(ubi, vol->eba_tbl[lnum], 1);
898                 if (err)
899                         goto out_leb_unlock;
900         }
901
902         vol->eba_tbl[lnum] = pnum;
903
904 out_leb_unlock:
905         leb_write_unlock(ubi, vol_id, lnum);
906 out_mutex:
907         mutex_unlock(&ubi->alc_mutex);
908         ubi_free_vid_hdr(ubi, vid_hdr);
909         return err;
910
911 write_error:
912         if (err != -EIO || !ubi->bad_allowed) {
913                 /*
914                  * This flash device does not admit of bad eraseblocks or
915                  * something nasty and unexpected happened. Switch to read-only
916                  * mode just in case.
917                  */
918                 ubi_ro_mode(ubi);
919                 goto out_leb_unlock;
920         }
921
922         err = ubi_wl_put_peb(ubi, pnum, 1);
923         if (err || ++tries > UBI_IO_RETRIES) {
924                 ubi_ro_mode(ubi);
925                 goto out_leb_unlock;
926         }
927
928         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
929         ubi_msg("try another PEB");
930         goto retry;
931 }
932
933 /**
934  * ltree_entry_ctor - lock tree entries slab cache constructor.
935  * @obj: the lock-tree entry to construct
936  * @cache: the lock tree entry slab cache
937  * @flags: constructor flags
938  */
939 static void ltree_entry_ctor(struct kmem_cache *cache, void *obj)
940 {
941         struct ltree_entry *le = obj;
942
943         le->users = 0;
944         init_rwsem(&le->mutex);
945 }
946
947 /**
948  * ubi_eba_copy_leb - copy logical eraseblock.
949  * @ubi: UBI device description object
950  * @from: physical eraseblock number from where to copy
951  * @to: physical eraseblock number where to copy
952  * @vid_hdr: VID header of the @from physical eraseblock
953  *
954  * This function copies logical eraseblock from physical eraseblock @from to
955  * physical eraseblock @to. The @vid_hdr buffer may be changed by this
956  * function. Returns zero in case of success, %UBI_IO_BITFLIPS if the operation
957  * was canceled because bit-flips were detected at the target PEB, and a
958  * negative error code in case of failure.
959  */
960 int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
961                      struct ubi_vid_hdr *vid_hdr)
962 {
963         int err, vol_id, lnum, data_size, aldata_size, pnum, idx;
964         struct ubi_volume *vol;
965         uint32_t crc;
966
967         vol_id = be32_to_cpu(vid_hdr->vol_id);
968         lnum = be32_to_cpu(vid_hdr->lnum);
969
970         dbg_eba("copy LEB %d:%d, PEB %d to PEB %d", vol_id, lnum, from, to);
971
972         if (vid_hdr->vol_type == UBI_VID_STATIC) {
973                 data_size = be32_to_cpu(vid_hdr->data_size);
974                 aldata_size = ALIGN(data_size, ubi->min_io_size);
975         } else
976                 data_size = aldata_size =
977                             ubi->leb_size - be32_to_cpu(vid_hdr->data_pad);
978
979         /*
980          * We do not want anybody to write to this logical eraseblock while we
981          * are moving it, so we lock it.
982          */
983         err = leb_write_lock(ubi, vol_id, lnum);
984         if (err)
985                 return err;
986
987         mutex_lock(&ubi->buf_mutex);
988
989         /*
990          * But the logical eraseblock might have been put by this time.
991          * Cancel if it is true.
992          */
993         idx = vol_id2idx(ubi, vol_id);
994
995         /*
996          * We may race with volume deletion/re-size, so we have to hold
997          * @ubi->volumes_lock.
998          */
999         spin_lock(&ubi->volumes_lock);
1000         vol = ubi->volumes[idx];
1001         if (!vol) {
1002                 dbg_eba("volume %d was removed meanwhile", vol_id);
1003                 spin_unlock(&ubi->volumes_lock);
1004                 goto out_unlock;
1005         }
1006
1007         pnum = vol->eba_tbl[lnum];
1008         if (pnum != from) {
1009                 dbg_eba("LEB %d:%d is no longer mapped to PEB %d, mapped to "
1010                         "PEB %d, cancel", vol_id, lnum, from, pnum);
1011                 spin_unlock(&ubi->volumes_lock);
1012                 goto out_unlock;
1013         }
1014         spin_unlock(&ubi->volumes_lock);
1015
1016         /* OK, now the LEB is locked and we can safely start moving it */
1017
1018         dbg_eba("read %d bytes of data", aldata_size);
1019         err = ubi_io_read_data(ubi, ubi->peb_buf1, from, 0, aldata_size);
1020         if (err && err != UBI_IO_BITFLIPS) {
1021                 ubi_warn("error %d while reading data from PEB %d",
1022                          err, from);
1023                 goto out_unlock;
1024         }
1025
1026         /*
1027          * Now we have got to calculate how much data we have to to copy. In
1028          * case of a static volume it is fairly easy - the VID header contains
1029          * the data size. In case of a dynamic volume it is more difficult - we
1030          * have to read the contents, cut 0xFF bytes from the end and copy only
1031          * the first part. We must do this to avoid writing 0xFF bytes as it
1032          * may have some side-effects. And not only this. It is important not
1033          * to include those 0xFFs to CRC because later the they may be filled
1034          * by data.
1035          */
1036         if (vid_hdr->vol_type == UBI_VID_DYNAMIC)
1037                 aldata_size = data_size =
1038                         ubi_calc_data_len(ubi, ubi->peb_buf1, data_size);
1039
1040         cond_resched();
1041         crc = crc32(UBI_CRC32_INIT, ubi->peb_buf1, data_size);
1042         cond_resched();
1043
1044         /*
1045          * It may turn out to me that the whole @from physical eraseblock
1046          * contains only 0xFF bytes. Then we have to only write the VID header
1047          * and do not write any data. This also means we should not set
1048          * @vid_hdr->copy_flag, @vid_hdr->data_size, and @vid_hdr->data_crc.
1049          */
1050         if (data_size > 0) {
1051                 vid_hdr->copy_flag = 1;
1052                 vid_hdr->data_size = cpu_to_be32(data_size);
1053                 vid_hdr->data_crc = cpu_to_be32(crc);
1054         }
1055         vid_hdr->sqnum = cpu_to_be64(next_sqnum(ubi));
1056
1057         err = ubi_io_write_vid_hdr(ubi, to, vid_hdr);
1058         if (err)
1059                 goto out_unlock;
1060
1061         cond_resched();
1062
1063         /* Read the VID header back and check if it was written correctly */
1064         err = ubi_io_read_vid_hdr(ubi, to, vid_hdr, 1);
1065         if (err) {
1066                 if (err != UBI_IO_BITFLIPS)
1067                         ubi_warn("cannot read VID header back from PEB %d", to);
1068                 goto out_unlock;
1069         }
1070
1071         if (data_size > 0) {
1072                 err = ubi_io_write_data(ubi, ubi->peb_buf1, to, 0, aldata_size);
1073                 if (err)
1074                         goto out_unlock;
1075
1076                 cond_resched();
1077
1078                 /*
1079                  * We've written the data and are going to read it back to make
1080                  * sure it was written correctly.
1081                  */
1082
1083                 err = ubi_io_read_data(ubi, ubi->peb_buf2, to, 0, aldata_size);
1084                 if (err) {
1085                         if (err != UBI_IO_BITFLIPS)
1086                                 ubi_warn("cannot read data back from PEB %d",
1087                                          to);
1088                         goto out_unlock;
1089                 }
1090
1091                 cond_resched();
1092
1093                 if (memcmp(ubi->peb_buf1, ubi->peb_buf2, aldata_size)) {
1094                         ubi_warn("read data back from PEB %d - it is different",
1095                                  to);
1096                         goto out_unlock;
1097                 }
1098         }
1099
1100         ubi_assert(vol->eba_tbl[lnum] == from);
1101         vol->eba_tbl[lnum] = to;
1102
1103 out_unlock:
1104         mutex_unlock(&ubi->buf_mutex);
1105         leb_write_unlock(ubi, vol_id, lnum);
1106         return err;
1107 }
1108
1109 /**
1110  * ubi_eba_init_scan - initialize the EBA unit using scanning information.
1111  * @ubi: UBI device description object
1112  * @si: scanning information
1113  *
1114  * This function returns zero in case of success and a negative error code in
1115  * case of failure.
1116  */
1117 int ubi_eba_init_scan(struct ubi_device *ubi, struct ubi_scan_info *si)
1118 {
1119         int i, j, err, num_volumes;
1120         struct ubi_scan_volume *sv;
1121         struct ubi_volume *vol;
1122         struct ubi_scan_leb *seb;
1123         struct rb_node *rb;
1124
1125         dbg_eba("initialize EBA unit");
1126
1127         spin_lock_init(&ubi->ltree_lock);
1128         mutex_init(&ubi->alc_mutex);
1129         ubi->ltree = RB_ROOT;
1130
1131         if (ubi_devices_cnt == 0) {
1132                 ltree_slab = kmem_cache_create("ubi_ltree_slab",
1133                                                sizeof(struct ltree_entry), 0,
1134                                                0, &ltree_entry_ctor);
1135                 if (!ltree_slab)
1136                         return -ENOMEM;
1137         }
1138
1139         ubi->global_sqnum = si->max_sqnum + 1;
1140         num_volumes = ubi->vtbl_slots + UBI_INT_VOL_COUNT;
1141
1142         for (i = 0; i < num_volumes; i++) {
1143                 vol = ubi->volumes[i];
1144                 if (!vol)
1145                         continue;
1146
1147                 cond_resched();
1148
1149                 vol->eba_tbl = kmalloc(vol->reserved_pebs * sizeof(int),
1150                                        GFP_KERNEL);
1151                 if (!vol->eba_tbl) {
1152                         err = -ENOMEM;
1153                         goto out_free;
1154                 }
1155
1156                 for (j = 0; j < vol->reserved_pebs; j++)
1157                         vol->eba_tbl[j] = UBI_LEB_UNMAPPED;
1158
1159                 sv = ubi_scan_find_sv(si, idx2vol_id(ubi, i));
1160                 if (!sv)
1161                         continue;
1162
1163                 ubi_rb_for_each_entry(rb, seb, &sv->root, u.rb) {
1164                         if (seb->lnum >= vol->reserved_pebs)
1165                                 /*
1166                                  * This may happen in case of an unclean reboot
1167                                  * during re-size.
1168                                  */
1169                                 ubi_scan_move_to_list(sv, seb, &si->erase);
1170                         vol->eba_tbl[seb->lnum] = seb->pnum;
1171                 }
1172         }
1173
1174         if (ubi->avail_pebs < EBA_RESERVED_PEBS) {
1175                 ubi_err("no enough physical eraseblocks (%d, need %d)",
1176                         ubi->avail_pebs, EBA_RESERVED_PEBS);
1177                 err = -ENOSPC;
1178                 goto out_free;
1179         }
1180         ubi->avail_pebs -= EBA_RESERVED_PEBS;
1181         ubi->rsvd_pebs += EBA_RESERVED_PEBS;
1182
1183         if (ubi->bad_allowed) {
1184                 ubi_calculate_reserved(ubi);
1185
1186                 if (ubi->avail_pebs < ubi->beb_rsvd_level) {
1187                         /* No enough free physical eraseblocks */
1188                         ubi->beb_rsvd_pebs = ubi->avail_pebs;
1189                         ubi_warn("cannot reserve enough PEBs for bad PEB "
1190                                  "handling, reserved %d, need %d",
1191                                  ubi->beb_rsvd_pebs, ubi->beb_rsvd_level);
1192                 } else
1193                         ubi->beb_rsvd_pebs = ubi->beb_rsvd_level;
1194
1195                 ubi->avail_pebs -= ubi->beb_rsvd_pebs;
1196                 ubi->rsvd_pebs  += ubi->beb_rsvd_pebs;
1197         }
1198
1199         dbg_eba("EBA unit is initialized");
1200         return 0;
1201
1202 out_free:
1203         for (i = 0; i < num_volumes; i++) {
1204                 if (!ubi->volumes[i])
1205                         continue;
1206                 kfree(ubi->volumes[i]->eba_tbl);
1207         }
1208         if (ubi_devices_cnt == 0)
1209                 kmem_cache_destroy(ltree_slab);
1210         return err;
1211 }
1212
1213 /**
1214  * ubi_eba_close - close EBA unit.
1215  * @ubi: UBI device description object
1216  */
1217 void ubi_eba_close(const struct ubi_device *ubi)
1218 {
1219         int i, num_volumes = ubi->vtbl_slots + UBI_INT_VOL_COUNT;
1220
1221         dbg_eba("close EBA unit");
1222
1223         for (i = 0; i < num_volumes; i++) {
1224                 if (!ubi->volumes[i])
1225                         continue;
1226                 kfree(ubi->volumes[i]->eba_tbl);
1227         }
1228         if (ubi_devices_cnt == 1)
1229                 kmem_cache_destroy(ltree_slab);
1230 }