31 Jan, 2017

1 commit

  • When the lightnvm core had the "gennvm" layer between the device and the
    target, there was a need for the core to be able to figure out which
    target it should send an end_io callback to. Leading to a "double"
    end_io, first for the media manager instance, and then for the target
    instance. Now that core and gennvm is merged, there is no longer a need
    for this, and a single end_io callback will do.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     

30 Nov, 2016

5 commits

  • On target-specific operations pass on nvm_tgt_dev instead of the generic
    nvm device.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • In order to naturally support multi-target instances on an Open-Channel
    SSD, targets should own the LUNs they get blocks from and manage
    provisioning internally. This is done in several steps.

    Since targets own the LUNs the are instantiated on top of and manage the
    free block list internally, there is no need for a LUN abstraction in
    the media manager. LUNs are intrinsically managed as in the physical
    layout (ch:0,lun:0, ..., ch:0,lun:n, ch:1,lun:0, ch:1,lun:n, ...,
    ch:m,lun:0, ch:m,lun:n) and given to the targets based on the target
    creation ioctl. This simplifies LUN management and clears the path for a
    partition manager to sit directly underneath LightNVM targets.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • In order to naturally support multi-target instances on an Open-Channel
    SSD, targets should own the LUNs they get blocks from and manage
    provisioning internally. This is done in several steps.

    A part of this transformation is that targets manage their blocks
    internally. This patch eliminates the nvm_block abstraction and moves
    block management to the target logic. The rrpc target is transformed.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • In order to naturally support multi-target instances on an Open-Channel
    SSD, targets should own the LUNs they get blocks from and manage
    provisioning internally. This is done in several steps.

    This patch moves the block provisioning inside of the target and removes
    the get/put block interface from the media manager.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • Before vectored I/Os were supported on rrpc, the physical address was
    stored as part of the nvm_rqd request. This variable become obsolete
    when the ppa_list was introduced. Cleanup this variable.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     

07 Jul, 2016

3 commits

  • The nvm_get_blk() function is called with rlun->lock held. This is ok
    when the media manager implementation doesn't go out of its atomic
    context. However, if a media manager persists its metadata, and
    guarantees that the block is given to the target, this is no longer
    a viable approach. Therefore, clean up the flow of rrpc_map_page,
    and make sure that nvm_get_blk() is called without any locks acquired.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     
  • The ->list, ->open_list, and ->closed_list lists were previously used
    for statistics. However, their usage have been removed, and thus these
    can safely be removed.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     
  • Checkpatch found two incidents where the type was preferred to be
    written out in full.

    ./drivers/lightnvm/rrpc.h:184: WARNING: Prefer 'unsigned int' to bare
    use of 'unsigned'
    ./drivers/lightnvm/rrpc.h:209: WARNING: Prefer 'unsigned int' to bare
    use of 'unsigned'
    ./drivers/lightnvm/rrpc.c:51: WARNING: Prefer 'unsigned int' to bare use
    of 'unsigned'

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     

07 May, 2016

1 commit

  • The number of ppas contained on a request is not necessarily the number
    of pages that it maps to neither on the target nor on the device side.
    In order to avoid confusion, rename nr_pages to nr_ppas since it is what
    the variable actually contains.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     

19 Mar, 2016

