1. 12 1月, 2008 9 次提交
    • O
      [SCSI] libiscsi, iscsi_tcp: iscsi pool cleanup · 6320377f
      Olaf Kirch 提交于
      iscsi_pool_init simplified
      
      iscsi_pool_init currently has a lot of duplicate kfree() calls it does
      when some allocation fails. This patch simplifies the code a little by
      using iscsi_pool_free to tear down the pool in case of an error.
      
      iscsi_pool_init also returns a copy of the item array to the caller.
      Not all callers use this array, so we make it optional.
      
      Instead of allocating a second array and return that, allocate just one
      array, of twice the size.
      
      Update users of iscsi_pool_{init,free}
      
      This patch drops the (now useless) second argument to
      iscsi_pool_free, and updates all callers.
      
      It also removes the ctask->r2ts array, which was never
      used anyway. Since the items argument to iscsi_pool_init
      is now optional, we can pass NULL instead.
      Signed-off-by: NOlaf Kirch <olaf.kirch@oracle.com>
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      6320377f
    • B
      [SCSI] iscsi_tcp, libiscsi: initial AHS Support · 004d6530
      Boaz Harrosh 提交于
        at libiscsi generic code
        - currently code assumes a storage space of pdu header is allocated
          at llds ctask and is pointed to by iscsi_cmd_task->hdr. Here I add
          a hdr_max field pertaining to that storage, and an hdr_len that
          accumulates the current use of the pdu-header.
      
        - Add an iscsi_next_hdr() inline which returns the next free space
          to write new Header at. Also iscsi_next_hdr() is used to retrieve
          the address at which to write the header-digest.
      
        - Add iscsi_add_hdr(length). What the user do is calls iscsi_next_hdr()
          for address of the new header, than calls iscsi_add_hdr(length) with
          the size of the new header. iscsi_add_hdr() will check if space is
          available and update to the new size. length must be padded according
          to standard.
      
        - Add 2 padding inline helpers thanks to Olaf. Current patch does not
          use them but Following patches will.
          Also moved definition of ISCSI_PAD_LEN to iscsi_proto.h which had
          PAD_WORD_LEN that was never used anywhere.
      
        - Let iscsi_prep_scsi_cmd_pdu() signal an Error return since now  it is
          possible that it will fail.
      
        - I was tired of yet again writing a "this is a digest" comment next to
          sizeof(__u32) so I defined a new ISCSI_DIGEST_SIZE. Now I don't need
          any comments. Changed all places that used sizeof(__u32) or "4" in
          connection to a digest.
      
        iscsi_tcp specific code
        - At struct iscsi_tcp_cmd_task allocate maximum space allowed in
          standard for all headers following the iscsi_cmd header. and mark
          it so in iscsi_tcp_session_create()
        - At iscsi_send_cmd_hdr() retrieve the correct headers size and
          write header digest at iscsi_next_hdr().
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NOlaf Kirch <olaf.kirch@oracle.com>
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      004d6530
    • O
      [SCSI] iscsi_tcp: rewrite recv path · da32dd68
      Olaf Kirch 提交于
      Rewrite recv path. Fixes:
      - data digest processing and error handling.
      - ahs support.
      
      Some fixups by Mike Christie
      Signed-off-by: NOlaf Kirch <olaf.kirch@oracle.com>
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      da32dd68
    • M
      [SCSI] libiscsi, iscsi_tcp: add device support · 843c0a8a
      Mike Christie 提交于
      This patch adds logical unit reset support. This should work for ib_iser,
      but I have not finished testing that driver so it is not hooked in yet.
      
      This patch also temporarily reverts the iscsi_tcp r2t write out patch.
      That code is completely rewritten in this patchset.
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      843c0a8a
    • J
      [SCSI] sd,sr: add early detection of medium not present · 001aac25
      James Bottomley 提交于
      The current scsi_test_unit_ready() is updated to return sense code
      information (in struct scsi_sense_hdr).  The sd and sr drivers are
      changed to interpret the sense code return asc 0x3a as no media and
      adjust the device status accordingly.
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      001aac25
    • T
      [SCSI] move single_lun flag from scsi_device to scsi_target · 25d7c363
      Tony Battersby 提交于
      Some SCSI tape medium changers that need the BLIST_SINGLELUN flag have
      the medium changer at one LUN and the tape drive at a different LUN.
      The inquiry string of the tape drive may be different from that of the
      medium changer.  In order for single_lun to be effective, every
      scsi_device under a given scsi_target must have it set.  This means that
      there needs to be a blacklist entry for BOTH the medium changer AND the
      tape drive, which is impractical because some medium changers may be
      paired with a variety of different tape drive models.  It makes more
      sense to put the single_lun flag in scsi_target instead of scsi_device,
      which causes every device at a given target ID to inherit the single_lun
      flag from one LUN.  This makes it possible to blacklist just the medium
      changer and not the tape drive.
      Signed-off-by: NTony Battersby <tonyb@cybernetics.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      25d7c363
    • D
      [SCSI] libsas: Fix various sparse complaints · 8ee24023
      Darrick J. Wong 提交于
      Annotate sas_queuecommand with locking details, and clean up a few
      more sparse warnings about static/non-static declarations.
      Signed-off-by: NDarrick J. Wong <djwong@us.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      8ee24023
    • D
      [SCSI] libsas: Convert sas_proto users to sas_protocol · 5929faf3
      Darrick J. Wong 提交于
      sparse complains about the mixing of enums in libsas.  Since the
      underlying numeric values of both enums are the same, combine them
      to get rid of the warning.
      Signed-off-by: NDarrick J. Wong <djwong@us.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      5929faf3
    • K
      [SCSI] sr,sd: send media state change modification events · 285e9670
      Kay Sievers 提交于
      This will send for a card reader slot (remove/add media):
        UEVENT[1187091572.155884] change   /devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/host7/target7:0:0/7:0:0:0 (scsi)
        UEVENT[1187091572.162314] remove   /block/sdb/sdb1 (block)
        UEVENT[1187091572.172464] add      /block/sdb/sdb1 (block)
        UEVENT[1187091572.175408] change   /devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/host7/target7:0:0/7:0:0:0 (scsi)
      
      and for a DVD drive (add/eject media):
        UEVENT[1187091590.189159] change   /devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0 (scsi)
        UEVENT[1187091590.957124] add      /module/isofs (module)
        UEVENT[1187091604.468207] change   /devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0 (scsi)
      
      Userspace gets events, even for unpartitioned media. This unifies
      the event handling for asynchronoous events (AN) and events caused by
      perodical polling the device from userspace.
      Signed-off-by: NKay Sievers <kay.sievers@vrfy.org>
      
      [jejb: modified for new event API]
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      285e9670
  2. 11 1月, 2008 2 次提交
  3. 09 1月, 2008 8 次提交
  4. 07 1月, 2008 3 次提交
    • C
      sh: Fix argument page dcache flushing regression. · 844b43ad
      Carmelo Amoroso 提交于
      In the do_execve() path, argument page handling used to explicitly call
      flush_dcache_page() for each page, this has since been reworked and
      uses flush_kernel_dcache_page() instead, which is presently a nop.
      
      Doing a simple modprobe/rmmod in a loop under busybox consistently
      manages to crash without providing a sane flush_kernel_dcache_page()
      implementation, so, plug in a simple implementation.
      Signed-off-by: NCarmelo Amoroso <carmelo73@gmail.com>
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      844b43ad
    • I
      CPU hotplug: fix cpu_is_offline() on !CONFIG_HOTPLUG_CPU · a263898f
      Ingo Molnar 提交于
      make randconfig bootup testing found that the cpufreq code
      crashes on bootup, if the powernow-k8 driver is enabled and
      if maxcpus=1 passed on the boot line to a !CONFIG_HOTPLUG_CPU
      kernel.
      
      First lockdep found out that there's an inconsistent unlock
      sequence:
      
       =====================================
       [ BUG: bad unlock balance detected! ]
       -------------------------------------
       swapper/1 is trying to release lock (&per_cpu(cpu_policy_rwsem, cpu)) at:
       [<ffffffff806ffd8e>] unlock_policy_rwsem_write+0x3c/0x42
       but there are no more locks to release!
      
      Call Trace:
       [<ffffffff806ffd8e>] unlock_policy_rwsem_write+0x3c/0x42
       [<ffffffff80251c29>] print_unlock_inbalance_bug+0x104/0x12c
       [<ffffffff80252f3a>] mark_held_locks+0x56/0x94
       [<ffffffff806ffd8e>] unlock_policy_rwsem_write+0x3c/0x42
       [<ffffffff807008b6>] cpufreq_add_dev+0x2a8/0x5c4
       ...
      
      then shortly afterwards the cpufreq code crashed on an assert:
      
       ------------[ cut here ]------------
       kernel BUG at drivers/cpufreq/cpufreq.c:1068!
       invalid opcode: 0000 [1] SMP
       [...]
       Call Trace:
        [<ffffffff805145d6>] sysdev_driver_unregister+0x5b/0x91
        [<ffffffff806ff520>] cpufreq_register_driver+0x15d/0x1a2
        [<ffffffff80cc0596>] powernowk8_init+0x86/0x94
       [...]
       ---[ end trace 1e9219be2b4431de ]---
      
      the bug was caused by maxcpus=1 bootup, which brought up the
      secondary core as !cpu_online() but !cpu_is_offline() either,
      which on on !CONFIG_HOTPLUG_CPU is always 0 (include/linux/cpu.h):
      
        /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */
        static inline int cpu_is_offline(int cpu) { return 0; }
      
      but the cpufreq code uses cpu_online() and cpu_is_offline() in
      a mixed way - the low-level drivers use cpu_online(), while
      the cpufreq core uses cpu_is_offline(). This opened up the
      possibility to add the non-initialized sysdev device of the
      secondary core:
      
       cpufreq-core: trying to register driver powernow-k8
       cpufreq-core: adding CPU 0
       powernow-k8: BIOS error - no PSB or ACPI _PSS objects
       cpufreq-core: initialization failed
       cpufreq-core: adding CPU 1
       cpufreq-core: initialization failed
      
      which then blew up. The fix is to make cpu_is_offline() always
      the negation of cpu_online(). With that fix applied the kernel
      boots up fine without crashing:
      
       Calling initcall 0xffffffff80cc0510: powernowk8_init+0x0/0x94()
       powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ processors (1 cpu cores) (version 2.20.00)
       powernow-k8: BIOS error - no PSB or ACPI _PSS objects
       initcall 0xffffffff80cc0510: powernowk8_init+0x0/0x94() returned -19.
       initcall 0xffffffff80cc0510 ran for 19 msecs: powernowk8_init+0x0/0x94()
       Calling initcall 0xffffffff80cc328f: init_lapic_nmi_sysfs+0x0/0x39()
      
      We could fix this by making CPU enumeration aware of max_cpus, but that
      would be more fragile IMO, and the cpu_online(cpu) != cpu_is_offline(cpu)
      possibility was quite confusing and a continuous source of bugs too.
      
      Most distributions have kernels with CPU hotplug enabled, so this bug
      remained hidden for a long time.
      
      Bug forensics:
      
      The broken cpu_is_offline() API variant was introduced via:
      
       commit a59d2e4e6977e7b94e003c96a41f07e96cddc340
       Author: Rusty Russell <rusty@rustcorp.com.au>
       Date:   Mon Mar 8 06:06:03 2004 -0800
      
           [PATCH] minor cleanups for hotplug CPUs
      
      ( this predates linux-2.6.git, this commit is available from Thomas's
        historic git tree. )
      
      Then 1.5 years later the cpufreq code made use of it:
      
       commit c32b6b8e
       Author: Ashok Raj <ashok.raj@intel.com>
       Date:   Sun Oct 30 14:59:54 2005 -0800
      
           [PATCH] create and destroy cpufreq sysfs entries based on cpu notifiers
      
       +       if (cpu_is_offline(cpu))
       +               return 0;
      
      which is a correct use of the subtly broken new API. v2.6.15 then
      shipped with this bug included.
      
      then it took two more years for random-kernel qa to hit it.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a263898f
    • L
      Revert "scsi: revert "[SCSI] Get rid of scsi_cmnd->done"" · 7b3d9545
      Linus Torvalds 提交于
      This reverts commit ac40532e, which gets
      us back the original cleanup of 6f5391c2.
      
      It turns out that the bug that was triggered by that commit was
      apparently not actually triggered by that commit at all, and just the
      testing conditions had changed enough to make it appear to be due to it.
      
      The real problem seems to have been found by Peter Osterlund:
      
        "pktcdvd sets it [block device size] when opening the /dev/pktcdvd
         device, but when the drive is later opened as /dev/scd0, there is
         nothing that sets it back.  (Btw, 40944 is possible if the disk is a
         CDRW that was formatted with "cdrwtool -m 10236".)
      
         The problem is that pktcdvd opens the cd device in non-blocking mode
         when pktsetup is run, and doesn't close it again until pktsetup -d is
         run.  The effect is that if you meanwhile open the cd device,
         blkdev.c:do_open() doesn't call bd_set_size() because
         bdev->bd_openers is non-zero."
      
      In particular, to repeat the bug (regardless of whether commit
      6f5391c2 is applied or not):
      
        " 1. Start with an empty drive.
          2. pktsetup 0 /dev/scd0
          3. Insert a CD containing an isofs filesystem.
          4. mount /dev/pktcdvd/0 /mnt/tmp
          5. umount /mnt/tmp
          6. Press the eject button.
          7. Insert a DVD containing a non-writable filesystem.
          8. mount /dev/scd0 /mnt/tmp
          9. find /mnt/tmp -type f -print0 | xargs -0 sha1sum >/dev/null
          10. If the DVD contains data beyond the physical size of a CD, you
              get I/O errors in the terminal, and dmesg reports lots of
              "attempt to access beyond end of device" errors."
      
      which in turn is because the nested open after the media change won't
      cause the size to be set properly (because the original open still holds
      the block device, and we only do the bd_set_size() when we don't have
      other people holding the device open).
      
      The proper fix for that is probably to just do something like
      
      	bdev->bd_inode->i_size = (loff_t)get_capacity(disk)<<9;
      
      in fs/block_dev.c:do_open() even for the cases where we're not the
      original opener (but *not* call bd_set_size(), since that will also
      change the block size of the device).
      
      Cc: Peter Osterlund <petero2@telia.com>
      Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
      Cc: Matthew Wilcox <matthew@wil.cx>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7b3d9545
  5. 04 1月, 2008 1 次提交
  6. 03 1月, 2008 3 次提交
  7. 02 1月, 2008 3 次提交
  8. 28 12月, 2007 1 次提交
  9. 27 12月, 2007 5 次提交
  10. 24 12月, 2007 1 次提交
  11. 21 12月, 2007 2 次提交
  12. 20 12月, 2007 2 次提交