1. 14 5月, 2011 8 次提交
    • A
      UBIFS: make force in-the-gaps to be a general self-check · bc3f07f0
      Artem Bityutskiy 提交于
      UBIFS can force itself to use the 'in-the-gaps' commit method - the last resort
      method which is normally invoced very very rarely. Currently this "force
      int-the-gaps" debugging feature is a separate test mode. But it is a bit saner
      to make it to be the "general" self-test check instead.
      
      This patch is just a clean-up which should make the debugging code look a bit
      nicer and easier to use - we have way too many debugging options.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      bc3f07f0
    • A
      UBIFS: improve space checking debugging feature · f1bd66af
      Artem Bityutskiy 提交于
      This patch improves the 'dbg_check_space_info()' function which checks
      whether the amount of space before re-mounting and after re-mounting
      is the same (remounting from R/O to R/W modes and vice-versa).
      
      The problem is that 'dbg_check_space_info()' does not save the budgeting
      information before re-mounting, so when an error is reported, we do not
      know why the amount of free space changed.
      
      This patches makes the following changes:
      
      1. Teaches 'dbg_dump_budg()' function to accept a 'struct ubifs_budg_info'
         argument and print out the this argument. This way we may ask it to
         print any saved budgeting info, no only the current one.
      2. Accordingly changes all the callers of 'dbg_dump_budg()' to comply with
         the changed interface.
      3. Introduce a 'saved_bi' (saved budgeting info) field to
         'struct ubifs_debug_info' and save the budgeting info before re-mounting
         there.
      4. Change 'dbg_check_space_info()' and make it print both old and new
         budgeting information.
      5. Additionally, save 'c->igx_gc_cnt' and print it if and error happens. This
         value contributes to the amount of free space, so we have to print it.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      f1bd66af
    • A
      UBIFS: rearrange the budget dump · 8c3067e4
      Artem Bityutskiy 提交于
      Re-arrange the budget dump and make sure we first dump all
      the 'struct ubifs_budg_info' fields, and then the other information.
      Additionally, print the 'uncommitted_idx' variable.
      
      This change is required for to the following dumping function
      enhancement where it will be possible to dump saved
      'struct ubifs_budg_info' objects, not only the current one.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      8c3067e4
    • A
      UBIFS: simplify dbg_dump_budg calling conventions · 8ff83089
      Artem Bityutskiy 提交于
      The current 'dbg_dump_budg()' calling convention is that the
      'c->space_lock' spinlock is held. However, none of the callers
      actually use it from contects which have 'c->space_lock' locked,
      so all callers have to explicitely lock and unlock the spinlock.
      This is not very sensible convention. This patch changes it and
      makes 'dbg_dump_budg()' lock the spinlock instead of imposing this
      to the callers. This simplifies the code a little.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      8ff83089
    • A
      UBIFS: introduce a separate structure for budgeting info · b137545c
      Artem Bityutskiy 提交于
      This patch separates out all the budgeting-related information
      from 'struct ubifs_info' to 'struct ubifs_budg_info'. This way the
      code looks a bit cleaner. However, the main driver for this is
      that we want to save budgeting information and print it later,
      so a separate data structure for this is helpful.
      
      This patch is a preparation for the further debugging output
      improvements.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      b137545c
    • A
      UBIFS: use __packed instead of __attribute__((packed)) · cc64f774
      Artem Bityutskiy 提交于
      There was an attempt to standartize various "__attribute__" and
      other macros in order to have potentially portable and more
      consistent code, see commit 82ddcb04.
      
      Note, that commit refers Rober Love's blog post, but the URL
      is broken, the valid URL is:
      http://blog.rlove.org/2005/10/with-little-help-from-your-compiler.html
      
      Moreover, nowadays checkpatch.pl warns about using
      __attribute__((packed)):
      
      "WARNING: __packed is preferred over __attribute__((packed))"
      
      It is not a big deal for UBIFS to use __packed, so let's do it.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      cc64f774
    • A
      UBIFS: fix minor stylistic issues · c4361570
      Artem Bityutskiy 提交于
      Fix several minor stylistic issues:
      * lines longer than 80 characters
      * space before closing parenthesis ')'
      * spaces in the indentations
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      c4361570
    • A
      UBIFS: make debugfs files non-seekable · 1bbfc848
      Artem Bityutskiy 提交于
      Turn the debufs files UBIFS maintains into non-seekable. Indeed, none
      of them is supposed to be seek'ed.
      
      Do this by making the '.lseek()' handler to be 'no_llseek()' and by
      using 'nonseekable_open()' in the '.open()' operation.
      
      This does mean an API break but this debugging API is only used by a couple
      of test scripts which do not rely in the 'llseek()' operation.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      1bbfc848
  2. 10 5月, 2011 15 次提交
  3. 06 5月, 2011 1 次提交
  4. 05 5月, 2011 1 次提交
  5. 04 5月, 2011 3 次提交
  6. 03 5月, 2011 4 次提交
    • J
      cifs: handle errors from coalesce_t2 · 16541ba1
      Jeff Layton 提交于
      cifs_demultiplex_thread calls coalesce_t2 to try and merge follow-on t2
      responses into the original mid buffer. coalesce_t2 however can return
      errors, but the caller doesn't handle that situation properly. Fix the
      thread to treat such a case as it would a malformed packet. Mark the
      mid as being malformed and issue the callback.
      
      Cc: stable@kernel.org
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      16541ba1
    • J
      cifs: refactor mid finding loop in cifs_demultiplex_thread · 146f9f65
      Jeff Layton 提交于
      ...to reduce the extreme indentation. This should introduce no
      behavioral changes.
      
      Cc: stable@kernel.org
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      146f9f65
    • A
      UBIFS: seek journal heads to the latest bud in replay · 52c6e6f9
      Artem Bityutskiy 提交于
      This is the second fix of the following symptom:
      
      UBIFS error (pid 34456): could not find an empty LEB
      
      which sometimes happens after power cuts when we mount the file-system - UBIFS
      refuses it with the above error message which comes from the
      'ubifs_rcvry_gc_commit()' function. I can reproduce this using the integck test
      with the UBIFS power cut emulation enabled.
      
      Analysis of the problem.
      
      Currently UBIFS replay seeks the journal heads to the last _replayed_ bud.
      But the buds are replayed out-of-order, so the replay basically seeks journal
      heads to the "random" bud belonging to this head, and not to the _last_ one.
      
      The result of this is that the GC head may be seeked to a full LEB with no free
      space, or very little free space. And 'ubifs_rcvry_gc_commit()' tries to find a
      fully or mostly dirty LEB to match the current GC head (because we need to
      garbage-collect that dirty LEB at one go, because we do not have @c->gc_lnum).
      So 'ubifs_find_dirty_leb()' fails and we fall back to finding an empty LEB and
      also fail. As a result - recovery fails and mounting fails.
      
      This patch teaches the replay to initialize the GC heads exactly to the latest
      buds, i.e. the buds which have the largest sequence number in corresponding
      log reference nodes.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      Cc: stable@kernel.org
      52c6e6f9
    • A
      UBIFS: do not free write-buffers when in R/O mode · b50b9f40
      Artem Bityutskiy 提交于
      Currently UBIFS has a small optimization - it frees write-buffers when it is
      re-mounted from R/W mode to R/O mode. Of course, when it is mounted R/O, it
      does not allocate write-buffers as well.
      
      This optimization is nice but it leads to subtle problems and complications
      in recovery, which I can reproduce using the integck test. The symptoms are
      that after a power cut the file-system cannot be mounted if we first mount
      it R/O, and then re-mount R/W - 'ubifs_rcvry_gc_commit()' prints:
      
      UBIFS error (pid 34456): could not find an empty LEB
      
      Analysis of the  problem.
      
      When mounting R/W, the reply process sets journal heads to buds [1], but
      when mounting R/O - it does not do this, because the write-buffers are not
      allocated. So 'ubifs_rcvry_gc_commit()' works completely differently for the
      same file-system but for the following 2 cases:
      
      1. mounting R/W after a power cut and recover
      2. mounting R/O after a power cut, re-mounting R/W and run deferred recovery
      
      In the former case, we have journal heads seeked to the a bud, in the latter
      case, they are non-seeked (wbuf->lnum == -1). So in the latter case we do not
      try to recover the GC LEB by garbage-collecting to the GC head, but we just
      try to find an empty LEB, and there may be no empty LEBs, so we just fail.
      On the other hand, in the former case (mount R/W), we are able to make a GC LEB
      (@c->gc_lnum) by garbage-collecting.
      
      Thus, let's remove this small nice optimization and always allocate
      write-buffers. This should not make too big difference - we have only 3
      of them, each of max. write unit size, which is usually 2KiB. So this is
      about 6KiB of RAM for the typical case, and only when mounted R/O.
      
      [1]: Note, currently the replay process is setting (seeking) the journal heads
      to _some_ buds, not necessarily to the buds which had been the journal heads
      before the power cut happened. This will be fixed separately.
      Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
      Cc: stable@kernel.org
      b50b9f40
  7. 29 4月, 2011 4 次提交
  8. 28 4月, 2011 3 次提交
  9. 27 4月, 2011 1 次提交