1. 21 9月, 2009 1 次提交
  2. 25 7月, 2009 1 次提交
  3. 10 6月, 2009 2 次提交
    • A
      UBI: handle more error codes · 6b5c94c6
      Artem Bityutskiy 提交于
      The UBIFS WL worker may encounter read errors and there is logic
      which makes a decision whether we should do one of:
      
      1. cancel the operation and move the PEB with the read errors to
         the 'erroneous' list;
      2. switch to R/O mode.
      
      ATM, only -EIO errors trigger 1., other errors trigger 2. The idea
      is that if we know we encountered an I/O error, do 1. Otherwise,
      we do not know how to react, and do 2., just in case. E.g., if
      the underlying driver became crazy because of a bug, we do not
      want to harm any data, and switch to R/O mode.
      
      This patch does 2 things:
      1. Makes sure reads from the source PEB always cause 1. This is
         more consistent with other reads which come from the upper
         layers and never cause R/O.
      2. Teaches UBI to do 1. also on -EBADMSG, UBI_IO_BAD_VID_HDR,
         -ENOMEM, and -ETIMEOUT. But this is only when reading the
         target PEB.
      
      This preblems were hunted by Adrian Hunter.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      6b5c94c6
    • A
      UBI: fix multiple spelling typos · 815bc5f8
      Artem Bityutskiy 提交于
      Some of the typos were indicated by Adrian Hunter,
      some by 'aspell'.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      815bc5f8
  4. 02 6月, 2009 3 次提交
    • A
      UBI: do not switch to R/O mode on read errors · b86a2c56
      Artem Bityutskiy 提交于
      This patch improves UBI errors handling. ATM UBI switches to
      R/O mode when the WL worker fails to read the source PEB.
      This means that the upper layers (e.g., UBIFS) has no
      chances to unmap the erroneous PEB and fix the error.
      This patch changes this behaviour and makes UBI put PEBs
      like this into a separate RB-tree, thus preventing the
      WL worker from hitting the same read errors again and
      again.
      
      But there is a 10% limit on a maximum amount of PEBs like this.
      If there are too much of them, UBI switches to R/O mode.
      
      Additionally, this patch teaches UBI not to panic and
      switch to R/O mode if after a PEB has been copied, the
      target LEB cannot be read back. Instead, now UBI cancels
      the operation and schedules the target PEB for torturing.
      
      The error paths has been tested by ingecting errors
      into 'ubi_eba_copy_leb()'.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      b86a2c56
    • A
      UBI: fix and clean-up error paths in WL worker · 87960c0b
      Artem Bityutskiy 提交于
      This patch fixes the error path in the WL worker - in same cases
      UBI oopses when 'goto out_error' happens and e1 or e2 are NULL.
      This patch also cleans up the error paths a little. And I have
      tested nearly all error paths in the WL worker.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      87960c0b
    • A
      UBI: introduce new constants · 90bf0265
      Artem Bityutskiy 提交于
      This patch is a clean-up and a preparation for the following
      patches. It introduece constants for the return values of the
      'ubi_eba_copy_leb()' function.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      90bf0265
  5. 06 1月, 2009 1 次提交
  6. 05 12月, 2008 2 次提交
  7. 06 11月, 2008 1 次提交
  8. 24 7月, 2008 6 次提交
    • A
      UBI: fix checkpatch.pl errors and warnings · 9c9ec147
      Artem Bityutskiy 提交于
      Just out or curiousity ran checkpatch.pl for whole UBI,
      and discovered there are quite a few of stylistic issues.
      Fix them.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      9c9ec147
    • A
      UBI: bugfix - do not torture PEB needlessly · 4d88de4b
      Artem Bityutskiy 提交于
      This is probably a copy-paste bug - we torture the old PEB
      in the atomic LEB change function, but we should not do this.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      4d88de4b
    • A
      UBI: amend commentaries · 85c6e6e2
      Artem Bityutskiy 提交于
      Hch asked not to use "unit" for sub-systems, let it be so.
      Also some other commentaries modifications.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      85c6e6e2
    • A
      UBI: fix LEB locking · 23add745
      Artem Bityutskiy 提交于
      leb_read_unlock() may be called simultaniously by several tasks.
      The would race at the following code:
      
       up_read(&le->mutex);
       if (free)
               kfree(le);
      
      And it is possible that one task frees 'le' before the other tasks
      do 'up_read()'. Fix this by doing up_read and free inside the
      'ubi->ltree' lock. Below it the oops we had because of this:
      
      BUG: spinlock bad magic on CPU#0, integck/7504
      BUG: unable to handle kernel paging request at 6b6b6c4f
      IP: [<c0211221>] spin_bug+0x5c/0xdb
      *pde = 00000000 Oops: 0000 [#1] PREEMPT SMP Modules linked in: ubifs ubi nandsim nand nand_ids nand_ecc video output
      
      Pid: 7504, comm: integck Not tainted (2.6.26-rc3ubifs26 #8)
      EIP: 0060:[<c0211221>] EFLAGS: 00010002 CPU: 0
      EIP is at spin_bug+0x5c/0xdb
      EAX: 00000032 EBX: 6b6b6b6b ECX: 6b6b6b6b EDX: f7f7ce30
      ESI: f76491dc EDI: c044f51f EBP: e8a736cc ESP: e8a736a8
      DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
      Process integck (pid: 7504, ti=e8a72000 task=f7f7ce30 task.ti=e8a72000)
      Stack: c044f754 c044f51f 00000000 f7f7d024 00001d50 00000001 f76491dc 00000296       f6df50e0 e8a736d8 c02112f0 f76491dc e8a736e8 c039157a f7d9e830 f76491d8       e8a7370c c020b975 f76491dc 00000296 f76491f8 00000000 f76491d8 00000000 Call Trace:
      [<c02112f0>] ? _raw_spin_unlock+0x50/0x7c
      [<c039157a>] ? _spin_unlock_irqrestore+0x20/0x58
      [<c020b975>] ? rwsem_wake+0x4b/0x122
      [<c0390e0a>] ? call_rwsem_wake+0xa/0xc
      [<c0139ee7>] ? up_read+0x28/0x31
      [<f8873b3c>] ? leb_read_unlock+0x73/0x7b [ubi]
      [<f88742a3>] ? ubi_eba_read_leb+0x195/0x2b0 [ubi]
      [<f8872a04>] ? ubi_leb_read+0xaf/0xf8 [ubi]
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      23add745
    • A
      UBI: fix memory leak · abc5e922
      Artem Bityutskiy 提交于
      ubi_free_volume() function sets ubi->volumes[] to NULL, so
      ubi_eba_close() is useless, it does not free what has to be freed.
      So zap it and free vol->eba_tbl at the volume release function.
      Pointed-out-by: NAdrian Hunter <ext-adrian.hunter@nokia.com>
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      abc5e922
    • K
      UBI: avoid unnecessary division operations · cadb40cc
      Kyungmin Park 提交于
      UBI already checks that @min io size is the power of 2 at io_init.
      It is save to use bit operations then.
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      cadb40cc
  9. 25 1月, 2008 4 次提交
    • A
      UBI: handle zero-length case · 60c03153
      Artem Bityutskiy 提交于
      ubi_eba_atomic_leb_change() has to just map the LEB to a free PEB
      if data length is zero.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      60c03153
    • A
      UBI: add layout volume information · 91f2d53c
      Artem Bityutskiy 提交于
      Add more information about layout volume to make userspace tools
      use the macros instead of constants. Also rename UBI_LAYOUT_VOL_ID
      to make it consistent with other macros.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      91f2d53c
    • A
      UBI: add auto-resize feature · 4ccf8cff
      Artem Bityutskiy 提交于
      The problem: NAND flashes have different amount of initial bad physical
      eraseblocks (marked as bad by the manufacturer). For example, for 256MiB
      Samsung OneNAND flash there might be from 0 to 40 bad initial eraseblocks,
      which is about 2%. When UBI is used as the base system, one needs to know
      the exact amount of good physical eraseblocks, because this number is
      needed to create the UBI image which is put to the devices during
      production. But this number is not know, which forces us to use the
      minimum number of good physical eraseblocks. And UBI additionally
      reserves some percentage of physical eraseblocks for bad block handling
      (default is 1%), so we have 1-3% of PEBs reserved at the end, depending
      on the amount of initial bad PEBs. But it is desired to always have
      1% (or more, depending on the configuration).
      
      Solution: this patch adds an "auto-resize" flag to the volume table.
      The volume which has the "auto-resize" flag will automatically be re-sized
      (enlarged) on the first UBI initialization. UBI clears the flag when
      the volume is re-sized. Only one volume may have the "auto-resize" flag.
      
      So, the production UBI image may have one volume with "auto-resize"
      flag set, and its size is automatically adjusted on the first boot
      of the device.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      4ccf8cff
    • A
      UBI: get rid of ubi_ltree_slab · b9a06623
      Artem Bityutskiy 提交于
      This slab cache is not really needed since the number of objects
      is low and the constructor does not make much sense because we
      allocate oblects when doint I/O, which is way slower then allocation.
      Suggested-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      b9a06623
  10. 27 12月, 2007 8 次提交
    • A
      UBI: add UBI devices reference counting · e73f4459
      Artem Bityutskiy 提交于
      This is one more step on the way to "removable" UBI devices. It
      adds reference counting for UBI devices. Every time a volume on
      this device is opened - the device's refcount is increased. It
      is also increased if someone is reading any sysfs file of this
      UBI device or of one of its volumes.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      e73f4459
    • A
      UBI: bugfix: protect from volume removal · 43f9b25a
      Artem Bityutskiy 提交于
      When the WL worker is moving an LEB, the volume might go away
      occasionally. UBI does not handle these situations correctly.
      
      This patch introduces a new mutex which serializes wear-levelling
      worker and the the 'ubi_wl_put_peb()' function. Now, if one puts
      an LEB, and its PEB is being moved, it will wait on the mutex.
      And because we unmap all LEBs when removing volumes, this will make
      the volume remove function to wait while the LEB movement
      finishes.
      
      Below is an example of an oops which should be fixed by this patch:
      
      Pid: 9167, comm: io_paral Not tainted (2.6.24-rc5-ubi-2.6.git #2)
      EIP: 0060:[<f884a379>] EFLAGS: 00010246 CPU: 0
      EIP is at prot_tree_del+0x2a/0x63 [ubi]
      EAX: f39a90e0 EBX: 00000000 ECX: 00000000 EDX: 00000134
      ESI: f39a90e0 EDI: f39a90e0 EBP: f2d55ddc ESP: f2d55dd4
       DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
      Process io_paral (pid: 9167, ti=f2d54000 task=f72a8030 task.ti=f2d54000)
      Stack: f39a95f8 ef6aae50 f2d55e08 f884a511 f88538e1 f884ecea 00000134 00000000
             f39a9604 f39a95f0 efea8280 00000000 f39a90e0 f2d55e40 f8847261 f8850c3c
             f884eaad 00000001 000000b9 00000134 00000172 000000b9 00000134 00000001
      Call Trace:
       [<c0105227>] show_trace_log_lvl+0x1a/0x30
       [<c01052e2>] show_stack_log_lvl+0xa5/0xca
       [<c01053d6>] show_registers+0xcf/0x21b
       [<c0105648>] die+0x126/0x224
       [<c0119a62>] do_page_fault+0x27f/0x60d
       [<c037dd62>] error_code+0x72/0x78
       [<f884a511>] ubi_wl_put_peb+0xf0/0x191 [ubi]
       [<f8847261>] ubi_eba_unmap_leb+0xaf/0xcc [ubi]
       [<f8843c21>] ubi_remove_volume+0x102/0x1e8 [ubi]
       [<f8846077>] ubi_cdev_ioctl+0x22a/0x383 [ubi]
       [<c017d768>] do_ioctl+0x68/0x71
       [<c017d7c6>] vfs_ioctl+0x55/0x271
       [<c017da15>] sys_ioctl+0x33/0x52
       [<c0104152>] sysenter_past_esp+0x5f/0xa5
       =======================
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      43f9b25a
    • A
      UBI: introduce volume refcounting · d05c77a8
      Artem Bityutskiy 提交于
      Add ref_count field to UBI volumes and remove weired "vol->removed"
      field. This way things are better understandable and we do not have
      to do whold show_attr operation under spinlock.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      d05c77a8
    • A
      UBI: add some more comments · c63a491d
      Artem Bityutskiy 提交于
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      c63a491d
    • A
      UBI: improve internal interfaces · 89b96b69
      Artem Bityutskiy 提交于
      Pass volume description object to the EBA function which makes
      more sense, and EBA function do not have to find the volume
      description object by volume ID.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      89b96b69
    • A
      UBI: create ltree_entry slab on initialization · 3a8d4642
      Artem Bityutskiy 提交于
      Since the ltree_entry slab cache is a global entity, which is
      used by all UBI devices, it is more logical to create it on
      module initialization time and destro on module exit time.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      3a8d4642
    • A
      UBI: add ubi_leb_map interface · 393852ec
      Artem Bityutskiy 提交于
      The idea of this interface belongs to Adrian Hunter. The
      interface is extremely useful when one has to have a guarantee
      that an LEB will contain all 0xFFs even in case of an unclean
      reboot. UBI does have an 'ubi_leb_erase()' call which may do
      this, but it is stupid and ineffecient, because it flushes whole
      queue. I should be re-worked to just be a pair of unmap,
      map calls.
      
      The user of the interfaci is UBIFS at the moment.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      393852ec
    • A
      UBI: bugfix: allocate mandatory EBs first · 94780d4d
      Artem Bityutskiy 提交于
      First allocate the necessary eraseblocks, then the optional ones.
      Otherwise it allocates all PEBs for bad EB handling, and fails
      on then following EBA LEB allocation.
      Reported-by: NAdrian Hunter <ext-adrian.hunter@nokia.com>
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      94780d4d
  11. 17 10月, 2007 1 次提交
  12. 14 10月, 2007 4 次提交
    • A
      UBI: return correct error code · cc5f4f28
      Artem Bityutskiy 提交于
      Fix the following warning:
      
      drivers/mtd/ubi/eba.c: In function 'ubi_eba_init_scan':
      drivers/mtd/ubi/eba.c:1116: warning: 'err' may be used uninitialized in this function
      Pointed-to-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      cc5f4f28
    • A
      UBI: fix atomic LEB change problems · e8823bd6
      Artem Bityutskiy 提交于
      When the UBI device is nearly full, i.e. all LEBs are mapped, we have
      only one spare LEB left - the one we reserved for WL purposes. Well,
      I do not count the LEBs which were reserved for bad PEB handling -
      suppose NOR flash for simplicity. If an "atomic LEB change operation"
      is run, and the WL unit is moving a LEB, we have no spare LEBs to
      finish the operation and fail, which is not good. Moreover, if there
      are 2 or more simultanious "atomic LEB change" requests, only one of
      them has chances to succeed, the other will fail with -ENOSPC. Not
      good either.
      
      This patch does 2 things:
      1. Reserves one PEB for the "atomic LEB change" operation.
      2. Serealize the operations so that only on of them may run
         at a time (by means of a mutex).
      Pointed-to-by: NBrijesh Singh <brijesh.s.singh@gmail.com>
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      e8823bd6
    • A
      UBI: do not use vmalloc on I/O path · e88d6e10
      Artem Bityutskiy 提交于
      Similar reason as in case of the previous patch: it causes
      deadlocks if a filesystem with writeback support works on top
      of UBI. So pre-allocate needed buffers when attaching MTD device.
      We also need mutexes to protect the buffers, but they do not
      cause much contantion because they are used in recovery, torture,
      and WL copy routines, which are called seldom.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      e88d6e10
    • A
      UBI: allocate memory with GFP_NOFS · 33818bbb
      Artem Bityutskiy 提交于
      Use GFP_NOFS flag when allocating memory on I/O path, because otherwise
      we may deadlock the filesystem which works on top of us. We observed
      the deadlocks with UBIFS. Example:
      
      VFS->FS lock a lock->UBI->kmalloc()->VFS writeback->FS locks the same
      lock again.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      33818bbb
  13. 20 7月, 2007 1 次提交
    • P
      mm: Remove slab destructors from kmem_cache_create(). · 20c2df83
      Paul Mundt 提交于
      Slab destructors were no longer supported after Christoph's
      c59def9f change. They've been
      BUGs for both slab and slub, and slob never supported them
      either.
      
      This rips out support for the dtor pointer from kmem_cache_create()
      completely and fixes up every single callsite in the kernel (there were
      about 224, not including the slab allocator definitions themselves,
      or the documentation references).
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      20c2df83
  14. 18 7月, 2007 5 次提交