12 Nov, 2014

5 commits

  • The calling conventions for this function are bad as it could return
    -ENODEV both for a device not currently online and a not recognized ioctl.

    Add a new scsi_ioctl_block_when_processing_errors function that wraps
    scsi_block_when_processing_errors with the a special case for the
    SG_SCSI_RESET ioctl command, and handle the SG_SCSI_RESET case itself
    in scsi_ioctl. All callers of scsi_ioctl now must call the above helper
    to check for the EH state, so that the ioctl handler itself doesn't
    have to.

    Reported-by: Robert Elliott
    Signed-off-by: Christoph Hellwig
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Hannes Reinecke

    Christoph Hellwig
     
  • Pull the common code from the two callers into the function,
    and rename it to scsi_ioctl_reset.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Hannes Reinecke

    Christoph Hellwig
     
  • We should be using the standard dev_printk() variants for
    sense code printing.

    [hch: remove __scsi_print_sense call in xen-scsiback, Acked by Juergen]
    [hch: folded bracing fix from Dan Carpenter]
    Signed-off-by: Hannes Reinecke
    Reviewed-by: Robert Elliott
    Signed-off-by: Christoph Hellwig

    Hannes Reinecke
     
  • Like scmd_printk(), but the device name is passed in as
    a string. Can be used by eg ULDs which do not have access
    to the scsi_cmnd structure.

    Signed-off-by: Hannes Reinecke
    Reviewed-by: Robert Elliott
    Signed-off-by: Christoph Hellwig

    Hannes Reinecke
     
  • Further to a January 2013 thread titled: "[PATCH] SG_SCSI_RESET ioctl
    should only perform requested operation" by Jeremy Linton a patch (v3)
    is presented that expands the existing ioctl to include "no_escalate"
    versions to the existing resets. This requires no changes to SCSI low
    level drivers (LLDs); it adds several more finely tuned reset options
    to the user space. For example:

    /* This call remains the same, with the same escalating semantics
    * if the device (LU) reset fail. That is: on failure to try a
    * target reset and if that fails, try a bus reset, and if that fails
    * try a host (i.e. LLD) reset. */
    val = SG_SCSI_RESET_DEVICE;
    res = ioctl(, SG_SCSI_RESET, &val);

    /* What follows is a new option introduced by this patch series. Only
    * a device reset is attempted. If that fails then an appropriate
    * error code is provided. N.B. There is no reset escalation. */
    val = SG_SCSI_RESET_DEVICE | SG_SCSI_RESET_NO_ESCALATE;
    res = ioctl(, SG_SCSI_RESET, &val);

    Signed-off-by: Douglas Gilbert
    Reviewed-by: Jeremy Linton
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Christoph Hellwig

    Douglas Gilbert
     

29 Aug, 2014

1 commit

  • The blk_get_request function may fail in low-memory conditions or during
    device removal (even if __GFP_WAIT is set). To distinguish between these
    errors, modify the blk_get_request call stack to return the appropriate
    ERR_PTR. Verify that all callers check the return status and consider
    IS_ERR instead of a simple NULL pointer check.

    For consistency, make a similar change to the blk_mq_alloc_request leg
    of blk_get_request. It may fail if the queue is dead, or the caller was
    unwilling to wait.

    Signed-off-by: Joe Lawrence
    Acked-by: Jiri Kosina [for pktdvd]
    Acked-by: Boaz Harrosh [for osd]
    Reviewed-by: Jeff Moyer
    Signed-off-by: Jens Axboe

    Joe Lawrence
     

25 Jul, 2014

1 commit

  • Avoid taking the queue_lock to check the per-device queue limit. Instead
    we do an atomic_inc_return early on to grab our slot in the queue,
    and if necessary decrement it after finishing all checks.

    Unlike the host and target busy counters this doesn't allow us to avoid the
    queue_lock in the request_fn due to the way the interface works, but it'll
    allow us to prepare for using the blk-mq code, which doesn't use the
    queue_lock at all, and it at least avoids a queue_lock round trip in
    scsi_device_unbusy, which is still important given how busy the queue_lock
    is.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Webb Scales
    Acked-by: Jens Axboe
    Tested-by: Bart Van Assche
    Tested-by: Robert Elliott

    Christoph Hellwig
     

