26 Sep, 2014

5 commits


23 Sep, 2014

17 commits

  • Some ATA drivers need the dma drain size workaround, and thus need to
    call blk_mq_start_request before the S/G mapping.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Signed-off-by: Christoph Hellwig

    Moved blk_mq_rq_timed_out() definition to the private blk-mq.h header.

    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Commit 8cb34819cdd5d(blk-mq: unshared timeout handler) introduces
    blk-mq's own timeout handler, and removes following line:

    blk_queue_rq_timed_out(q, blk_mq_rq_timed_out);

    which then causes blk_add_timer() to bypass adding the timer,
    since blk-mq no longer has q->rq_timed_out_fn defined.

    This patch fixes the problem by bypassing the check for blk-mq,
    so that both request deadlines are still set and the rolling
    timer updated.

    Signed-off-by: Ming Lei
    Signed-off-by: Jens Axboe

    Ming Lei
     
  • It's not uncommon for crash dump kernels to be limited to 128MB or
    something low in that area. This is normally not a problem for
    devices as we don't use that much memory, but for some shared SCSI
    setups with huge queue depths, it can potentially fill most of
    memory with tons of request allocations. blk-mq does scale back
    when it fails to allocate memory, but it scales back just enough
    so that blk-mq succeeds. This could still leave the system with
    not enough memory to make any real progress.

    Check if we are in a kdump environment and limit the hardware
    queues and tag depth.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • This patch removes two unnecessary blk_clear_rq_complete(),
    the REQ_ATOM_COMPLETE flag is cleared inside blk_mq_start_request(),
    so:

    - The blk_clear_rq_complete() in blk_flush_restore_request()
    needn't because the request will be freed later, and clearing
    it here may open a small race window with timeout.

    - The blk_clear_rq_complete() in blk_mq_requeue_request() isn't
    necessary too, even though REQ_ATOM_STARTED is cleared in
    __blk_mq_requeue_request(), in theory it still may cause a small
    race window with timeout since the two clear_bit() may be
    reordered.

    Signed-off-by: Ming Lei
    Signed-off-by: Jens Axboe

    Ming Lei
     
  • Allow blk-mq to pass an argument to the timeout handler to indicate
    if we're timing out a reserved or regular command. For many drivers
    those need to be handled different.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Duplicate the (small) timeout handler in blk-mq so that we can pass
    arguments more easily to the driver timeout handler. This enables
    the next patch.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Don't do a kmalloc from timer to handle timeouts, chances are we could be
    under heavy load or similar and thus just miss out on the timeouts.
    Fortunately it is very easy to just iterate over all in use tags, and doing
    this properly actually cleans up the blk_mq_busy_iter API as well, and
    prepares us for the next patch by passing a reserved argument to the
    iterator.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Now that we've changed the driver API on the submission side use the
    opportunity to fix up the name on the completion side to fit into the
    general scheme.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • When we call blk_mq_start_request from the core blk-mq code before calling into
    ->queue_rq there is a racy window where the timeout handler can hit before we've
    fully set up the driver specific part of the command.

    Move the call to blk_mq_start_request into the driver so the driver can start
    the request only once it is fully set up.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Pass an explicit parameter for the last request in a batch to ->queue_rq
    instead of using a request flag. Besides being a cleaner and non-stateful
    interface this is also required for the next patch, which fixes the blk-mq
    I/O submission code to not start a time too early.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Moving patches from for-linus to 3.18 instead, pull in this changes
    that will go to Linus today.

    Jens Axboe
     
  • When requests are retried due to hw or sw resource shortages,
    we often stop the associated hardware queue. So ensure that we
    restart the queues when running the requeue work, otherwise the
    queue run will be a no-op.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • __blk_mq_alloc_rq_maps() can be invoked multiple times, if we scale
    back the queue depth if we are low on memory. So don't clear
    set->tags when we fail, this is handled directly in
    the parent function, blk_mq_alloc_tag_set().

    Reported-by: Robert Elliott
    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • We should not insert requests into the flush state machine from
    blk_mq_insert_request. All incoming flush requests come through
    blk_{m,s}q_make_request and are handled there, while blk_execute_rq_nowait
    should only be called for BLOCK_PC requests. All other callers
    deal with requests that already went through the flush statemchine
    and shouldn't be reinserted into it.

    Reported-by: Robert Elliott
    Debugged-by: Ming Lei
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • This patch should fix the bug reported in
    https://lkml.org/lkml/2014/9/11/249.

    We have to initialize at least the atomic_flags and the cmd_flags when
    allocating storage for the requests.

    Otherwise blk_mq_timeout_check() might dereference uninitialized
    pointers when racing with the creation of a request.

    Also move the reset of cmd_flags for the initializing code to the point
    where a request is freed. So we will never end up with pending flush
    request indicators that might trigger dereferences of invalid pointers
    in blk_mq_timeout_check().

    Cc: stable@vger.kernel.org
    Signed-off-by: David Hildenbrand
    Reported-by: Paulo De Rezende Pinatti
    Tested-by: Paulo De Rezende Pinatti
    Acked-by: Christian Borntraeger
    Signed-off-by: Jens Axboe

    David Hildenbrand
     
  • When we start the request, we set the deadline and flip the bits
    marking the request as started and non-complete. However, it's
    important that the deadline store is ordered before flipping the
    bits, otherwise we could have a small window where the request is
    marked started but with an invalid deadline. This can confuse the
    timeout handling.

    Suggested-by: Ming Lei
    Signed-off-by: Jens Axboe

    Jens Axboe
     

