1. 08 8月, 2007 7 次提交
    • T
      NFS: Replace flush_scheduled_work with cancel_work_sync() and friends · 3d39c691
      Trond Myklebust 提交于
      This will avoid deadlocks of the form:
      
      stack backtrace:
       [<c0104fda>] show_trace_log_lvl+0x1a/0x30
       [<c0105c02>] show_trace+0x12/0x20
       [<c0105d15>] dump_stack+0x15/0x20
       [<c013ee42>] __lock_acquire+0xc22/0x1030
       [<c013f2b1>] lock_acquire+0x61/0x80
       [<c012edd9>] flush_workqueue+0x49/0x70
       [<c012ee0d>] flush_scheduled_work+0xd/0x10
       [<dcf55c0c>] nfs_release_automount_timer+0x2c/0x30 [nfs]
       [<dcf45d8e>] nfs_free_server+0x9e/0xd0 [nfs]
       [<dcf4e626>] nfs_kill_super+0x16/0x20 [nfs]
       [<c017b38d>] deactivate_super+0x7d/0xa0
       [<c018f94b>] mntput_no_expire+0x4b/0x80
       [<c018fd94>] expire_mount_list+0xe4/0x140
       [<c0191219>] mark_mounts_for_expiry+0x99/0xb0
       [<dcf55d1d>] nfs_expire_automounts+0xd/0x40 [nfs]
       [<c012e61b>] run_workqueue+0x12b/0x1e0
       [<c012f05b>] worker_thread+0x9b/0x100
       [<c0131c72>] kthread+0x42/0x70
       [<c0104c0f>] kernel_thread_helper+0x7/0x18
       =======================
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      3d39c691
    • T
      SUNRPC: Don't call gss_delete_sec_context() from an rcu context · a4deb81b
      Trond Myklebust 提交于
      Doing so may not be safe...
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      a4deb81b
    • T
      NFSv4: Don't call put_rpccred() from an rcu callback · 905f8d16
      Trond Myklebust 提交于
      Doing so would require us to introduce bh-safe locks into put_rpccred().
      This patch fixes the lockdep complaint reported by Marc Dietrich:
      
      inconsistent {softirq-on-W} -> {in-softirq-W} usage.
      swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
       (rpc_credcache_lock){-+..}, at: [<c01dc487>]
      _atomic_dec_and_lock+0x17/0x60
      {softirq-on-W} state was registered at:
        [<c013e870>] __lock_acquire+0x650/0x1030
        [<c013f2b1>] lock_acquire+0x61/0x80
        [<c02db9ac>] _spin_lock+0x2c/0x40
        [<c01dc487>] _atomic_dec_and_lock+0x17/0x60
        [<dced55fd>] put_rpccred+0x5d/0x100 [sunrpc]
        [<dced56c1>] rpcauth_unbindcred+0x21/0x60 [sunrpc]
        [<dced3fd4>] a0 [sunrpc]
        [<dcecefe0>] rpc_call_sync+0x30/0x40 [sunrpc]
        [<dcedc73b>] rpcb_register+0xdb/0x180 [sunrpc]
        [<dced65b3>] svc_register+0x93/0x160 [sunrpc]
        [<dced6ebe>] __svc_create+0x1ee/0x220 [sunrpc]
        [<dced7053>] svc_create+0x13/0x20 [sunrpc]
        [<dcf6d722>] nfs_callback_up+0x82/0x120 [nfs]
        [<dcf48f36>] nfs_get_client+0x176/0x390 [nfs]
        [<dcf49181>] nfs4_set_client+0x31/0x190 [nfs]
        [<dcf49983>] nfs4_create_server+0x63/0x3b0 [nfs]
        [<dcf52426>] nfs4_get_sb+0x346/0x5b0 [nfs]
        [<c017b444>] vfs_kern_mount+0x94/0x110
        [<c0190a62>] do_mount+0x1f2/0x7d0
        [<c01910a6>] sys_mount+0x66/0xa0
        [<c0104046>] syscall_call+0x7/0xb
        [<ffffffff>] 0xffffffff
      irq event stamp: 5277830
      hardirqs last  enabled at (5277830): [<c017530a>] kmem_cache_free+0x8a/0xc0
      hardirqs last disabled at (5277829): [<c01752d2>] kmem_cache_free+0x52/0xc0
      softirqs last  enabled at (5277798): [<c0124173>] __do_softirq+0xa3/0xc0
      softirqs last disabled at (5277817): [<c01241d7>] do_softirq+0x47/0x50
      
      other info that might help us debug this:
      no locks held by swapper/0.
      
      stack backtrace:
       [<c0104fda>] show_trace_log_lvl+0x1a/0x30
       [<c0105c02>] show_trace+0x12/0x20
       [<c0105d15>] dump_stack+0x15/0x20
       [<c013ccc3>] print_usage_bug+0x153/0x160
       [<c013d8b9>] mark_lock+0x449/0x620
       [<c013e824>] __lock_acquire+0x604/0x1030
       [<c013f2b1>] lock_acquire+0x61/0x80
       [<c02db9ac>] _spin_lock+0x2c/0x40
       [<c01dc487>] _atomic_dec_and_lock+0x17/0x60
       [<dced55fd>] put_rpccred+0x5d/0x100 [sunrpc]
       [<dcf6bf83>] nfs_free_delegation_callback+0x13/0x20 [nfs]
       [<c012f9ea>] __rcu_process_callbacks+0x6a/0x1c0
       [<c012fb52>] rcu_process_callbacks+0x12/0x30
       [<c0124218>] tasklet_action+0x38/0x80
       [<c0124125>] __do_softirq+0x55/0xc0
       [<c01241d7>] do_softirq+0x47/0x50
       [<c0124605>] irq_exit+0x35/0x40
       [<c0112463>] smp_apic_timer_interrupt+0x43/0x80
       [<c0104a77>] apic_timer_interrupt+0x33/0x38
       [<c02690df>] cpuidle_idle_call+0x6f/0x90
       [<c01023c3>] cpu_idle+0x43/0x70
       [<c02d8c27>] rest_init+0x47/0x50
       [<c03bcb6a>] start_kernel+0x22a/0x2b0
       [<00000000>] 0x0
       =======================
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      905f8d16
    • T
      NFS: Fix NFSv4 open stateid regressions · 45328c35
      Trond Myklebust 提交于
      Do not allow cached open for O_RDONLY or O_WRONLY unless the file has been
      previously opened in these modes.
      
      Also Fix the calculation of the mode in nfs4_close_prepare. We should only
      issue an OPEN_DOWNGRADE if we're sure that we will still be holding the
      correct open modes. This may not be the case if we've been doing delegated
      opens.
      
      Finally, there is no need to adjust the open mode bit flags in
      nfs4_close_done(): that has already been done in nfs4_close_prepare().
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      45328c35
    • T
      NFSv4: Fix a locking regression in nfs4_set_mode_locked() · ba683031
      Trond Myklebust 提交于
      We don't really need to clear &state->inode_states inside
      nfs4_set_mode_locked, and doing so without holding the inode->i_lock would
      in any case be a bug...
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      ba683031
    • T
      NFS: Fix put_nfs_open_context · 5e11934d
      Trond Myklebust 提交于
      We need to grab the inode->i_lock atomically with the last reference put in
      order to remove the open context that is being freed from the
      nfsi->open_files list.
      
      Fix by converting the kref to a standard atomic counter and then using
      atomic_dec_and_lock()...
      
      Thanks to Arnd Bergmann for pointing out the problem.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      5e11934d
    • T
      SUNRPC: Fix a race in rpciod_down() · b247bbf1
      Trond Myklebust 提交于
      The commit 4ada539e lead to the unpleasant
      possibility of an asynchronous rpc_task being required to call
      rpciod_down() when it is complete. This again means that the rpciod
      workqueue may get to call destroy_workqueue on itself -> hang...
      
      Change rpciod_up/rpciod_down to just get/put the module, and then
      create/destroy the workqueues on module load/unload.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      b247bbf1
  2. 07 8月, 2007 9 次提交
  3. 06 8月, 2007 3 次提交
  4. 05 8月, 2007 5 次提交
  5. 04 8月, 2007 16 次提交
    • S
      [SCSI] aacraid: prevent panic on adapter resource failure · 2b053729
      Salyzyn, Mark 提交于
      If the driver fails to allocate the contiguous (DMAable) memory for
      system reasons, we fail to load the instance, but then we try to free
      the <nul> allocation in the cleanup code and we get a panic in
      pci_free_consistent(). This is reported against an older kernel, hope
      this is relevant for latest/greatest.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      2b053729
    • B
      [SCSI] aha152x: use data accessors and !use_sg cleanup · 2338545a
      Boaz Harrosh 提交于
      And finally this is the regular !use_sg cleanup
      and use of data accessors.
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      2338545a
    • B
      [SCSI] aha152x: Fix check_condition code-path · 45333ffa
      Boaz Harrosh 提交于
      check_condition code-path was similar but more
      complicated to Reset. It went like this:
      
        1. extra space was allocated at aha152x_scdata for mirroring
          scsi_cmnd members.
        2. At aha152x_internal_queue() every not check_condition
          (REQUEST_SENSE) command was copied to above members in
          case of error.
        3. At busfree_run() in the DONE_CS phase if a Status of
          SAM_STAT_CHECK_CONDITION was detected. The command was
          re-queued Internally using aha152x_internal_queue(,,check_condition,)
          The old command members are over written with the
          REQUEST_SENSE info.
        4. At busfree_run() in the DONE_CS phase again. If it is a
          check_condition command, info was restored from mirror
          made at first call to aha152x_internal_queue() (see 2)
          and the command is completed.
      
      What I did is:
      
        1. Allocate less space in aha152x_scdata only for the 16-byte
          original command. (which is actually not needed by scsi-ml
          anymore at this stage. But this is to much knowledge of scsi-ml)
        2. If Status == SAM_STAT_CHECK_CONDITION, then like before
           re-queue a REQUEST_SENSE command. But only now save original
           command members. (Less of them)
        3. In aha152x_internal_queue(), just like for Reset, use the
          check_condition hint to set differently the working members.
          execute the command.
        4. At busfree_run() in the DONE_CS phase again. restore needed
           members.
      
      While at it. This patch fixes a BUG. Old code when sending
      a REQUEST_SENSE for a failed command. Would than return with
      cmd->resid == 0 which was the status of the REQUEST_SENSE.
      The failing command resid was lost. And when would resid
      be interesting if not on a failing command?
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      45333ffa
    • B
      [SCSI] aha152x: Clean Reset path · 66acdb03
      Boaz Harrosh 提交于
      What Reset code was doing:  Save command's important/dangerous
      Info on stack. NULL those members from scsi_cmnd.
      Issue a Reset. wait for it to finish than restore members
      and return.
      
      What I do is save or NULL nothing. But use the "resetting"
      hint in aha152x_internal_queue() to NULL out working members
      and leave struct scsi_cmnd alone.
      
      The indent here looks funny but it will change/drop in last
      patch and it is clear this way what changed.
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      66acdb03
    • B
      [SCSI] aha152x: preliminary fixes and some comments · 0ceb4798
      Boaz Harrosh 提交于
        hunk by hunk:
        - CHECK_CONDITION is what happens to cmnd->status >> 1
          or after status_byte() macro. But here it is used
          directly on status which means 0x1 which is an undefined
          bit in the standard. And is a status that will never
          return from a target.
      
        - in busfree_run at the DONE_SC phase we have 3 distinct
          operation:
      	1-if(DONE_SC->SCp.phase & check_condition)
                The REQUEST_SENSE command return.
                - Restore original command
      	  - Than continue to operation 3.
      	2-if(DONE_SC->SCp.Status==SAM_STAT_CHECK_CONDITION)
                A regular command returned with a status.
      	  - Internally re-Q a REQUEST_SENSE.
      	  - Do not do operation 3.
      	3-
      	  - Complete the command and return it to scsi-ml
           So the 0x2 in both these operations (1,2) means the scsi
           check-condition status, hence SAM_STAT_CHECK_CONDITION
      
        - Here the code asks about !(DONE_SC->SCp.Status & not_issued)
          but "not_issued" is an enum belonging to the "phase" member
          and not to the Status returned from target. The reason this
          works is because not_issued==1 and Also CHECK_CONDITION==1
          (remember from hunk 1). So actually the code was asking
          !(DONE_SC->SCp.Status & CHECK_CONDITION). Which means
          "Has the status been read from target yet?"
          Staus is read at status_run(). "not_issued" is
          cleared in seldo_run() which is usually earlier than
          status_run().
      
        So this patch does nothing as far as assembly is concerned
        but it does let the reader understand what is going on.
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      0ceb4798
    • B
      [SCSI] aha152x: use bounce buffer · b1ee0795
      Boaz Harrosh 提交于
      Cause highmem buffers to be bounced to low memory until this
      driver supports highmem addresses.  Otherwise it just oopses
      on NULL buffer addresses.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      b1ee0795
    • B
      [SCSI] aha152x: fix debug mode symbol conflict · 50535df3
      Boaz Harrosh 提交于
      The symbol <debug_locks> conflicts with the rather global one in
      include/linux/locks.h.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      50535df3
    • J
      [SCSI] sd: disentangle barriers in SCSI · 03a5743a
      James Bottomley 提交于
      Our current implementation has a generic set of barrier functions that
      go through the SCSI driver model.  Realistically, this is unnecessary,
      because the only device that can use barriers (sd) can set the flush
      functions up at probe or revalidate time.  This patch pulls the barrier
      functions out of the mid layer and scsi driver model and relocates them
      directly in sd.
      Acked-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      03a5743a
    • M
      [BNX2]: Fix suspend/resume problem. · 6caebb02
      Michael Chan 提交于
      The device would not resume properly if it was shutdown before the system
      was suspended.  In such scenario where the netif_running state is 0,
      bnx2_suspend() would not save the PCI state and so the memory enable bit
      and bus master enable bit would be lost.
      
      We fix this by always saving and restoring the PCI state in
      bnx2_suspend() and bnx2_resume() regardless of netif_running() state.
      
      Update version to 1.6.4.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6caebb02
    • M
      [TG3]: Fix suspend/resume problem. · 3e0c95fd
      Michael Chan 提交于
      Joachim Deguara <joachim.deguara@amd.com> reported that tg3 devices
      would not resume properly if the device was shutdown before the system
      was suspended.  In such scenario where the netif_running state is 0,
      tg3_suspend() would not save the PCI state and so the memory enable bit
      and bus master enable bit would be lost.
      
      We fix this by always saving and restoring the PCI state in
      tg3_suspend() and tg3_resume() regardless of netif_running() state.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3e0c95fd
    • L
      Linux 2.6.23-rc2 · d4ac2477
      Linus Torvalds 提交于
      d4ac2477
    • L
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc · 22da3176
      Linus Torvalds 提交于
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
        [POWERPC] Fixes for the SLB shadow buffer code
        [POWERPC] Fix a compile warning in powermac/feature.c
        [POWERPC] Fix a compile warning in pci_32.c
        [POWERPC] Fix parse_drconf_memory() for 64-bit start addresses
        [POWERPC] Fix num_cpus calculation in smp_call_function_map()
        [POWERPC] ps3: Fix section mismatch in ps3/setup.c
        [POWERPC] spufs: Fix affinity after introduction of node_allowed() calls
        [POWERPC] Fix special PTE code for secondary hash bucket
        [POWERPC] Expand RPN field to 34 bits when using 64k pages
      22da3176
    • A
      fix s2io regression · 3e847423
      Al Viro 提交于
       * wrong argument passed to pci_unmap_single() on failure
         exit paths
       * leak in the same area
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3e847423
    • L
      Merge git://git.infradead.org/~dwmw2/mtd-2.6.23 · c73d8347
      Linus Torvalds 提交于
      * git://git.infradead.org/~dwmw2/mtd-2.6.23:
        [MTD] Makefile fix for mtdsuper
      c73d8347
    • L
      Merge git://git.infradead.org/battery-2.6 · 195be1c2
      Linus Torvalds 提交于
      * git://git.infradead.org/battery-2.6:
        Don't compile the PMU power driver on 64-bit PowerPC
      195be1c2
    • L
      Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23 · 34bac238
      Linus Torvalds 提交于
      * master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23:
        sh: fix defconfigs for sh7751r boards
        sh: fix cf support on r2d boards
        sh: update r2d defconfig
        sh: update snapgear defconfig.
        sh: Fix SH-X3 FPU exception handling.
        sh: Fix pgd mismatch from cached TTB in unhandled fault.
        sh: Don't include fault-nommu on SH-2/SH-2A.
        sh: Fix irqflags tracing for SH-3/4 nommu.
        sh: Fix lockdep debugging oops on SH-3/4.
      34bac238