18 Jul, 2014

6 commits

  • Update the sg driver to use dev_printk() variants instead of
    plain printk(); this will prefix logging messages with the
    appropriate device.

    Signed-off-by: Hannes Reinecke
    Acked-by: Doug Gilbert
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Christoph Hellwig

    Hannes Reinecke
     
  • The SCSI standard defines 64-bit values for LUNs, and large arrays
    employing large or hierarchical LUN numbers become more and more
    common.

    So update the linux SCSI stack to use 64-bit LUN numbers.

    Signed-off-by: Hannes Reinecke
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Ewan Milne
    Signed-off-by: Christoph Hellwig

    Hannes Reinecke
     
  • This addresses a problem reported by Vaughan Cao concerning
    the correctness of the O_EXCL logic in the sg driver. POSIX
    doesn't defined O_EXCL semantics on devices but "allow only
    one open file descriptor at a time per sg device" is a rough
    definition. The sg driver's semantics have been to wait
    on an open() when O_NONBLOCK is not given and there are
    O_EXCL headwinds. Nasty things can happen during that wait
    such as the device being detached (removed). So multiple
    locks are reworked in this patch making it large and hard
    to break down into digestible bits.

    This patch is against Linus's current git repository which
    doesn't include any sg patches sent in the last few weeks.
    Hence this patch touches as little as possible that it
    doesn't need to and strips out most SCSI_LOG_TIMEOUT()
    changes in v3 because Hannes said he was going to rework all
    that stuff.

    The sg3_utils package has several test programs written to
    test this patch. See examples/sg_tst_excl*.cpp .

    Not all the locks and flags in sg have been re-worked in
    this patch, notably sg_request::done . That can wait for
    a follow-up patch if this one meets with approval.

    Signed-off-by: Douglas Gilbert
    Reviewed-by: Hannes Reinecke

    Douglas Gilbert
     
  • When the SG_IO ioctl was copied into the block layer and
    later into the bsg driver, subtle differences emerged.

    One difference is the way injected commands are queued through
    the block layer (i.e. this is not SCSI device queueing nor SATA
    NCQ). Summarizing:
    - SG_IO in the block layer: blk_exec*(at_head=false)
    - sg SG_IO: at_head=true
    - bsg SG_IO: at_head=true

    Some time ago Boaz Harrosh introduced a sg v4 flag called
    BSG_FLAG_Q_AT_TAIL to override the bsg driver default.
    This patch does the equivalent for the sg driver.

    ChangeLog:
    Introduce SG_FLAG_Q_AT_TAIL flag to cause commands
    to be injected into the block layer with
    at_head=false.

    Signed-off-by: Douglas Gilbert
    Reviewed-by: Mike Christie
    Reviewed-by: Ewan D. Milne
    Signed-off-by: Christoph Hellwig

    Douglas Gilbert
     
  • - remove the 16 byte CDB (SCSI command) length limit from the sg driver
    by handling longer CDBs the same way as the bsg driver. Remove comment
    from sg.h public interface about the cmd_len field being limited to 16
    bytes.
    - remove some dead code caused by this change
    - cleanup comment block at the top of sg.h, fix urls

    Signed-off-by: Douglas Gilbert
    Reviewed-by: Mike Christie
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Christoph Hellwig

    Douglas Gilbert
     
  • This prevents integer overflow when converting the request queue's
    max_sectors from sectors to bytes. However, this is a preparation for
    extending the data type of max_sectors in struct Scsi_Host and
    scsi_host_template. So, it is impossible to happen this integer
    overflow for now, because SCSI low-level drivers can not specify
    max_sectors greater than 0xffff due to the data type limitation.

    Signed-off-by: Akinobu Mita
    Acked by: Douglas Gilbert
    Signed-off-by: Christoph Hellwig

    Akinobu Mita
     

06 Jun, 2014

1 commit

  • With the optimizations around not clearing the full request at alloc
    time, we are leaving some of the needed init for REQ_TYPE_BLOCK_PC
    up to the user allocating the request.

    Add a blk_rq_set_block_pc() that sets the command type to
    REQ_TYPE_BLOCK_PC, and properly initializes the members associated
    with this type of request. Update callers to use this function instead
    of manipulating rq->cmd_type directly.

    Includes fixes from Christoph Hellwig for my half-assed
    attempt.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