16 Sep, 2014

7 commits

  • Pull gfs2 fixes from Steven Whitehouse:
    "Here are a number of small fixes for GFS2.

    There is a fix for FIEMAP on large sparse files, a negative dentry
    hashing fix, a fix for flock, and a bug fix relating to d_splice_alias
    usage.

    There are also (patches 1 and 5) a couple of updates which are less
    critical, but small and low risk"

    * tag 'gfs2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes:
    GFS2: fix d_splice_alias() misuses
    GFS2: Don't use MAXQUOTAS value
    GFS2: Hash the negative dentry during inode lookup
    GFS2: Request demote when a "try" flock fails
    GFS2: Change maxlen variables to size_t
    GFS2: fs/gfs2/super.c: replace seq_printf by seq_puts

    Linus Torvalds
     
  • Commit d6bb3e9075bb ("vfs: simplify and shrink stack frame of
    link_path_walk()") introduced build problems with GCC versions older
    than 4.6 due to the initialisation of a member of an anonymous union in
    struct qstr without enclosing braces.

    This hits GCC bug 10676 [1] (which was fixed in GCC 4.6 by [2]), and
    causes the following build error:

    fs/namei.c: In function 'link_path_walk':
    fs/namei.c:1778: error: unknown field 'hash_len' specified in initializer

    This is worked around by adding explicit braces.

    [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10676
    [2] https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=159206

    Fixes: d6bb3e9075bb (vfs: simplify and shrink stack frame of link_path_walk())
    Signed-off-by: James Hogan
    Cc: Linus Torvalds
    Cc: Alexander Viro
    Cc: Geert Uytterhoeven
    Cc: linux-fsdevel@vger.kernel.org
    Cc: linux-metag@vger.kernel.org
    Signed-off-by: Linus Torvalds

    James Hogan
     
  • Pull virtio fixes from Rusty Russell:
    "virtio-rng corner case fixes, with cc:stable.

    Survived a few days in linux-next"

    * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux:
    virtio-rng: skip reading when we start to remove the device
    virtio-rng: fix stuck of hot-unplugging busy device

    Linus Torvalds
     
  • Pull regmap fix from Mark Brown:
    "Fix registers file in debugfs

    Ensure that the mode reported for the registers file in debugfs is
    accurate by marking it as read only when the define to enable writes
    has not been set. This is on the edge of being a bug fix but it's
    debugfs and it makes it much easier for users to spot what's going
    wrong when they forget to enable writeability"

    * tag 'regmap-v3.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
    regmap: Fix debugfs-file 'registers' mode

    Linus Torvalds
     
  • Pull input updates from Dmitry Torokhov:
    "A few quirks for i8042/AT keyboards and a small device tree doc fix
    for Atmel Touchscreens"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: atmel_mxt_ts - fix merge in DT documentation
    Input: i8042 - also set the firmware id for MUXed ports
    Input: i8042 - add nomux quirk for Avatar AVIU-145A6
    Input: i8042 - add Fujitsu U574 to no_timeout dmi table
    Input: atkbd - do not try 'deactivate' keyboard on any LG laptops

    Linus Torvalds
     
  • Cut & paste typo from the line above.

    Reported-by: Ben Hutchings
    Signed-off-by: Tony Luck
    Signed-off-by: Linus Torvalds

    Tony Luck
     
  • Commit 9226b5b440f2 ("vfs: avoid non-forwarding large load after small
    store in path lookup") made link_path_walk() always access the
    "hash_len" field as a single 64-bit entity, in order to avoid mixed size
    accesses to the members.

    However, what I didn't notice was that that effectively means that the
    whole "struct qstr this" is now basically redundant. We already
    explicitly track the "const char *name", and if we just use "u64
    hash_len" instead of "long len", there is nothing else left of the
    "struct qstr".

    We do end up wanting the "struct qstr" if we have a filesystem with a
    "d_hash()" function, but that's a rare case, and we might as well then
    just squirrell away the name and hash_len at that point.

    End result: fewer live variables in the loop, a smaller stack frame, and
    better code generation. And we don't need to pass in pointers variables
    to helper functions any more, because the return value contains all the
    relevant information. So this removes more lines than it adds, and the
    source code is clearer too.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

15 Sep, 2014

9 commits

  • Pull crypto fixes from Herbert Xu:
    "This fixes the newly added drbg generator so that it actually works on
    32-bit machines. Previously the code was only tested on 64-bit and on
    32-bit it overflowed and simply doesn't work"

    * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
    crypto: drbg - remove check for uninitialized DRBG handle
    crypto: drbg - backport "fix maximum value checks on 32 bit systems"

    Linus Torvalds
     
  • Linus Torvalds
     
  • Pull vfs fixes from Al Viro:
    "double iput() on failure exit in lustre, racy removal of spliced
    dentries from ->s_anon in __d_materialise_dentry() plus a bunch of
    assorted RCU pathwalk fixes"

    The RCU pathwalk fixes end up fixing a couple of cases where we
    incorrectly dropped out of RCU walking, due to incorrect initialization
    and testing of the sequence locks in some corner cases. Since dropping
    out of RCU walk mode forces the slow locked accesses, those corner cases
    slowed down quite dramatically.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    be careful with nd->inode in path_init() and follow_dotdot_rcu()
    don't bugger nd->seq on set_root_rcu() from follow_dotdot_rcu()
    fix bogus read_seqretry() checks introduced in b37199e
    move the call of __d_drop(anon) into __d_materialise_unique(dentry, anon)
    [fix] lustre: d_make_root() does iput() on dentry allocation failure

    Linus Torvalds
     
  • The performance regression that Josef Bacik reported in the pathname
    lookup (see commit 99d263d4c5b2 "vfs: fix bad hashing of dentries") made
    me look at performance stability of the dcache code, just to verify that
    the problem was actually fixed. That turned up a few other problems in
    this area.

    There are a few cases where we exit RCU lookup mode and go to the slow
    serializing case when we shouldn't, Al has fixed those and they'll come
    in with the next VFS pull.

    But my performance verification also shows that link_path_walk() turns
    out to have a very unfortunate 32-bit store of the length and hash of
    the name we look up, followed by a 64-bit read of the combined hash_len
    field. That screws up the processor store to load forwarding, causing
    an unnecessary hickup in this critical routine.

    It's caused by the ugly calling convention for the "hash_name()"
    function, and easily fixed by just making hash_name() fill in the whole
    'struct qstr' rather than passing it a pointer to just the hash value.

    With that, the profile for this function looks much smoother.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Pull parisc updates from Helge Deller:
    "The most important patch is a new Light Weigth Syscall (LWS) for 8,
    16, 32 and 64 bit atomic CAS operations which is required in order to
    be able to implement the atomic gcc builtins on our platform.

    Other than that, we wire up the seccomp, getrandom and memfd_create
    syscalls, fixes a minor off-by-one bug and a wrong printk string"

    * 'parisc-3.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
    parisc: Implement new LWS CAS supporting 64 bit operations.
    parisc: Wire up seccomp, getrandom and memfd_create syscalls
    parisc: dino: fix %d confusingly prefixed with 0x in format string
    parisc: sys_hpux: NUL terminator is one past the end

    Linus Torvalds
     
  • in the former we simply check if dentry is still valid after picking
    its ->d_inode; in the latter we fetch ->d_inode in the same places
    where we fetch dentry and its ->d_seq, under the same checks.

    Cc: stable@vger.kernel.org # 2.6.38+
    Signed-off-by: Al Viro

    Al Viro
     
  • return the value instead, and have path_init() do the assignment. Broken by
    "vfs: Fix absolute RCU path walk failures due to uninitialized seq number",
    which was Cc-stable with 2.6.38+ as destination. This one should go where
    it went.

    To avoid dummy value returned in case when root is already set (it would do
    no harm, actually, since the only caller that doesn't ignore the return value
    is guaranteed to have nd->root *not* set, but it's more obvious that way),
    lift the check into callers. And do the same to set_root(), to keep them
    in sync.

    Cc: stable@vger.kernel.org # 2.6.38+
    Signed-off-by: Al Viro

    Al Viro
     
  • Pull ntb driver bugfixes from Jon Mason:
    "NTB driver fixes for queue spread and buffer alignment. Also, update
    to MAINTAINERS to reflect new e-mail address"

    * tag 'ntb-3.17' of git://github.com/jonmason/ntb:
    ntb: Add alignment check to meet hardware requirement
    MAINTAINERS: update NTB info
    NTB: correct the spread of queues over mw's

    Linus Torvalds
     
  • Pull ARM irq chip fixes from Thomas Gleixner:
    "Another pile of ARM specific irq chip fixlets:

    - off by one bugs in the crossbar driver
    - missing annotations
    - a bunch of "make it compile" updates

    I pulled the lot today from Jason, but it has been in -next for at
    least a week"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    irqchip: gic-v3: Declare rdist as __percpu pointer to __iomem pointer
    irqchip: gic: Make gic_default_routable_irq_domain_ops static
    irqchip: exynos-combiner: Fix compilation error on ARM64
    irqchip: crossbar: Off by one bugs in init
    irqchip: gic-v3: Tag all low level accessors __maybe_unused
    irqchip: gic-v3: Only define gic_peek_irq() when building SMP

    Linus Torvalds
     

14 Sep, 2014

2 commits