xfs
[Top] [All Lists]

[XFS updates] XFS development tree branch, for-linus, updated. for-linus

To: xfs@xxxxxxxxxxx
Subject: [XFS updates] XFS development tree branch, for-linus, updated. for-linus-v3.6-rc4-2-g0ba6e53
From: xfs@xxxxxxxxxxx
Date: Tue, 18 Sep 2012 16:50:59 -0500
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "XFS development tree".

The branch, for-linus has been updated
  0ba6e53 xfs: stop the sync worker before xfs_unmountfs
  6fb8a90 xfs: fix race while discarding buffers [V4]
      from  a672e1be30d5bc848cd0067c55ed29b2015b7c17 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 0ba6e5368c302819da7aff537e0d7eff2616c6a6
Author: Ben Myers <bpm@xxxxxxx>
Date:   Thu Sep 13 16:18:47 2012 -0500

    xfs: stop the sync worker before xfs_unmountfs
    
    Cancel work of the xfs_sync_worker before teardown of the log in
    xfs_unmountfs.  This prevents occasional crashes on unmount like so:
    
    PID: 21602  TASK: ee9df060  CPU: 0   COMMAND: "kworker/0:3"
     #0 [c5377d28] crash_kexec at c0292c94
     #1 [c5377d80] oops_end at c07090c2
     #2 [c5377d98] no_context at c06f614e
     #3 [c5377dbc] __bad_area_nosemaphore at c06f6281
     #4 [c5377df4] bad_area_nosemaphore at c06f629b
     #5 [c5377e00] do_page_fault at c070b0cb
     #6 [c5377e7c] error_code (via page_fault) at c070892c
        EAX: f300c6a8  EBX: f300c6a8  ECX: 000000c0  EDX: 000000c0  EBP: 
c5377ed0
        DS:  007b      ESI: 00000000  ES:  007b      EDI: 00000001  GS:  
ffffad20
        CS:  0060      EIP: c0481ad0  ERR: ffffffff  EFLAGS: 00010246
     #7 [c5377eb0] atomic64_read_cx8 at c0481ad0
     #8 [c5377ebc] xlog_assign_tail_lsn_locked at f7cc7c6e [xfs]
     #9 [c5377ed4] xfs_trans_ail_delete_bulk at f7ccd520 [xfs]
    #10 [c5377f0c] xfs_buf_iodone at f7ccb602 [xfs]
    #11 [c5377f24] xfs_buf_do_callbacks at f7cca524 [xfs]
    #12 [c5377f30] xfs_buf_iodone_callbacks at f7cca5da [xfs]
    #13 [c5377f4c] xfs_buf_iodone_work at f7c718d0 [xfs]
    #14 [c5377f58] process_one_work at c024ee4c
    #15 [c5377f98] worker_thread at c024f43d
    #16 [c5377fbc] kthread at c025326b
    #17 [c5377fe8] kernel_thread_helper at c070e834
    
    PID: 26653  TASK: e79143b0  CPU: 3   COMMAND: "umount"
     #0 [cde0fda0] __schedule at c0706595
     #1 [cde0fe28] schedule at c0706b89
     #2 [cde0fe30] schedule_timeout at c0705600
     #3 [cde0fe94] __down_common at c0706098
     #4 [cde0fec8] __down at c0706122
     #5 [cde0fed0] down at c025936f
     #6 [cde0fee0] xfs_buf_lock at f7c7131d [xfs]
     #7 [cde0ff00] xfs_freesb at f7cc2236 [xfs]
     #8 [cde0ff10] xfs_fs_put_super at f7c80f21 [xfs]
     #9 [cde0ff1c] generic_shutdown_super at c0333d7a
    #10 [cde0ff38] kill_block_super at c0333e0f
    #11 [cde0ff48] deactivate_locked_super at c0334218
    #12 [cde0ff58] deactivate_super at c033495d
    #13 [cde0ff68] mntput_no_expire at c034bc13
    #14 [cde0ff7c] sys_umount at c034cc69
    #15 [cde0ffa0] sys_oldumount at c034ccd4
    #16 [cde0ffb0] system_call at c0707e66
    
    commit 11159a05 added this to xfs_log_unmount and needs to be cleaned up
    at a later date.
    
    Signed-off-by: Ben Myers <bpm@xxxxxxx>
    Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Mark Tinguely <tinguely@xxxxxxx>

commit 6fb8a90aa3f2319a25f3396b1e9273300f8903b8
Author: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
Date:   Fri Aug 10 15:01:51 2012 -0300

    xfs: fix race while discarding buffers [V4]
    
    While xfs_buftarg_shrink() is freeing buffers from the dispose list (filled 
with
    buffers from lru list), there is a possibility to have xfs_buf_stale() 
racing
    with it, and removing buffers from dispose list before xfs_buftarg_shrink() 
does
    it.
    
    This happens because xfs_buftarg_shrink() handle the dispose list without
    locking and the test condition in xfs_buf_stale() checks for the buffer 
being in
    *any* list:
    
    if (!list_empty(&bp->b_lru))
    
    If the buffer happens to be on dispose list, this causes the buffer counter 
of
    lru list (btp->bt_lru_nr) to be decremented twice (once in 
xfs_buftarg_shrink()
    and another in xfs_buf_stale()) causing a wrong account usage of the lru 
list.
    
    This may cause xfs_buftarg_shrink() to return a wrong value to the memory
    shrinker shrink_slab(), and such account error may also cause an underflowed
    value to be returned; since the counter is lower than the current number of
    items in the lru list, a decrement may happen when the counter is 0, causing
    an underflow on the counter.
    
    The fix uses a new flag field (and a new buffer flag) to serialize buffer
    handling during the shrink process. The new flag field has been designed to 
use
    btp->bt_lru_lock/unlock instead of xfs_buf_lock/unlock mechanism.
    
    dchinner, sandeen, aquini and aris also deserve credits for this.
    
    Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
    Reviewed-by: Ben Myers <bpm@xxxxxxx>
    Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Signed-off-by: Ben Myers <bpm@xxxxxxx>

-----------------------------------------------------------------------

Summary of changes:
 fs/xfs/xfs_buf.c   |    5 ++++-
 fs/xfs/xfs_buf.h   |   41 ++++++++++++++++++++++++-----------------
 fs/xfs/xfs_super.c |    1 +
 3 files changed, 29 insertions(+), 18 deletions(-)


hooks/post-receive
-- 
XFS development tree

<Prev in Thread] Current Thread [Next in Thread>
  • [XFS updates] XFS development tree branch, for-linus, updated. for-linus-v3.6-rc4-2-g0ba6e53, xfs <=