1. 20 7月, 2012 3 次提交
  2. 27 8月, 2011 1 次提交
  3. 02 6月, 2011 1 次提交
    • J
      [SCSI] Fix oops caused by queue refcounting failure · e73e079b
      James Bottomley 提交于
      In certain circumstances, we can get an oops from a torn down device.
      Most notably this is from CD roms trying to call scsi_ioctl.  The root
      cause of the problem is the fact that after scsi_remove_device() has
      been called, the queue is fully torn down.  This is actually wrong
      since the queue can be used until the sdev release function is called.
      Therefore, we add an extra reference to the queue which is released in
      sdev->release, so the queue always exists.
      Reported-by: NParag Warudkar <parag.lkml@gmail.com>
      Cc: stable@kernel.org
      Signed-off-by: NJames Bottomley <jbottomley@parallels.com>
      e73e079b
  4. 25 4月, 2011 1 次提交
    • J
      [SCSI] put stricter guards on queue dead checks · 86cbfb56
      James Bottomley 提交于
      SCSI uses request_queue->queuedata == NULL as a signal that the queue
      is dying.  We set this state in the sdev release function.  However,
      this allows a small window where we release the last reference but
      haven't quite got to this stage yet and so something will try to take
      a reference in scsi_request_fn and oops.  It's very rare, but we had a
      report here, so we're pushing this as a bug fix
      
      The actual fix is to set request_queue->queuedata to NULL in
      scsi_remove_device() before we drop the reference.  This causes
      correct automatic rejects from scsi_request_fn as people who hold
      additional references try to submit work and prevents anything from
      getting a new reference to the sdev that way.
      
      Cc: stable@kernel.org
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      86cbfb56
  5. 15 3月, 2011 1 次提交
  6. 04 1月, 2011 1 次提交
  7. 26 11月, 2010 1 次提交
  8. 26 10月, 2010 1 次提交
    • C
      [SCSI] Fix race when removing SCSI devices · 546ae796
      Christof Schmitt 提交于
      Removing SCSI devices through
      echo 1 > /sys/bus/scsi/devices/ ... /delete
      
      while the FC transport class removes the SCSI target can lead to an
      oops:
      
      Unable to handle kernel pointer dereference at virtual kernel address 00000000b6815000
      Oops: 0011 [#1] PREEMPT SMP DEBUG_PAGEALLOC
      Modules linked in: sunrpc qeth_l3 binfmt_misc dm_multipath scsi_dh dm_mod ipv6 qeth ccwgroup [last unloaded: scsi_wait_scan]
      CPU: 1 Not tainted 2.6.35.5-45.x.20100924-s390xdefault #1
      Process fc_wq_0 (pid: 861, task: 00000000b7331240, ksp: 00000000b735bac0)
      Krnl PSW : 0704200180000000 00000000003ff6e4 (__scsi_remove_device+0x24/0xd0)
                 R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:2 PM:0 EA:3
      Krnl GPRS: 0000000000000001 0000000000000000 00000000b6815000 00000000bc24a8c0
                 00000000003ff7c8 000000000056dbb8 0000000000000002 0000000000835d80
                 ffffffff00000000 0000000000001000 00000000b6815000 00000000bc24a7f0
                 00000000b68151a0 00000000b6815000 00000000b735bc20 00000000b735bbf8
      Krnl Code: 00000000003ff6d6: a7840001            brc 8,3ff6d8
                 00000000003ff6da: a7fbffd8            aghi %r15,-40
                 00000000003ff6de: e3e0f0980024        stg %r14,152(%r15)
                >00000000003ff6e4: e31021200004        lg %r1,288(%r2)
                 00000000003ff6ea: a71f0000            cghi    %r1,0
                 00000000003ff6ee: a7a40011            brc 10,3ff710
                 00000000003ff6f2: a7390003            lghi    %r3,3
                 00000000003ff6f6: c0e5ffffc8b1        brasl %r14,3f8858
      Call Trace:
      ([<0000000000001000>] 0x1000)
       [<00000000003ff7d2>] scsi_remove_device+0x42/0x54
       [<00000000003ff8ba>] __scsi_remove_target+0xca/0xfc
       [<00000000003ff99a>] __remove_child+0x3a/0x48
       [<00000000003e3246>] device_for_each_child+0x72/0xbc
       [<00000000003ff93a>] scsi_remove_target+0x4e/0x74
       [<0000000000406586>] fc_rport_final_delete+0xb2/0x23c
       [<000000000015d080>] worker_thread+0x200/0x344
       [<000000000016330c>] kthread+0xa0/0xa8
       [<0000000000106c1a>] kernel_thread_starter+0x6/0xc
       [<0000000000106c14>] kernel_thread_starter+0x0/0xc
      INFO: lockdep is turned off.
      Last Breaking-Event-Address:
       [<00000000003ff7cc>] scsi_remove_device+0x3c/0x54
      
      The function __scsi_remove_target iterates through the SCSI devices on
      the host, but it drops the host_lock before calling
      scsi_remove_device. When the SCSI device is deleted from another
      thread, the pointer to the SCSI device in scsi_remove_device can
      become invalid. Fix this by getting a reference to the SCSI device
      before dropping the host_lock to keep the SCSI device alive for the
      call to scsi_remove_device.
      Signed-off-by: NChristof Schmitt <christof.schmitt@de.ibm.com>
      Cc: Stable Tree <stable@kernel.org>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      546ae796
  9. 11 9月, 2010 1 次提交
  10. 07 8月, 2010 1 次提交
  11. 06 8月, 2010 1 次提交
  12. 28 7月, 2010 2 次提交
    • A
      [SCSI] implement runtime Power Management · bc4f2401
      Alan Stern 提交于
      This patch (as1398b) adds runtime PM support to the SCSI layer.  Only
      the machanism is provided; use of it is up to the various high-level
      drivers, and the patch doesn't change any of them.  Except for sg --
      the patch expicitly prevents a device from being runtime-suspended
      while its sg device file is open.
      
      The implementation is simplistic.  In general, hosts and targets are
      automatically suspended when all their children are asleep, but for
      them the runtime-suspend code doesn't actually do anything.  (A host's
      runtime PM status is propagated up the device tree, though, so a
      runtime-PM-aware lower-level driver could power down the host adapter
      hardware at the appropriate times.)  There are comments indicating
      where a transport class might be notified or some other hooks added.
      
      LUNs are runtime-suspended by calling the drivers' existing suspend
      handlers (and likewise for runtime-resume).  Somewhat arbitrarily, the
      implementation delays for 100 ms before suspending an eligible LUN.
      This is because there typically are occasions during bootup when the
      same device file is opened and closed several times in quick
      succession.
      
      The way this all works is that the SCSI core increments a device's
      PM-usage count when it is registered.  If a high-level driver does
      nothing then the device will not be eligible for runtime-suspend
      because of the elevated usage count.  If a high-level driver wants to
      use runtime PM then it can call scsi_autopm_put_device() in its probe
      routine to decrement the usage count and scsi_autopm_get_device() in
      its remove routine to restore the original count.
      
      Hosts, targets, and LUNs are not suspended while they are being probed
      or removed, or while the error handler is running.  In fact, a fairly
      large part of the patch consists of code to make sure that things
      aren't suspended at such times.
      
      [jejb: fix up compile issues in PM config variations]
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      bc4f2401
    • A
      [SCSI] convert to the new PM framework · db5bd1e0
      Alan Stern 提交于
      This patch (as1397b) converts the SCSI midlayer to use the new PM
      callbacks (struct dev_pm_ops).  A new source file, scsi_pm.c, is
      created to hold the new callback routines, and the existing
      suspend/resume code is moved there.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      db5bd1e0
  13. 02 5月, 2010 1 次提交
  14. 11 4月, 2010 1 次提交
  15. 30 3月, 2010 1 次提交
    • T
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo 提交于
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Guess-its-ok-by: NChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  16. 27 2月, 2010 1 次提交
    • R
      PM: Allow SCSI devices to suspend/resume asynchronously · 4cb077d9
      Rafael J. Wysocki 提交于
      Set power.async_suspend for all SCSI devices, targets and hosts, so
      that they can be suspended and resumed in parallel with the main
      suspend/resume thread and possibly with other devices they don't
      depend on in a known way (i.e. devices which are not their parents or
      children).
      
      The power.async_suspend flag is also set for devices that don't have
      suspend or resume callbacks, because otherwise they would make the
      main suspend/resume thread wait for their "asynchronous" children
      (during suspend) or parents (during resume), effectively negating the
      possible gains from executing these devices' suspend and resume
      callbacks asynchronously.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      4cb077d9
  17. 19 2月, 2010 1 次提交
  18. 05 12月, 2009 2 次提交
    • V
      [SCSI] add queue_depth ramp up code · 4a84067d
      Vasu Dev 提交于
      Current FC HBA queue_depth ramp up code depends on last queue
      full time. The sdev already  has last_queue_full_time field to
      track last queue full time but stored value is truncated by
      last four bits.
      
      So this patch updates last_queue_full_time without truncating
      last 4 bits to store full value and then updates its only
      current usages in scsi_track_queue_full to ignore last four bits
      to keep current usages same while also use this field
      in added ramp up code.
      
      Adds scsi_handle_queue_ramp_up to ramp up queue_depth on
      successful completion of IO. The scsi_handle_queue_ramp_up will
      do ramp up on all luns of a target, just same as ramp down done
      on all luns on a target.
      
      The ramp up is skipped in case the change_queue_depth is not
      supported by LLD or already reached to added max_queue_depth.
      
      Updates added max_queue_depth on every new update to default
      queue_depth value.
      
      The ramp up is also skipped if lapsed time since either last
      queue ramp up or down is less than LLD specified
      queue_ramp_up_period.
      
      Adds queue_ramp_up_period to sysfs but only if change_queue_depth
      is supported since ramp up and queue_ramp_up_period is needed only
      in case change_queue_depth is supported first.
      
      Initializes queue_ramp_up_period to 120HZ jiffies as initial
      default value, it is same as used in existing lpfc and qla2xxx.
      
      -v2
       Combined all ramp code into this single patch.
      
      -v3
       Moves max_queue_depth initialization after slave_configure is
      called from after slave_alloc calling done. Also adjusted
      max_queue_depth check to skip ramp up if current queue_depth
      is >= max_queue_depth.
      
      -v4
       Changes sdev->queue_ramp_up_period unit to ms when using sysfs i/f
      to store or show its value.
      Signed-off-by: NVasu Dev <vasu.dev@intel.com>
      Tested-by: NChristof Schmitt <christof.schmitt@de.ibm.com>
      Tested-by: NGiridhar Malavali <giridhar.malavali@qlogic.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      4a84067d
    • M
      [SCSI] modify change_queue_depth to take in reason why it is being called · e881a172
      Mike Christie 提交于
      This patch modifies scsi_host_template->change_queue_depth so that
      it takes an argument indicating why it is being called. This will be
      used so that if a LLD needs to do some extra processing when
      handling queue fulls or later ramp ups, it can do so.
      
      This is a simple port of the drivers setting a change_queue_depth
      callback. In the patch I just have these LLDs adjust the queue depth
      if the user was requesting it.
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      
      [Vasu.Dev: v2
      	Also converted pmcraid_change_queue_depth and then verified
      all modules compile  using "make allmodconfig" for any new build
      warnings on X86_64.
      
      	Updated original description after combing two original
      patches from Mike to make this patch git bisectable.]
      Signed-off-by: NVasu Dev <vasu.dev@intel.com>
      [jejb: fixed up 53c700]
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      e881a172
  19. 26 11月, 2009 1 次提交
    • J
      [SCSI] fix async scan add/remove race resulting in an oops · 860dc736
      James Bottomley 提交于
      Async scanning introduced a very wide window where the SCSI device is
      up and running but has not yet been added to sysfs.  We delay the
      adding until all scans have completed to retain the same ordering as
      sync scanning.
      
      This delay in visibility causes an oops if a device is removed before
      we make it visible because the SCSI removal routines have an inbuilt
      assumption that if a device is in SDEV_RUNNING state, it must be
      visible (which is not necessarily true in the async scanning case).
      
      Fix this by introducing an additional is_visible flag which we can use
      to condition the tear down so we do the right thing for running but
      not yet made visible.
      Reported-by: NAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      860dc736
  20. 14 10月, 2009 1 次提交
    • J
      [SCSI] fix memory leak in initialization · 37e6ba00
      James Bottomley 提交于
      The root cause of the problem is the fact that dev_set_name() now
      allocates storage instead of using the original array within the kobj.
      That means that the SCSI assumption that if you haven't made the
      containing object or any sub objects visible, you can just destroy it
      (and its component devices) lock stock and barrel becomes false.
      
      Fix this by doing the get of sdev_dev at parent time and thus do an
      extra put of it in scsi_destroy_sdev() (and all other destruction
      without add paths).
      Reported-by: NTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      37e6ba00
  21. 16 9月, 2009 1 次提交
  22. 22 6月, 2009 1 次提交
  23. 13 3月, 2009 1 次提交
  24. 03 1月, 2009 1 次提交
  25. 09 10月, 2008 1 次提交
  26. 04 10月, 2008 1 次提交
  27. 27 7月, 2008 1 次提交
  28. 05 6月, 2008 1 次提交
  29. 24 5月, 2008 1 次提交
    • J
      [SCSI] fix intermittent oops in scsi_bus_uevent · 1f42ea7b
      James Bottomley 提交于
      Reported-by: NSitsofe Wheeler <sitsofe@yahoo.com>
      > BUG: unable to handle kernel paging request at e6f17fac
      > IP: [<c02604d6>] scsi_bus_uevent+0x1/0x17
      > *pde = 2714b163 *pte = 26f17160
      > Oops: 0000 [#1] DEBUG_PAGEALLOC
      > last sysfs file:
      >
      > Pid:  1, comm: swapper Not tainted (2.6.26-rc2-next-20080516skw #30)
      > EIP: 0060:[<c02604d6>] EFLAGS: 00010282 CPU: 0
      > EIP is at scsi_bus_uevent+0x1/0x17
      > EAX: e6f18014 EBX: e6f18014 ECX: c02604d5 EDX: e7173000
      > ESI: e7173000 EDI: e7173000 EBP: e7851ca0 ESP: e7851c90
      >  DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
      
      The problem is caused by:
      
      commit b0ed4336
      Author: Hannes Reinecke <hare@suse.de>
      Date:   Tue Mar 18 14:32:28 2008 +0100
      
          [SCSI] add scsi_host and scsi_target to scsi_bus
      
      which added scsi_bus_type to the struct scsi_target device.  This
      causes both the scsi_device and scsi_target to fire scsi_bus_uevents.
      However, the actualy scsi_bus_uevent() call assumes blindly that it's
      a struct scsi_device.  Check for this and return immediately if it
      isn't.
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      1f42ea7b
  30. 23 4月, 2008 4 次提交
  31. 20 4月, 2008 1 次提交
  32. 27 3月, 2008 1 次提交
  33. 14 3月, 2008 1 次提交