25 Oct, 2013

4 commits

  • This reverts commit 15b06f9a02406e5460001db6d5af5c738cd3d4e7.

    This is one of four patches that was causing this bug

    [ 205.372823] ================================================
    [ 205.372901] [ BUG: lock held when returning to user space! ]
    [ 205.372979] 3.12.0-rc6-hw-debug-pagealloc+ #67 Not tainted
    [ 205.373055] ------------------------------------------------
    [ 205.373132] megarc.bin/5283 is leaving the kernel with locks still held!
    [ 205.373212] 1 lock held by megarc.bin/5283:
    [ 205.373285] #0: (&sdp->o_sem){.+.+..}, at: [] sg_open+0x3a0/0x4d0

    Cc: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    James Bottomley
     
  • This reverts commit 00b2d9d6d05b56fc1d77071ff8ccbd2c65b48dec.

    This is one of four patches that was causing this bug

    [ 205.372823] ================================================
    [ 205.372901] [ BUG: lock held when returning to user space! ]
    [ 205.372979] 3.12.0-rc6-hw-debug-pagealloc+ #67 Not tainted
    [ 205.373055] ------------------------------------------------
    [ 205.373132] megarc.bin/5283 is leaving the kernel with locks still held!
    [ 205.373212] 1 lock held by megarc.bin/5283:
    [ 205.373285] #0: (&sdp->o_sem){.+.+..}, at: [] sg_open+0x3a0/0x4d0

    Cc: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    James Bottomley
     
  • This reverts commit e32c9e6300e3af659cbfe45e90a1e7dcd3572ada.

    This is one of four patches that was causing this bug

    [ 205.372823] ================================================
    [ 205.372901] [ BUG: lock held when returning to user space! ]
    [ 205.372979] 3.12.0-rc6-hw-debug-pagealloc+ #67 Not tainted
    [ 205.373055] ------------------------------------------------
    [ 205.373132] megarc.bin/5283 is leaving the kernel with locks still held!
    [ 205.373212] 1 lock held by megarc.bin/5283:
    [ 205.373285] #0: (&sdp->o_sem){.+.+..}, at: [] sg_open+0x3a0/0x4d0

    Cc: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    James Bottomley
     
  • This reverts commit 1f962ebcdfa15cede59e9edb299d1330949eec92.

    This is one of four patches that was causing this bug

    [ 205.372823] ================================================
    [ 205.372901] [ BUG: lock held when returning to user space! ]
    [ 205.372979] 3.12.0-rc6-hw-debug-pagealloc+ #67 Not tainted
    [ 205.373055] ------------------------------------------------
    [ 205.373132] megarc.bin/5283 is leaving the kernel with locks still held!
    [ 205.373212] 1 lock held by megarc.bin/5283:
    [ 205.373285] #0: (&sdp->o_sem){.+.+..}, at: [] sg_open+0x3a0/0x4d0

    Cc: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    James Bottomley
     

03 Sep, 2013

4 commits

  • Push file descriptor list locking down to per-device locking. Let sg_index_lock
    only protect device lookup.
    sdp->detached is also set and checked with this lock held.

    Signed-off-by: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Vaughan Cao
     
  • @detached is set under the protection of sg_index_lock. Without getting the
    lock, new sfp will be added during sg removal and there is no chance for it
    to be picked out. So check with sg_index_lock held in sg_add_sfp().

    Signed-off-by: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Vaughan Cao
     
  • Open exclusive check is protected by o_sem, no need sg_open_exclusive_lock.
    @exclude is used to record which type of rwsem we are holding.

    Signed-off-by: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Vaughan Cao
     
  • A race condition may happen if two threads are both trying to open the same sg
    with O_EXCL simultaneously. It's possible that they both find fsds list is
    empty and get_exclude(sdp) returns 0, then they both call set_exclude() and
    break out from wait_event_interruptible and resume open.

    Now use rwsem to protect this process. Exclusive open gets write lock and
    others get read lock. The lock will be held until file descriptor is closed.
    This also leads 'exclude' only a status rather than a check mark.

    Signed-off-by: Vaughan Cao
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Vaughan Cao
     

08 May, 2013

