1. 10 Sep, 2010 3 commits
    • Tao Ma's avatar
      ocfs2: Fix lockdep warning in reflink. · 07eaac94
      Tao Ma authored
      This patch change mutex_lock to a new subclass and
      add a new inode lock subclass for the target inode
      which caused this lockdep warning.
      
      =============================================
      [ INFO: possible recursive locking detected ]
      2.6.35+ #5
      ---------------------------------------------
      reflink/11086 is trying to acquire lock:
       (Meta){+++++.}, at: [<ffffffffa06f9d65>] ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]
      
      but task is already holding lock:
       (Meta){+++++.}, at: [<ffffffffa06f9aa0>] ocfs2_reflink_ioctl+0x5d3/0x1229 [ocfs2]
      
      other info that might help us debug this:
      6 locks held by reflink/11086:
       #0:  (&sb->s_type->i_mutex_key#15/1){+.+.+.}, at: [<ffffffff820e09ec>] lookup_create+0x26/0x97
       #1:  (&sb->s_type->i_mutex_key#15){+.+.+.}, at: [<ffffffffa06f99a0>] ocfs2_reflink_ioctl+0x4d3/0x1229 [ocfs2]
       #2:  (Meta){+++++.}, at: [<ffffffffa06f9aa0>] ocfs2_reflink_ioctl+0x5d3/0x1229 [ocfs2]
       #3:  (&oi->ip_xattr_sem){+.+.+.}, at: [<ffffffffa06f9b58>] ocfs2_reflink_ioctl+0x68b/0x1229 [ocfs2]
       #4:  (&oi->ip_alloc_sem){+.+.+.}, at: [<ffffffffa06f9b67>] ocfs2_reflink_ioctl+0x69a/0x1229 [ocfs2]
       #5:  (&sb->s_type->i_mutex_key#15/2){+.+...}, at: [<ffffffffa06f9d4f>] ocfs2_reflink_ioctl+0x882/0x1229 [ocfs2]
      
      stack backtrace:
      Pid: 11086, comm: reflink Not tainted 2.6.35+ #5
      Call Trace:
       [<ffffffff82063dd9>] validate_chain+0x56e/0xd68
       [<ffffffff82062275>] ? mark_held_locks+0x49/0x69
       [<ffffffff82064d6d>] __lock_acquire+0x79a/0x7f1
       [<ffffffff82065a81>] lock_acquire+0xc6/0xed
       [<ffffffffa06f9d65>] ? ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]
       [<ffffffffa06c9ade>] __ocfs2_cluster_lock+0x975/0xa0d [ocfs2]
       [<ffffffffa06f9d65>] ? ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]
       [<ffffffffa06e107b>] ? ocfs2_wait_for_recovery+0x15/0x8a [ocfs2]
       [<ffffffffa06cb6ea>] ocfs2_inode_lock_full_nested+0x1ac/0xdc5 [ocfs2]
       [<ffffffffa06f9d65>] ? ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]
       [<ffffffff820623a0>] ? trace_hardirqs_on_caller+0x10b/0x12f
       [<ffffffff82060193>] ? debug_mutex_free_waiter+0x4f/0x53
       [<ffffffffa06f9d65>] ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]
       [<ffffffffa06ce24a>] ? ocfs2_file_lock_res_init+0x66/0x78 [ocfs2]
       [<ffffffff820bb2d2>] ? might_fault+0x40/0x8d
       [<ffffffffa06df9f6>] ocfs2_ioctl+0x61a/0x656 [ocfs2]
       [<ffffffff820ee5d3>] ? mntput_no_expire+0x1d/0xb0
       [<ffffffff820e07b3>] ? path_put+0x2c/0x31
       [<ffffffff820e53ac>] vfs_ioctl+0x2a/0x9d
       [<ffffffff820e5903>] do_vfs_ioctl+0x45d/0x4ae
       [<ffffffff8233a7f6>] ? _raw_spin_unlock+0x26/0x2a
       [<ffffffff8200299c>] ? sysret_check+0x27/0x62
       [<ffffffff820e59ab>] sys_ioctl+0x57/0x7a
       [<ffffffff8200296b>] system_call_fastpath+0x16/0x1b
      Signed-off-by: default avatarTao Ma <tao.ma@oracle.com>
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      07eaac94
    • Tao Ma's avatar
      ocfs2/lockdep: Move ip_xattr_sem out of ocfs2_xattr_get_nolock. · 5e64b0d9
      Tao Ma authored
      As the name shows, we shouldn't have any lock in
      ocfs2_xattr_get_nolock. so lift ip_xattr_sem to the caller.
      This should be safe for us since the only 2 callers are:
      1. ocfs2_xattr_get which will lock the resources.
      2. ocfs2_mknod which don't need this locking.
      
      And this also resolves the following lockdep warning.
      
      =======================================================
      [ INFO: possible circular locking dependency detected ]
      2.6.35+ #5
      -------------------------------------------------------
      reflink/30027 is trying to acquire lock:
       (&oi->ip_alloc_sem){+.+.+.}, at: [<ffffffffa0673b67>] ocfs2_reflink_ioctl+0x69a/0x1226 [ocfs2]
      
      but task is already holding lock:
       (&oi->ip_xattr_sem){++++..}, at: [<ffffffffa0673b58>] ocfs2_reflink_ioctl+0x68b/0x1226 [ocfs2]
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #3 (&oi->ip_xattr_sem){++++..}:
             [<ffffffff82064d6d>] __lock_acquire+0x79a/0x7f1
             [<ffffffff82065a81>] lock_acquire+0xc6/0xed
             [<ffffffff82339650>] down_read+0x34/0x47
             [<ffffffffa0691cb8>] ocfs2_xattr_get_nolock+0xa0/0x4e6 [ocfs2]
             [<ffffffffa069d64f>] ocfs2_get_acl_nolock+0x5c/0x132 [ocfs2]
             [<ffffffffa069d9c7>] ocfs2_init_acl+0x60/0x243 [ocfs2]
             [<ffffffffa066499d>] ocfs2_mknod+0xae8/0xfea [ocfs2]
             [<ffffffffa0665041>] ocfs2_create+0x9d/0x105 [ocfs2]
             [<ffffffff820e1c83>] vfs_create+0x9b/0xf4
             [<ffffffff820e20bb>] do_last+0x2fd/0x5be
             [<ffffffff820e31c0>] do_filp_open+0x1fb/0x572
             [<ffffffff820d6cf6>] do_sys_open+0x5a/0xe7
             [<ffffffff820d6dac>] sys_open+0x1b/0x1d
             [<ffffffff8200296b>] system_call_fastpath+0x16/0x1b
      
      -> #2 (jbd2_handle){+.+...}:
             [<ffffffff82064d6d>] __lock_acquire+0x79a/0x7f1
             [<ffffffff82065a81>] lock_acquire+0xc6/0xed
             [<ffffffffa0604ff8>] start_this_handle+0x4a3/0x4bc [jbd2]
             [<ffffffffa06051d6>] jbd2__journal_start+0xba/0xee [jbd2]
             [<ffffffffa0605218>] jbd2_journal_start+0xe/0x10 [jbd2]
             [<ffffffffa065ca34>] ocfs2_start_trans+0xb7/0x19b [ocfs2]
             [<ffffffffa06645f3>] ocfs2_mknod+0x73e/0xfea [ocfs2]
             [<ffffffffa0665041>] ocfs2_create+0x9d/0x105 [ocfs2]
             [<ffffffff820e1c83>] vfs_create+0x9b/0xf4
             [<ffffffff820e20bb>] do_last+0x2fd/0x5be
             [<ffffffff820e31c0>] do_filp_open+0x1fb/0x572
             [<ffffffff820d6cf6>] do_sys_open+0x5a/0xe7
             [<ffffffff820d6dac>] sys_open+0x1b/0x1d
             [<ffffffff8200296b>] system_call_fastpath+0x16/0x1b
      
      -> #1 (&journal->j_trans_barrier){.+.+..}:
             [<ffffffff82064d6d>] __lock_acquire+0x79a/0x7f1
             [<ffffffff82064fa9>] lock_release_non_nested+0x1e5/0x24b
             [<ffffffff82065999>] lock_release+0x158/0x17a
             [<ffffffff823389f6>] __mutex_unlock_slowpath+0xbf/0x11b
             [<ffffffff82338a5b>] mutex_unlock+0x9/0xb
             [<ffffffffa0679673>] ocfs2_free_ac_resource+0x31/0x67 [ocfs2]
             [<ffffffffa067c6bc>] ocfs2_free_alloc_context+0x11/0x1d [ocfs2]
             [<ffffffffa0633de0>] ocfs2_write_begin_nolock+0x141e/0x159b [ocfs2]
             [<ffffffffa0635523>] ocfs2_write_begin+0x11e/0x1e7 [ocfs2]
             [<ffffffff820a1297>] generic_file_buffered_write+0x10c/0x210
             [<ffffffffa0653624>] ocfs2_file_aio_write+0x4cc/0x6d3 [ocfs2]
             [<ffffffff820d822d>] do_sync_write+0xc2/0x106
             [<ffffffff820d897b>] vfs_write+0xae/0x131
             [<ffffffff820d8e55>] sys_write+0x47/0x6f
             [<ffffffff8200296b>] system_call_fastpath+0x16/0x1b
      
      -> #0 (&oi->ip_alloc_sem){+.+.+.}:
             [<ffffffff82063f92>] validate_chain+0x727/0xd68
             [<ffffffff82064d6d>] __lock_acquire+0x79a/0x7f1
             [<ffffffff82065a81>] lock_acquire+0xc6/0xed
             [<ffffffff82339694>] down_write+0x31/0x52
             [<ffffffffa0673b67>] ocfs2_reflink_ioctl+0x69a/0x1226 [ocfs2]
             [<ffffffffa06599f6>] ocfs2_ioctl+0x61a/0x656 [ocfs2]
             [<ffffffff820e53ac>] vfs_ioctl+0x2a/0x9d
             [<ffffffff820e5903>] do_vfs_ioctl+0x45d/0x4ae
             [<ffffffff820e59ab>] sys_ioctl+0x57/0x7a
             [<ffffffff8200296b>] system_call_fastpath+0x16/0x1b
      Signed-off-by: default avatarTao Ma <tao.ma@oracle.com>
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      5e64b0d9
    • Linus Torvalds's avatar
      Merge master.kernel.org:/home/rmk/linux-2.6-arm · 152831be
      Linus Torvalds authored
      * master.kernel.org:/home/rmk/linux-2.6-arm: (30 commits)
        ARM: Update mach-types
        ARM: Partially revert "Auto calculate ZRELADDR and provide option for exceptions"
        ARM: Ensure PTE modifications via dma_alloc_coherent are visible
        ARM: 6359/1: ep93xx: move clock initialization earlier
        Revert "[ARM] pxa: remove now unnecessary dma_needs_bounce()"
        ARM: 6352/1: perf: fix event validation
        ARM: 6344/1: Mark CPU_32v6K as depended on CPU_V7
        ARM: 6343/1: wire up fanotify and prlimit64 syscalls on ARM
        ARM: 6330/1: perf: reword comments relating to perf_event_do_pending
        ARM: pxa168fb: fix section mismatch
        ARM: pxa: Make id const in pwm_probe()
        ARM: pxa: fix CI_HSYNC and CI_VSYNC MFP defines for pxa300
        ARM: pxa: remove __init from cpufreq_driver->init()
        ARM: imx: set cache line size to 64 bytes for i.MX5
        mx5/clock: fix clear bit fields issue in _clk_ccgr_disable function
        mxc/tzic: add base address when accessing TZIC registers
        ARM: mach-shmobile: ap4evb: fix write protect for SDHI1
        ARM: mach-shmobile: ap4evb: modify FSI2 ID
        ARM: mach-shmobile: do not enable the PLLC2 clock on init
        ARM: mach-shmobile: Clock framework comment fix
        ...
      152831be
  2. 09 Sep, 2010 7 commits
  3. 08 Sep, 2010 30 commits