2 commits

  • We can create more than one target on a lightnvm
    device by specifying its begin lun and end lun.

    But only specify the physical address area is not
    enough, we need to get the corresponding non-
    intersection logical address area division from
    the backend device's logcial address space.
    Otherwise the targets on the device might use
    the same logical addresses cause incorrect
    information in the device's l2p table.

    Signed-off-by: Wenwei Tao
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Wenwei Tao
     
  • Pull block driver updates from Jens Axboe:
    "This is the block driver pull request for this merge window. It sits
    on top of for-4.6/core, that was just sent out.

    This contains:

    - A set of fixes for lightnvm. One from Alan, fixing an overflow,
    and the rest from the usual suspects, Javier and Matias.

    - A set of fixes for nbd from Markus and Dan, and a fixup from Arnd
    for correct usage of the signed 64-bit divider.

    - A set of bug fixes for the Micron mtip32xx, from Asai.

    - A fix for the brd discard handling from Bart.

    - Update the maintainers entry for cciss, since that hardware has
    transferred ownership.

    - Three bug fixes for bcache from Eric Wheeler.

    - Set of fixes for xen-blk{back,front} from Jan and Konrad.

    - Removal of the cpqarray driver. It has been disabled in Kconfig
    since 2013, and we were initially scheduled to remove it in 3.15.

    - Various updates and fixes for NVMe, with the most important being:

    - Removal of the per-device NVMe thread, replacing that with a
    watchdog timer instead. From Christoph.

    - Exposing the namespace WWID through sysfs, from Keith.

    - Set of cleanups from Ming Lin.

    - Logging the controller device name instead of the underlying
    PCI device name, from Sagi.

    - And a bunch of fixes and optimizations from the usual suspects
    in this area"

    * 'for-4.6/drivers' of git://git.kernel.dk/linux-block: (49 commits)
    NVMe: Expose ns wwid through single sysfs entry
    drivers:block: cpqarray clean up
    brd: Fix discard request processing
    cpqarray: remove it from the kernel
    cciss: update MAINTAINERS
    NVMe: Remove unused sq_head read in completion path
    bcache: fix cache_set_flush() NULL pointer dereference on OOM
    bcache: cleaned up error handling around register_cache()
    bcache: fix race of writeback thread starting before complete initialization
    NVMe: Create discard zero quirk white list
    nbd: use correct div_s64 helper
    mtip32xx: remove unneeded variable in mtip_cmd_timeout()
    lightnvm: generalize rrpc ppa calculations
    lightnvm: remove struct nvm_dev->total_blocks
    lightnvm: rename ->nr_pages to ->nr_sects
    lightnvm: update closed list outside of intr context
    xen/blback: Fit the important information of the thread in 17 characters
    lightnvm: fold get bb tbl when using dual/quad plane mode
    lightnvm: fix up nonsensical configure overrun checking
    xen-blkback: advertise indirect segment support earlier
    ...

    Linus Torvalds
     

04 Mar, 2016

2 commits

  • In rrpc, some calculations assume a certain configuration (e.g., 1 LUN,
    1 sector per page). The reason behind this was that LightNVM used a
    simple configuration with QEMU to test core features in the beginning.
    This patch relaxes these assumptions and generalizes calculation,
    allowing multiple luns to be used.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • The struct rrpc->nr_pages can easily be interpreted as the number of
    flash pages allocated to rrpc, while it is the nr_sects. Make sure that
    this is reflected from the variable name.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     

05 Feb, 2016

2 commits

  • This patch fixes an error on the calculation of intersecting logical
    addresses; it contemplates the case where a new request including
    several addresses intersects with a single locked address. This case is
    typical when multiple pages are sent in a new request, while GC - which
    at the moment sends one address at the time - is running.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • Add a warning if irqs are disabled when locking a new address in rrpc.
    The typical path to a new request does not disable irqs, but this is not
    guaranteed in the future.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     

12 Jan, 2016

2 commits

  • LightNVM targets need to know the state of the flash block when doing
    flash optimizations. An example is implementing a write buffer to
    respect the flash page size. Currently, block state is not accounted
    for; the media manager only differentiates among free, bad and in-use
    blocks.

    This patch adds the logic in the generic media manager to enable
    targets manage blocks into open and close separately, and it implements
    such management in rrpc. It also adds a set of flags to describe the
    state of the block (open, closed, free, bad).

    In order to avoid taking two locks (nvm_lun and rrpc_lun) consecutively,
    we introduce lockless get_/put_block primitives so that the open and
    close list locks and future common logic is handled within the nvm_lun
    lock.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     
  • Currently, a rrpc block only points to its nvm_lun. If a user wants to
    find the associated rrpc lun, it will have to calculate the index and
    look it up manually. By referencing the rrpc lun directly, this step can
    be omitted, at the cost of a larger memory footprint.

    This is important for upcoming patches that implement write buffering in
    rrpc.

    Signed-off-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Javier González
     

04 Nov, 2015

1 commit

  • For cases where CONFIG_LBDAF is not set. The struct ppa_addr exceeds its
    type on 32 bit architectures. ppa_addr requires a 64bit integer to hold
    the generic ppa format. We therefore refactor it to u64 and
    replaces the sector_t usages with u64 for physical addresses.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     

29 Oct, 2015

1 commit