1 commit

  • Faster kernel compiles by way of fewer unnecessary includes.

    [akpm@linux-foundation.org: fix fallout]
    [akpm@linux-foundation.org: fix build]
    Signed-off-by: Kent Overstreet
    Cc: Zach Brown
    Cc: Felipe Balbi
    Cc: Greg Kroah-Hartman
    Cc: Mark Fasheh
    Cc: Joel Becker
    Cc: Rusty Russell
    Cc: Jens Axboe
    Cc: Asai Thambi S P
    Cc: Selvan Mani
    Cc: Sam Bradshaw
    Cc: Jeff Moyer
    Cc: Al Viro
    Cc: Benjamin LaHaise
    Reviewed-by: "Theodore Ts'o"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kent Overstreet
     

28 Feb, 2013

1 commit


09 Oct, 2012

1 commit

  • A long time ago, in v2.4, VM_RESERVED kept swapout process off VMA,
    currently it lost original meaning but still has some effects:

    | effect | alternative flags
    -+------------------------+---------------------------------------------
    1| account as reserved_vm | VM_IO
    2| skip in core dump | VM_IO, VM_DONTDUMP
    3| do not merge or expand | VM_IO, VM_DONTEXPAND, VM_HUGETLB, VM_PFNMAP
    4| do not mlock | VM_IO, VM_DONTEXPAND, VM_HUGETLB, VM_PFNMAP

    This patch removes reserved_vm counter from mm_struct. Seems like nobody
    cares about it, it does not exported into userspace directly, it only
    reduces total_vm showed in proc.

    Thus VM_RESERVED can be replaced with VM_IO or pair VM_DONTEXPAND | VM_DONTDUMP.

    remap_pfn_range() and io_remap_pfn_range() set VM_IO|VM_DONTEXPAND|VM_DONTDUMP.
    remap_vmalloc_range() set VM_DONTEXPAND | VM_DONTDUMP.

    [akpm@linux-foundation.org: drivers/vfio/pci/vfio_pci.c fixup]
    Signed-off-by: Konstantin Khlebnikov
    Cc: Alexander Viro
    Cc: Carsten Otte
    Cc: Chris Metcalf
    Cc: Cyrill Gorcunov
    Cc: Eric Paris
    Cc: H. Peter Anvin
    Cc: Hugh Dickins
    Cc: Ingo Molnar
    Cc: James Morris
    Cc: Jason Baron
    Cc: Kentaro Takeda
    Cc: Matt Helsley
    Cc: Nick Piggin
    Cc: Oleg Nesterov
    Cc: Peter Zijlstra
    Cc: Robert Richter
    Cc: Suresh Siddha
    Cc: Tetsuo Handa
    Cc: Venkatesh Pallipadi
    Acked-by: Linus Torvalds
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Konstantin Khlebnikov
     

17 May, 2012

9 commits

  • Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • With the exception of the detached field, sg_mutex no longer adds any
    locking. detached handling has been broken before and is still broken
    and this patch does not seem to make things worse than they were to
    begin with.

    However, I have observed cases of tasks being blocked for >200s waiting
    for sg_mutex. So the removal clearly adds value for very little cost.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • sfds is protected by sg_index_lock - except for sg_open(), where it
    isn't. Change that and add some documentation.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • Changes since v1: set_exclude now returns the new value, which gets
    rid of the comma expression and the operator precedence bug. Thanks
    to Douglas for spotting it.

    sdp->exclude was previously protected by the BKL. The sg_mutex, which
    replaced the BKL, only semi-protected it, as it was missing from
    sg_release() and sg_proc_seq_show_debug(). Take an explicit spinlock
    for it.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • srp->done is protected by sfp->rq_list_lock everywhere, except for this
    one case. Result can be that the wake-up happens before the cacheline
    with the changed srp->done has arrived, so the waiter can go back to
    sleep and never be woken up again.

    The wait_event_interruptible() means that anyone trying to debug this
    unlikely race will likely notice everything working fine again, as the
    next signal will unwedge things. Evil.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • After sg_release() has been called, noone should be able to actually use
    that filedescriptor anymore. So if closed ever made a difference in the
    past five years or so, it would have meant a bug. Remove it.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    [jejb: fix up checkpatch warnings]
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • Afaics the use of __wait_event_interruptible() as opposed to
    wait_event_interruptible() is purely historic. So let's follow the rest
    of the kernel and check the condition before prepare_to_wait() - and
    also make the code a bit nicer.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • The while (1) construct isn't actually a loop at all. So let's not
    pretent and obfuscate the code.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     
  • blocking is de-facto a constant and the now-removed comment wasn't all
    that useful either. Without them and the resulting indentation the code
    is a bit nicer to read.

    Signed-off-by: Joern Engel
    Acked-by: Douglas Gilbert
    Signed-off-by: James Bottomley

    Jörn Engel
     

