28 Aug, 2017

1 commit

  • We don't need to update the original dm request partially when ending
    each cloned bio: just update original dm request once when the whole
    cloned request is finished. This still allows full support for partial
    completion because a new 'completed' counter accounts for incremental
    progress as the clone bios complete.

    Partial request update can be a bit expensive, so we should try to avoid
    it, especially because it is run in softirq context.

    Avoiding all the partial request updates fixes both hard lockup and
    soft lockups that were easily reproduced while running Laurence's
    test[1] on IB/SRP.

    BTW, after d4acf3650c7c ("block: Make blk_mq_delay_kick_requeue_list()
    rerun the queue at a quiet time"), we need to make the test more
    aggressive for reproducing the lockup:

    1) run hammer_write.sh 32 or 64 concurrently.
    2) write 8M each time

    [1] https://marc.info/?l=linux-block&m=150220185510245&w=2

    Signed-off-by: Ming Lei
    Signed-off-by: Mike Snitzer

    Ming Lei
     

09 Jun, 2017

1 commit

  • Currently we use nornal Linux errno values in the block layer, and while
    we accept any error a few have overloaded magic meanings. This patch
    instead introduces a new blk_status_t value that holds block layer specific
    status codes and explicitly explains their meaning. Helpers to convert from
    and to the previous special meanings are provided for now, but I suspect
    we want to get rid of them in the long run - those drivers that have a
    errno input (e.g. networking) usually get errnos that don't know about
    the special block layer overloads, and similarly returning them to userspace
    will usually return somethings that strictly speaking isn't correct
    for file system operations, but that's left as an exercise for later.

    For now the set of errors is a very limited set that closely corresponds
    to the previous overloaded errno values, but there is some low hanging
    fruite to improve it.

    blk_status_t (ab)uses the sparse __bitwise annotations to allow for sparse
    typechecking, so that we can easily catch places passing the wrong values.

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

    Christoph Hellwig
     

28 Jan, 2017

1 commit

  • DM already calls blk_mq_alloc_request on the request_queue of the
    underlying device if it is a blk-mq device. But now that we allow drivers
    to allocate additional data and initialize it ahead of time we need to do
    the same for all drivers. Doing so and using the new cmd_size
    infrastructure in the block layer greatly simplifies the dm-rq and mpath
    code, and should also make arbitrary combinations of SQ and MQ devices
    with SQ or MQ device mapper tables easily possible as a further step.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Mike Snitzer
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

15 Sep, 2016

1 commit


11 Jun, 2016

2 commits

  • Allow a user to specify an optional feature 'queue_mode ' where
    may be "bio", "rq" or "mq" -- which corresponds to bio-based,
    request_fn rq-based, and blk-mq rq-based respectively.

    If the queue_mode feature isn't specified the default for the
    "multipath" target is still "rq" but if dm_mod.use_blk_mq is set to Y
    it'll default to mode "mq".

    This new queue_mode feature introduces the ability for each multipath
    device to have its own queue_mode (whereas before this feature all
    multipath devices effectively had to have the same queue_mode).

    This commit also goes a long way to eliminate the awkward (ab)use of
    DM_TYPE_*, the associated filter_md_type() and other relatively fragile
    and difficult to maintain code.

    Signed-off-by: Mike Snitzer

    Mike Snitzer
     
  • Add some seperation between bio-based and request-based DM core code.

    'struct mapped_device' and other DM core only structures and functions
    have been moved to dm-core.h and all relevant DM core .c files have been
    updated to include dm-core.h rather than dm.h

    DM targets should _never_ include dm-core.h!

    [block core merge conflict resolution from Stephen Rothwell]
    Signed-off-by: Mike Snitzer
    Signed-off-by: Stephen Rothwell

    Mike Snitzer