1. Jun 14, 2018
    • James Smart's avatar
      nvme-fc: change controllers first connect to use reconnect path · 4c984154
      James Smart authored
      
      
      Current code follows the framework that has been in the transports
      from the beginning where initial link-side controller connect occurs
      as part of "creating the controller". Thus that first connect fully
      talks to the controller and obtains values that can then be used in
      for blk-mq setup, etc. It also means that everything about the
      controller is fully know before the "create controller" call returns.
      
      This has several weaknesses:
      - The initial create_ctrl call made by the cli will block for a long
        time as wire transactions are performed synchronously. This delay
        becomes longer if errors occur or connectivity is lost and retries
        need to be performed.
      - Code wise, it means there is a separate connect path for initial
        controller connect vs the (same) steps used in the reconnect path.
      - And as there's separate paths, it means there's separate error
        handling and retry logic. It also plays havoc with the NEW state
        (should transition out of it after successful initial connect) vs
        the RESETTING and CONNECTING (reconnect) states that want to be
        transitioned to on error.
      - As there's separate paths, to recover from errors and disruptions,
        it requires separate recovery/retry paths as well and can severely
        convolute the controller state.
      
      This patch reworks the fc transport to use the same connect paths
      for the initial connection as it uses for reconnect. This makes a
      single path for error recovery and handling.
      
      This patch:
      - Removes the driving of the initial connect and replaces it with
        a state transition to CONNECTING and initiating the reconnect
        thread. A dummy state transition of RESETTING had to be traversed
        as a direct transtion of NEW->CONNECTING is not allowed. Given
        that the controller is "new", the RESETTING transition is a simple
        no-op. Once in the reconnecting thread, the normal behaviors of
        ctrl_loss_tmo (max_retries * connect_delay) and dev_loss_tmo will
        apply before the controller is torn down.
      - Only if the state transitions couldn't be traversed and the
        reconnect thread not scheduled, will the controller be torn down
        while in create_ctrl.
      - The prior code used the controller state of NEW to indicate
        whether request queues had been initialized or not. For the admin
        queue, the request queue is always created, so there's no need to
        check a state. For IO queues, change to tracking whether a successful
        io request queue create has occurred (e.g. 1st successful connect).
      - The initial controller id is initialized to the dynamic controller
        id used in the initial connect message. It will be overwritten by
        the real controller id once the controller is connected on the wire.
      
      Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      4c984154
  2. Jun 13, 2018
  3. Jun 11, 2018
  4. Jun 09, 2018
  5. Jun 08, 2018
  6. Jun 07, 2018
  7. Jun 06, 2018
  8. Jun 05, 2018
  9. Jun 04, 2018
    • Linus Torvalds's avatar
      Merge branch 'work.dcache' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 06c86e66
      Linus Torvalds authored
      Pull dcache updates from Al Viro:
       "This is the first part of dealing with livelocks etc around
        shrink_dcache_parent()."
      
      * 'work.dcache' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
        restore cond_resched() in shrink_dcache_parent()
        dput(): turn into explicit while() loop
        dcache: move cond_resched() into the end of __dentry_kill()
        d_walk(): kill 'finish' callback
        d_invalidate(): unhash immediately
      06c86e66
    • Linus Torvalds's avatar
      Merge tag 'for-4.18/block-20180603' of git://git.kernel.dk/linux-block · f459c345
      Linus Torvalds authored
      Pull block updates from Jens Axboe:
      
       - clean up how we pass around gfp_t and
         blk_mq_req_flags_t (Christoph)
      
       - prepare us to defer scheduler attach (Christoph)
      
       - clean up drivers handling of bounce buffers (Christoph)
      
       - fix timeout handling corner cases (Christoph/Bart/Keith)
      
       - bcache fixes (Coly)
      
       - prep work for bcachefs and some block layer optimizations (Kent).
      
       - convert users of bio_sets to using embedded structs (Kent).
      
       - fixes for the BFQ io scheduler (Paolo/Davide/Filippo)
      
       - lightnvm fixes and improvements (Matias, with contributions from Hans
         and Javier)
      
       - adding discard throttling to blk-wbt (me)
      
       - sbitmap blk-mq-tag handling (me/Omar/Ming).
      
       - remove the sparc jsflash block driver, acked by DaveM.
      
       - Kyber scheduler improvement from Jianchao, making it more friendly
         wrt merging.
      
       - conversion of symbolic proc permissions to octal, from Joe Perches.
         Previously the block parts were a mix of both.
      
       - nbd fixes (Josef and Kevin Vigor)
      
       - unify how we handle the various kinds of timestamps that the block
         core and utility code uses (Omar)
      
       - three NVMe pull requests from Keith and Christoph, bringing AEN to
         feature completeness, file backed namespaces, cq/sq lock split, and
         various fixes
      
       - various little fixes and improvements all over the map
      
      * tag 'for-4.18/block-20180603' of git://git.kernel.dk/linux-block: (196 commits)
        blk-mq: update nr_requests when switching to 'none' scheduler
        block: don't use blocking queue entered for recursive bio submits
        dm-crypt: fix warning in shutdown path
        lightnvm: pblk: take bitmap alloc. out of critical section
        lightnvm: pblk: kick writer on new flush points
        lightnvm: pblk: only try to recover lines with written smeta
        lightnvm: pblk: remove unnecessary bio_get/put
        lightnvm: pblk: add possibility to set write buffer size manually
        lightnvm: fix partial read error path
        lightnvm: proper error handling for pblk_bio_add_pages
        lightnvm: pblk: fix smeta write error path
        lightnvm: pblk: garbage collect lines with failed writes
        lightnvm: pblk: rework write error recovery path
        lightnvm: pblk: remove dead function
        lightnvm: pass flag on graceful teardown to targets
        lightnvm: pblk: check for chunk size before allocating it
        lightnvm: pblk: remove unnecessary argument
        lightnvm: pblk: remove unnecessary indirection
        lightnvm: pblk: return NVM_ error on failed submission
        lightnvm: pblk: warn in case of corrupted write buffer
        ...
      f459c345
    • Linus Torvalds's avatar
      Linux 4.17 · 29dcea88
      Linus Torvalds authored
      29dcea88
    • Linus Torvalds's avatar
      Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 325e14f9
      Linus Torvalds authored
      Pull vfs fixes from Al Viro.
      
       - fix io_destroy()/aio_complete() race
      
       - the vfs_open() change to get rid of open_check_o_direct() boilerplate
         was nice, but buggy. Al has a patch avoiding a revert, but that's
         definitely not a last-day fodder, so for now revert it is...
      
      * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
        Revert "fs: fold open_check_o_direct into do_dentry_open"
        fix io_destroy()/aio_complete() race
      325e14f9
    • Al Viro's avatar
      Revert "fs: fold open_check_o_direct into do_dentry_open" · af04fadc
      Al Viro authored
      This reverts commit cab64df1
      
      .
      
      Having vfs_open() in some cases drop the reference to
      struct file combined with
      
      	error = vfs_open(path, f, cred);
      	if (error) {
      		put_filp(f);
      		return ERR_PTR(error);
      	}
      	return f;
      
      is flat-out wrong.  It used to be
      
      		error = vfs_open(path, f, cred);
      		if (!error) {
      			/* from now on we need fput() to dispose of f */
      			error = open_check_o_direct(f);
      			if (error) {
      				fput(f);
      				f = ERR_PTR(error);
      			}
      		} else {
      			put_filp(f);
      			f = ERR_PTR(error);
      		}
      
      and sure, having that open_check_o_direct() boilerplate gotten rid of is
      nice, but not that way...
      
      Worse, another call chain (via finish_open()) is FUBAR now wrt
      FILE_OPENED handling - in that case we get error returned, with file
      already hit by fput() *AND* FILE_OPENED not set.  Guess what happens in
      path_openat(), when it hits
      
      	if (!(opened & FILE_OPENED)) {
      		BUG_ON(!error);
      		put_filp(file);
      	}
      
      The root cause of all that crap is that the callers of do_dentry_open()
      have no way to tell which way did it fail; while that could be fixed up
      (by passing something like int *opened to do_dentry_open() and have it
      marked if we'd called ->open()), it's probably much too late in the
      cycle to do so right now.
      
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      af04fadc
    • Linus Torvalds's avatar
      Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 874cd339
      Linus Torvalds authored
      Pull scheduler fixes from Thomas Gleixner:
      
       - two patches addressing the problem that the scheduler allows under
         certain conditions user space tasks to be scheduled on CPUs which are
         not yet fully booted which causes a few subtle and hard to debug
         issue
      
       - add a missing runqueue clock update in the deadline scheduler which
         triggers a warning under certain circumstances
      
       - fix a silly typo in the scheduler header file
      
      * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched/headers: Fix typo
        sched/deadline: Fix missing clock update
        sched/core: Require cpu_active() in select_task_rq(), for user tasks
        sched/core: Fix rules for running on online && !active CPUs
      874cd339