16 Jan, 2012

1 commit


04 Jan, 2012

1 commit


15 Sep, 2011

1 commit


25 Oct, 2010

1 commit

  • * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)
    Update broken web addresses in arch directory.
    Update broken web addresses in the kernel.
    Revert "drivers/usb: Remove unnecessary return's from void functions" for musb gadget
    Revert "Fix typo: configuation => configuration" partially
    ida: document IDA_BITMAP_LONGS calculation
    ext2: fix a typo on comment in ext2/inode.c
    drivers/scsi: Remove unnecessary casts of private_data
    drivers/s390: Remove unnecessary casts of private_data
    net/sunrpc/rpc_pipe.c: Remove unnecessary casts of private_data
    drivers/infiniband: Remove unnecessary casts of private_data
    drivers/gpu/drm: Remove unnecessary casts of private_data
    kernel/pm_qos_params.c: Remove unnecessary casts of private_data
    fs/ecryptfs: Remove unnecessary casts of private_data
    fs/seq_file.c: Remove unnecessary casts of private_data
    arm: uengine.c: remove C99 comments
    arm: scoop.c: remove C99 comments
    Fix typo configue => configure in comments
    Fix typo: configuation => configuration
    Fix typo interrest[ing|ed] => interest[ing|ed]
    Fix various typos of valid in comments
    ...

    Fix up trivial conflicts in:
    drivers/char/ipmi/ipmi_si_intf.c
    drivers/usb/gadget/rndis.c
    net/irda/irnet/irnet_ppp.c

    Linus Torvalds
     

23 Oct, 2010

2 commits

  • * 'for-2.6.37/core' of git://git.kernel.dk/linux-2.6-block: (39 commits)
    cfq-iosched: Fix a gcc 4.5 warning and put some comments
    block: Turn bvec_k{un,}map_irq() into static inline functions
    block: fix accounting bug on cross partition merges
    block: Make the integrity mapped property a bio flag
    block: Fix double free in blk_integrity_unregister
    block: Ensure physical block size is unsigned int
    blkio-throttle: Fix possible multiplication overflow in iops calculations
    blkio-throttle: limit max iops value to UINT_MAX
    blkio-throttle: There is no need to convert jiffies to milli seconds
    blkio-throttle: Fix link failure failure on i386
    blkio: Recalculate the throttled bio dispatch time upon throttle limit change
    blkio: Add root group to td->tg_list
    blkio: deletion of a cgroup was causes oops
    blkio: Do not export throttle files if CONFIG_BLK_DEV_THROTTLING=n
    block: set the bounce_pfn to the actual DMA limit rather than to max memory
    block: revert bad fix for memory hotplug causing bounces
    Fix compile error in blk-exec.c for !CONFIG_DETECT_HUNG_TASK
    block: set the bounce_pfn to the actual DMA limit rather than to max memory
    block: Prevent hang_check firing during long I/O
    cfq: improve fsync performance for small files
    ...

    Fix up trivial conflicts due to __rcu sparse annotation in include/linux/genhd.h

    Linus Torvalds
     
  • * 'llseek' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:
    vfs: make no_llseek the default
    vfs: don't use BKL in default_llseek
    llseek: automatically add .llseek fop
    libfs: use generic_file_llseek for simple_attr
    mac80211: disallow seeks in minstrel debug code
    lirc: make chardev nonseekable
    viotape: use noop_llseek
    raw: use explicit llseek file operations
    ibmasmfs: use generic_file_llseek
    spufs: use llseek in all file operations
    arm/omap: use generic_file_llseek in iommu_debug
    lkdtm: use generic_file_llseek in debugfs
    net/wireless: use generic_file_llseek in debugfs
    drm: use noop_llseek

    Linus Torvalds