1. 20 7月, 2012 2 次提交
  2. 19 2月, 2012 1 次提交
  3. 11 11月, 2011 1 次提交
  4. 20 10月, 2011 1 次提交
    • D
      [SCSI] aacraid: use lower snprintf() limit · dc55b827
      Dan Carpenter 提交于
      This is just a cleanup, to silence static checker warnings.  It
      doesn't change how the code works.
      
      buf[] can either be BUF_SIZE if this is called from sysfs, or it can
      be 16 if it's called from aac_get_adapter_info() via
      aac_get_serial_number().  We use the smaller limit here.
      
      sizeof(dev->supplement_adapter_info.MfgPcbaSerialNo) is 12 so there
      is actually no chance of hitting either limit.
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Acked-by: Achim Leubner <Achim_Leubner@pmc-sierra.com> 
      Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
      dc55b827
  5. 19 4月, 2011 1 次提交
    • M
      aacraid: Drop __TIME__ usage · 571b16da
      Michal Marek 提交于
      The kernel already prints its build timestamp during boot, no need to
      repeat it in random drivers and produce different object files each
      time.
      
      Cc: Adaptec OEM Raid Solutions <aacraid@adaptec.com>
      Cc: linux-scsi@vger.kernel.org
      Signed-off-by: NMichal Marek <mmarek@suse.cz>
      571b16da
  6. 24 3月, 2011 1 次提交
    • M
      [SCSI] aacraid: Add new code for PMC-Sierra's SRC based controller family · e8b12f0f
      Mahesh Rajashekhara 提交于
      Added new hardware device 0x28b interface for PMC-Sierra's SRC based
      controller family.
      
      - new src.c file for 0x28b specific functions
      - new XPORT header required
      - sync. command interface: doorbell bits shifted (SRC_ODR_SHIFT, SRC_IDR_SHIFT)
      - async. Interface: different inbound queue handling, no outbound I2O
        queue available, using doorbell ("PmDoorBellResponseSent") and
        response buffer on the host ("host_rrq") for status
      - changed AIF (adapter initiated FIBs) interface: "DoorBellAifPending"
        bit to inform about pending AIF, "AifRequest" command to read AIF,
        "NoMoreAifDataAvailable" to mark the end of the AIFs
      Signed-off-by: NMahesh Rajashekhara <aacraid@pmc-sierra.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      e8b12f0f
  7. 17 11月, 2010 1 次提交
    • J
      SCSI host lock push-down · f281233d
      Jeff Garzik 提交于
      Move the mid-layer's ->queuecommand() invocation from being locked
      with the host lock to being unlocked to facilitate speeding up the
      critical path for drivers who don't need this lock taken anyway.
      
      The patch below presents a simple SCSI host lock push-down as an
      equivalent transformation.  No locking or other behavior should change
      with this patch.  All existing bugs and locking orders are preserved.
      
      Additionally, add one parameter to queuecommand,
      	struct Scsi_Host *
      and remove one parameter from queuecommand,
      	void (*done)(struct scsi_cmnd *)
      
      Scsi_Host* is a convenient pointer that most host drivers need anyway,
      and 'done' is redundant to struct scsi_cmnd->scsi_done.
      
      Minimal code disturbance was attempted with this change.  Most drivers
      needed only two one-line modifications for their host lock push-down.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      Acked-by: NJames Bottomley <James.Bottomley@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f281233d
  8. 15 10月, 2010 1 次提交
    • A
      llseek: automatically add .llseek fop · 6038f373
      Arnd Bergmann 提交于
      All file_operations should get a .llseek operation so we can make
      nonseekable_open the default for future file operations without a
      .llseek pointer.
      
      The three cases that we can automatically detect are no_llseek, seq_lseek
      and default_llseek. For cases where we can we can automatically prove that
      the file offset is always ignored, we use noop_llseek, which maintains
      the current behavior of not returning an error from a seek.
      
      New drivers should normally not use noop_llseek but instead use no_llseek
      and call nonseekable_open at open time.  Existing drivers can be converted
      to do the same when the maintainer knows for certain that no user code
      relies on calling seek on the device file.
      
      The generated code is often incorrectly indented and right now contains
      comments that clarify for each added line why a specific variant was
      chosen. In the version that gets submitted upstream, the comments will
      be gone and I will manually fix the indentation, because there does not
      seem to be a way to do that using coccinelle.
      
      Some amount of new code is currently sitting in linux-next that should get
      the same modifications, which I will do at the end of the merge window.
      
      Many thanks to Julia Lawall for helping me learn to write a semantic
      patch that does all this.
      
      ===== begin semantic patch =====
      // This adds an llseek= method to all file operations,
      // as a preparation for making no_llseek the default.
      //
      // The rules are
      // - use no_llseek explicitly if we do nonseekable_open
      // - use seq_lseek for sequential files
      // - use default_llseek if we know we access f_pos
      // - use noop_llseek if we know we don't access f_pos,
      //   but we still want to allow users to call lseek
      //
      @ open1 exists @
      identifier nested_open;
      @@
      nested_open(...)
      {
      <+...
      nonseekable_open(...)
      ...+>
      }
      
      @ open exists@
      identifier open_f;
      identifier i, f;
      identifier open1.nested_open;
      @@
      int open_f(struct inode *i, struct file *f)
      {
      <+...
      (
      nonseekable_open(...)
      |
      nested_open(...)
      )
      ...+>
      }
      
      @ read disable optional_qualifier exists @
      identifier read_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      expression E;
      identifier func;
      @@
      ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
      {
      <+...
      (
         *off = E
      |
         *off += E
      |
         func(..., off, ...)
      |
         E = *off
      )
      ...+>
      }
      
      @ read_no_fpos disable optional_qualifier exists @
      identifier read_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      @@
      ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
      {
      ... when != off
      }
      
      @ write @
      identifier write_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      expression E;
      identifier func;
      @@
      ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
      {
      <+...
      (
        *off = E
      |
        *off += E
      |
        func(..., off, ...)
      |
        E = *off
      )
      ...+>
      }
      
      @ write_no_fpos @
      identifier write_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      @@
      ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
      {
      ... when != off
      }
      
      @ fops0 @
      identifier fops;
      @@
      struct file_operations fops = {
       ...
      };
      
      @ has_llseek depends on fops0 @
      identifier fops0.fops;
      identifier llseek_f;
      @@
      struct file_operations fops = {
      ...
       .llseek = llseek_f,
      ...
      };
      
      @ has_read depends on fops0 @
      identifier fops0.fops;
      identifier read_f;
      @@
      struct file_operations fops = {
      ...
       .read = read_f,
      ...
      };
      
      @ has_write depends on fops0 @
      identifier fops0.fops;
      identifier write_f;
      @@
      struct file_operations fops = {
      ...
       .write = write_f,
      ...
      };
      
      @ has_open depends on fops0 @
      identifier fops0.fops;
      identifier open_f;
      @@
      struct file_operations fops = {
      ...
       .open = open_f,
      ...
      };
      
      // use no_llseek if we call nonseekable_open
      ////////////////////////////////////////////
      @ nonseekable1 depends on !has_llseek && has_open @
      identifier fops0.fops;
      identifier nso ~= "nonseekable_open";
      @@
      struct file_operations fops = {
      ...  .open = nso, ...
      +.llseek = no_llseek, /* nonseekable */
      };
      
      @ nonseekable2 depends on !has_llseek @
      identifier fops0.fops;
      identifier open.open_f;
      @@
      struct file_operations fops = {
      ...  .open = open_f, ...
      +.llseek = no_llseek, /* open uses nonseekable */
      };
      
      // use seq_lseek for sequential files
      /////////////////////////////////////
      @ seq depends on !has_llseek @
      identifier fops0.fops;
      identifier sr ~= "seq_read";
      @@
      struct file_operations fops = {
      ...  .read = sr, ...
      +.llseek = seq_lseek, /* we have seq_read */
      };
      
      // use default_llseek if there is a readdir
      ///////////////////////////////////////////
      @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier readdir_e;
      @@
      // any other fop is used that changes pos
      struct file_operations fops = {
      ... .readdir = readdir_e, ...
      +.llseek = default_llseek, /* readdir is present */
      };
      
      // use default_llseek if at least one of read/write touches f_pos
      /////////////////////////////////////////////////////////////////
      @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier read.read_f;
      @@
      // read fops use offset
      struct file_operations fops = {
      ... .read = read_f, ...
      +.llseek = default_llseek, /* read accesses f_pos */
      };
      
      @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier write.write_f;
      @@
      // write fops use offset
      struct file_operations fops = {
      ... .write = write_f, ...
      +	.llseek = default_llseek, /* write accesses f_pos */
      };
      
      // Use noop_llseek if neither read nor write accesses f_pos
      ///////////////////////////////////////////////////////////
      
      @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier read_no_fpos.read_f;
      identifier write_no_fpos.write_f;
      @@
      // write fops use offset
      struct file_operations fops = {
      ...
       .write = write_f,
       .read = read_f,
      ...
      +.llseek = noop_llseek, /* read and write both use no f_pos */
      };
      
      @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier write_no_fpos.write_f;
      @@
      struct file_operations fops = {
      ... .write = write_f, ...
      +.llseek = noop_llseek, /* write uses no f_pos */
      };
      
      @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier read_no_fpos.read_f;
      @@
      struct file_operations fops = {
      ... .read = read_f, ...
      +.llseek = noop_llseek, /* read uses no f_pos */
      };
      
      @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      @@
      struct file_operations fops = {
      ...
      +.llseek = noop_llseek, /* no read or write fn */
      };
      ===== End semantic patch =====
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Julia Lawall <julia@diku.dk>
      Cc: Christoph Hellwig <hch@infradead.org>
      6038f373
  9. 23 9月, 2010 1 次提交
  10. 16 9月, 2010 1 次提交
    • A
      scsi: autoconvert trivial BKL users to private mutex · c45d15d2
      Arnd Bergmann 提交于
      All these files use the big kernel lock in a trivial
      way to serialize their private file operations,
      typically resulting from an earlier semi-automatic
      pushdown from VFS.
      
      None of these drivers appears to want to lock against
      other code, and they all use the BKL as the top-level
      lock in their file operations, meaning that there
      is no lock-order inversion problem.
      
      Consequently, we can remove the BKL completely,
      replacing it with a per-file mutex in every case.
      Using a scripted approach means we can avoid
      typos.
      
      file=$1
      name=$2
      if grep -q lock_kernel ${file} ; then
          if grep -q 'include.*linux.mutex.h' ${file} ; then
                  sed -i '/include.*<linux\/smp_lock.h>/d' ${file}
          else
                  sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file}
          fi
          sed -i ${file} \
              -e "/^#include.*linux.mutex.h/,$ {
                      1,/^\(static\|int\|long\)/ {
                           /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);
      
      } }"  \
          -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
          -e '/[      ]*cycle_kernel_lock();/d'
      else
          sed -i -e '/include.*\<smp_lock.h\>/d' ${file}  \
                      -e '/cycle_kernel_lock()/d'
      fi
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: linux-scsi@vger.kernel.org
      Cc: "James E.J. Bottomley" <James.Bottomley@suse.de>
      c45d15d2
  11. 28 7月, 2010 1 次提交
  12. 17 5月, 2010 1 次提交
  13. 05 12月, 2009 1 次提交
    • 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
  14. 07 4月, 2009 2 次提交
  15. 03 4月, 2009 1 次提交
  16. 30 12月, 2008 1 次提交
  17. 03 12月, 2008 1 次提交
  18. 02 12月, 2008 1 次提交
  19. 21 6月, 2008 1 次提交
  20. 05 6月, 2008 1 次提交
  21. 03 5月, 2008 2 次提交
  22. 20 4月, 2008 1 次提交
  23. 19 4月, 2008 1 次提交
  24. 12 2月, 2008 3 次提交
  25. 08 2月, 2008 1 次提交
  26. 06 2月, 2008 1 次提交
  27. 31 1月, 2008 1 次提交
    • J
      [SCSI] remove use_sg_chaining · d3f46f39
      James Bottomley 提交于
      With the sg table code, every SCSI driver is now either chain capable
      or broken (or has sg_tablesize set so chaining is never activated), so
      there's no need to have a check in the host template.
      
      Also tidy up the code by moving the scatterlist size defines into the
      SCSI includes and permit the last entry of the scatterlist pools not
      to be a power of two.
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      d3f46f39
  28. 24 1月, 2008 8 次提交
    • S
      [SCSI] aacraid: add Voodoo Lite class of cards. · cb1042f2
      Salyzyn, Mark 提交于
      The cards being added are supported in a limited sense already through
      family matching, but we needed to add some functionality to the driver
      to expose selectively the physical drives. These Physical drives are
      specifically marked to not be part of any array and thus are declared
      JBODs (Just a Bunch Of Drives) for generic SCSI access.
      
      We report that this is the second patch in a set of two, but merely
      depends on the stand-alone functionality of the first patch which adds
      in that case the ability to report a driver feature flag via sysfs. We
      leverage that functionality by reporting that this driver now supports
      this new JBOD feature for the controller so that the array management
      applications may react accordingly and guide the user as they manage
      the controller.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      cb1042f2
    • S
      [SCSI] aacraid: add new driver features flags · 2ca39c48
      Salyzyn, Mark 提交于
      Feature enhancement, adding a 'flags' entry that will reside in the
      host controller's tree, with a newline separated list of arbitrary
      ascii named features that indicate whether the combination of driver
      and controller has support for said feature. Breaking from the
      one-line output typical of sysfs entries, newline was added to tailor
      for grep, or simple gets line by line string match within an
      application. I added one for a compiler time check for existence of
      debug print output, one for an optional manifest defined enhanced
      status reporting in the logs, and one for runtime reporting whether
      the controller and driver supports arrays larger than 2TB. Adaptec's
      storage management software uses the last flag to determine whether to
      make available the creation of arrays larger than 2TB, otherwise a
      warning is posted.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      2ca39c48
    • S
      [SCSI] aacraid: remove pigs in space · 8ce3eca4
      Salyzyn, Mark 提交于
      I was amazed at how much embedded space was present in the aacraid
      driver source files. Just selected five files from the set to clean up
      for now and the attached patch swelled to 73K in size!
      
      - Removed trailing space or tabs
      - Removed spaces embedded within tabs
      - Replaced leading 8 spaces with tabs
      - Removed spaces before )
      - Removed ClusterCommand as it was unused (noticed it as one triggered by above)
      - Replaced scsi_status comparison with 0x02, to compare against SAM_STATUS_CHECK_CONDITION.
      - Replaced a long series of spaces with tabs
      - Replaced some simple if...defined() with ifdef/ifndef
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      8ce3eca4
    • A
      [SCSI] aacraid: fix security weakness · d496f94d
      Alan Cox 提交于
      Actually there are several but one is trivially fixed
      
      1.	FSACTL_GET_NEXT_ADAPTER_FIB ioctl does not lock dev->fib_list
      but needs to
      2.	Ditto for FSACTL_CLOSE_GET_ADAPTER_FIB
      3.	It is possible to construct an attack via the SRB ioctls where
      the user obtains assorted elevated privileges. Various approaches are
      possible, the trivial ones being things like writing to the raw media
      via scsi commands and the swap image of other executing programs with
      higher privileges.
      
      So the ioctls should be CAP_SYS_RAWIO - at least all the FIB manipulating
      ones. This is a bandaid fix for #3 but probably the ioctls should grow
      their own capable checks. The other two bugs need someone competent in that
      driver to fix them.
      Signed-off-by: NAlan Cox <alan@redhat.com>
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      d496f94d
    • S
      [SCSI] aacraid: improve queue balancing · b18268fc
      Salyzyn, Mark 提交于
      The adapter queue is divided up equally to all the arrays to prevent
      command starvation to any individual array. On the other hand,
      physical targets are only granted a queue depth of one each. The code
      prior to this patch used to deal with the incremental discovery of
      targets, but the driver knows how many arrays are present prior to the
      scan so this knowledge is used to generate a better estimate for the
      queue depth.
      
      Remove the capability of 'physical=0' from preventing access to the
      class of adapters that have the RAID/SCSI mode of operation since none
      of the physicals on the SCSI channel are candidates ever for an array.
      
      As always, the user can override this default queue depth policy by
      making the appropriate adjustments utilizing sysfs.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      b18268fc
    • S
      [SCSI] aacraid: OS panic after Adapter panic (hardening). · b6ef70f3
      Salyzyn, Mark 提交于
      In experiments in the lab we managed to trigger an Adapter firmware
      panic (BlinkLED) coincidentally while several pass-through ioctl
      command from the management software were outstanding on a bug only
      present on a class of RAID Adapters that require a hardware reset
      rather than a commanded reset. The net result was an attempt to time
      out the management software command as if it came from the SCSI layer
      resulting in an OS panic.
      
      Adapters that use commanded reset, management commands are returned
      failed by the Adapter correctly. The adapter firmware panic that
      resulted in this condition was also resolved, and there were no
      adapters in the field with this specific firmware bug so we do not
      expect any field reports. This is a rare or unlikely corner condition,
      and no reports have ever been forwarded from the field.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      b6ef70f3
    • S
      [SCSI] aacraid: fix big endian issues · a3940da5
      Salyzyn, Mark 提交于
      Big endian systems issues discovered in the aacraid driver. Somewhat
      reverses a patch from November 7th of last year that removed swap
      operations because they formerly were being assigned to an u8 array
      when they should have been assigned to an le32 array.
      
      This patch is largely inert for any little endian processor
      architecture. It resolves a bug in delivering the BlinkLED AIF event
      to registered applications when the adapter or associated hardware was
      reset due to ill health. A rare corner case occurrence, also largely
      unnoticed by any as it was a new (untested!) feature.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      a3940da5
    • S
      [SCSI] aacraid: add sysfs report of RAID level · 17eaacee
      Salyzyn, Mark 提交于
      Report the RAID level string for the SCSI device representing the
      array. Report is in /sys/class/scsi_device/#:#:#:#/device/level.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      17eaacee