20 Jan, 2021

2 commits

  • commit 17ffc193cdc6dc7a613d00d8ad47fc1f801b9bf0 upstream.

    Advance the maximum number of arguments from 9 to 15 to account for
    all potential feature flags that may be supplied.

    Linux 4.19 added "meta_device"
    (356d9d52e1221ba0c9f10b8b38652f78a5298329) and "recalculate"
    (a3fcf7253139609bf9ff901fbf955fba047e75dd) flags.

    Commit 468dfca38b1a6fbdccd195d875599cb7c8875cd9 added
    "sectors_per_bit" and "bitmap_flush_interval".

    Commit 84597a44a9d86ac949900441cea7da0af0f2f473 added
    "allow_discards".

    And the commit d537858ac8aaf4311b51240893add2fc62003b97 added
    "fix_padding".

    Signed-off-by: Mikulas Patocka
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 9b5948267adc9e689da609eb61cf7ed49cae5fa8 upstream.

    With external metadata device, flush requests are not passed down to the
    data device.

    Fix this by submitting the flush request in dm_integrity_flush_buffers. In
    order to not degrade performance, we overlap the data device flush with
    the metadata device flush.

    Reported-by: Lukas Straub
    Signed-off-by: Mikulas Patocka
    Cc: stable@vger.kernel.org
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     

17 Nov, 2020

1 commit


02 Sep, 2020

1 commit

  • The dm-integrity target did not report errors in bitmap mode just after
    creation. The reason is that the function integrity_recalc didn't clean up
    ic->recalc_bitmap as it proceeded with recalculation.

    Fix this by updating the bitmap accordingly -- the double shift serves
    to rounddown.

    Signed-off-by: Mikulas Patocka
    Fixes: 468dfca38b1a ("dm integrity: add a bitmap mode")
    Cc: stable@vger.kernel.org # v5.2+
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

08 Aug, 2020

1 commit

  • As said by Linus:

    A symmetric naming is only helpful if it implies symmetries in use.
    Otherwise it's actively misleading.

    In "kzalloc()", the z is meaningful and an important part of what the
    caller wants.

    In "kzfree()", the z is actively detrimental, because maybe in the
    future we really _might_ want to use that "memfill(0xdeadbeef)" or
    something. The "zero" part of the interface isn't even _relevant_.

    The main reason that kzfree() exists is to clear sensitive information
    that should not be leaked to other future users of the same memory
    objects.

    Rename kzfree() to kfree_sensitive() to follow the example of the recently
    added kvfree_sensitive() and make the intention of the API more explicit.
    In addition, memzero_explicit() is used to clear the memory to make sure
    that it won't get optimized away by the compiler.

    The renaming is done by using the command sequence:

    git grep -w --name-only kzfree |\
    xargs sed -i 's/kzfree/kfree_sensitive/'

    followed by some editing of the kfree_sensitive() kerneldoc and adding
    a kzfree backward compatibility macro in slab.h.

    [akpm@linux-foundation.org: fs/crypto/inline_crypt.c needs linux/slab.h]
    [akpm@linux-foundation.org: fix fs/crypto/inline_crypt.c some more]

    Suggested-by: Joe Perches
    Signed-off-by: Waiman Long
    Signed-off-by: Andrew Morton
    Acked-by: David Howells
    Acked-by: Michal Hocko
    Acked-by: Johannes Weiner
    Cc: Jarkko Sakkinen
    Cc: James Morris
    Cc: "Serge E. Hallyn"
    Cc: Joe Perches
    Cc: Matthew Wilcox
    Cc: David Rientjes
    Cc: Dan Carpenter
    Cc: "Jason A . Donenfeld"
    Link: http://lkml.kernel.org/r/20200616154311.12314-3-longman@redhat.com
    Signed-off-by: Linus Torvalds

    Waiman Long
     

04 Aug, 2020

1 commit

  • Pull core block updates from Jens Axboe:
    "Good amount of cleanups and tech debt removals in here, and as a
    result, the diffstat shows a nice net reduction in code.

    - Softirq completion cleanups (Christoph)

    - Stop using ->queuedata (Christoph)

    - Cleanup bd claiming (Christoph)

    - Use check_events, moving away from the legacy media change
    (Christoph)

    - Use inode i_blkbits consistently (Christoph)

    - Remove old unused writeback congestion bits (Christoph)

    - Cleanup/unify submission path (Christoph)

    - Use bio_uninit consistently, instead of bio_disassociate_blkg
    (Christoph)

    - sbitmap cleared bits handling (John)

    - Request merging blktrace event addition (Jan)

    - sysfs add/remove race fixes (Luis)

    - blk-mq tag fixes/optimizations (Ming)

    - Duplicate words in comments (Randy)

    - Flush deferral cleanup (Yufen)

    - IO context locking/retry fixes (John)

    - struct_size() usage (Gustavo)

    - blk-iocost fixes (Chengming)

    - blk-cgroup IO stats fixes (Boris)

    - Various little fixes"

    * tag 'for-5.9/block-20200802' of git://git.kernel.dk/linux-block: (135 commits)
    block: blk-timeout: delete duplicated word
    block: blk-mq-sched: delete duplicated word
    block: blk-mq: delete duplicated word
    block: genhd: delete duplicated words
    block: elevator: delete duplicated word and fix typos
    block: bio: delete duplicated words
    block: bfq-iosched: fix duplicated word
    iocost_monitor: start from the oldest usage index
    iocost: Fix check condition of iocg abs_vdebt
    block: Remove callback typedefs for blk_mq_ops
    block: Use non _rcu version of list functions for tag_set_list
    blk-cgroup: show global disk stats in root cgroup io.stat
    blk-cgroup: make iostat functions visible to stat printing
    block: improve discard bio alignment in __blkdev_issue_discard()
    block: change REQ_OP_ZONE_RESET and REQ_OP_ZONE_RESET_ALL to be odd numbers
    block: defer flush request no matter whether we have elevator
    block: make blk_timeout_init() static
    block: remove retry loop in ioc_release_fn()
    block: remove unnecessary ioc nested locking
    block: integrate bd_start_claiming into __blkdev_get
    ...

    Linus Torvalds
     

24 Jul, 2020

1 commit

  • Commit adc0daad366b62ca1bce3e2958a40b0b71a8b8b3 ("dm: report suspended
    device during destroy") broke integrity recalculation.

    The problem is dm_suspended() returns true not only during suspend,
    but also during resume. So this race condition could occur:
    1. dm_integrity_resume calls queue_work(ic->recalc_wq, &ic->recalc_work)
    2. integrity_recalc (&ic->recalc_work) preempts the current thread
    3. integrity_recalc calls if (unlikely(dm_suspended(ic->ti))) goto unlock_ret;
    4. integrity_recalc exits and no recalculating is done.

    To fix this race condition, add a function dm_post_suspending that is
    only true during the postsuspend phase and use it instead of
    dm_suspended().

    Signed-off-by: Mikulas Patocka
    Fixes: adc0daad366b ("dm: report suspended device during destroy")
    Cc: stable vger kernel org # v4.18+
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

01 Jul, 2020

1 commit


06 Jun, 2020

1 commit

  • …device-mapper/linux-dm

    Pull device mapper updates from Mike Snitzer:

    - The largest change for this cycle is the DM zoned target's metadata
    version 2 feature that adds support for pairing regular block devices
    with a zoned device to ease the performance impact associated with
    finite random zones of zoned device.

    The changes came in three batches: the first prepared for and then
    added the ability to pair a single regular block device, the second
    was a batch of fixes to improve zoned's reclaim heuristic, and the
    third removed the limitation of only adding a single additional
    regular block device to allow many devices.

    Testing has shown linear scaling as more devices are added.

    - Add new emulated block size (ebs) target that emulates a smaller
    logical_block_size than a block device supports

    The primary use-case is to emulate "512e" devices that have 512 byte
    logical_block_size and 4KB physical_block_size. This is useful to
    some legacy applications that otherwise wouldn't be able to be used
    on 4K devices because they depend on issuing IO in 512 byte
    granularity.

    - Add discard interfaces to DM bufio. First consumer of the interface
    is the dm-ebs target that makes heavy use of dm-bufio.

    - Fix DM crypt's block queue_limits stacking to not truncate
    logic_block_size.

    - Add Documentation for DM integrity's status line.

    - Switch DMDEBUG from a compile time config option to instead use
    dynamic debug via pr_debug.

    - Fix DM multipath target's hueristic for how it manages
    "queue_if_no_path" state internally.

    DM multipath now avoids disabling "queue_if_no_path" unless it is
    actually needed (e.g. in response to configure timeout or explicit
    "fail_if_no_path" message).

    This fixes reports of spurious -EIO being reported back to userspace
    application during fault tolerance testing with an NVMe backend.
    Added various dynamic DMDEBUG messages to assist with debugging
    queue_if_no_path in the future.

    - Add a new DM multipath "Historical Service Time" Path Selector.

    - Fix DM multipath's dm_blk_ioctl() to switch paths on IO error.

    - Improve DM writecache target performance by using explicit cache
    flushing for target's single-threaded usecase and a small cleanup to
    remove unnecessary test in persistent_memory_claim.

    - Other small cleanups in DM core, dm-persistent-data, and DM
    integrity.

    * tag 'for-5.8/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: (62 commits)
    dm crypt: avoid truncating the logical block size
    dm mpath: add DM device name to Failing/Reinstating path log messages
    dm mpath: enhance queue_if_no_path debugging
    dm mpath: restrict queue_if_no_path state machine
    dm mpath: simplify __must_push_back
    dm zoned: check superblock location
    dm zoned: prefer full zones for reclaim
    dm zoned: select reclaim zone based on device index
    dm zoned: allocate zone by device index
    dm zoned: support arbitrary number of devices
    dm zoned: move random and sequential zones into struct dmz_dev
    dm zoned: per-device reclaim
    dm zoned: add metadata pointer to struct dmz_dev
    dm zoned: add device pointer to struct dm_zone
    dm zoned: allocate temporary superblock for tertiary devices
    dm zoned: convert to xarray
    dm zoned: add a 'reserved' zone flag
    dm zoned: improve logging messages for reclaim
    dm zoned: avoid unnecessary device recalulation for secondary superblock
    dm zoned: add debugging message for reading superblocks
    ...

    Linus Torvalds
     

22 May, 2020

1 commit


21 May, 2020

1 commit

  • The current codebase makes use of the zero-length array language
    extension to the C90 standard, but the preferred mechanism to declare
    variable-length types such as these ones is a flexible array member[1][2],
    introduced in C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure, which
    will help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on.

    Also, notice that, dynamic memory allocations won't be affected by
    this change:

    "Flexible array members have incomplete type, and so the sizeof operator
    may not be applied. As a quirk of the original implementation of
    zero-length arrays, sizeof evaluates to zero."[1]

    sizeof(flexible-array-member) triggers a warning because flexible array
    members have incomplete type[1]. There are some instances of code in
    which the sizeof operator is being incorrectly/erroneously applied to
    zero-length arrays and the result is zero. Such instances may be hiding
    some bugs. So, this work (flexible-array member conversions) will also
    help to get completely rid of those sorts of issues.

    This issue was found with the help of Coccinelle.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Mike Snitzer

    Gustavo A. R. Silva
     

15 May, 2020

1 commit

  • Fixes gcc '-Wunused-but-set-variable' warning:

    drivers/md/dm-integrity.c: In function 'integrity_metadata':
    drivers/md/dm-integrity.c:1557:12: warning:
    variable 'save_metadata_offset' set but not used [-Wunused-but-set-variable]
    drivers/md/dm-integrity.c:1556:12: warning:
    variable 'save_metadata_block' set but not used [-Wunused-but-set-variable]

    They are never used, so remove it.

    Reported-by: Hulk Robot
    Signed-off-by: YueHaibing
    Signed-off-by: Mike Snitzer

    YueHaibing
     

04 Apr, 2020

1 commit

  • If all the bytes are equal to DISCARD_FILLER, we want to accept the
    buffer. If any of the bytes are different, we must do thorough
    tag-by-tag checking.

    The condition was inverted.

    Fixes: 84597a44a9d8 ("dm integrity: add optional discard support")
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

03 Apr, 2020

1 commit

  • Otherwise:

    In file included from drivers/md/dm-integrity.c:13:
    drivers/md/dm-integrity.c: In function 'dm_integrity_status':
    drivers/md/dm-integrity.c:3061:10: error: format '%llu' expects
    argument of type 'long long unsigned int', but argument 4 has type
    'long int' [-Werror=format=]
    DMEMIT("%llu %llu",
    ^~~~~~~~~~~
    atomic64_read(&ic->number_of_mismatches),
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./include/linux/device-mapper.h:550:46: note: in definition of macro 'DMEMIT'
    0 : scnprintf(result + sz, maxlen - sz, x))
    ^
    cc1: all warnings being treated as errors

    Fixes: 7649194a1636ab5 ("dm integrity: remove sector type casts")
    Signed-off-by: Mike Snitzer

    Mike Snitzer
     

25 Mar, 2020

7 commits


24 Mar, 2020

1 commit


04 Mar, 2020

1 commit

  • Changes made during the 5.6 cycle warrant bumping the version number
    for DM core and the targets modified by this commit.

    It should be noted that dm-thin, dm-crypt and dm-raid already had
    their target version bumped during the 5.6 merge window.

    Signed-off-by; Mike Snitzer

    Mike Snitzer
     

03 Mar, 2020

1 commit

  • In cases where dec_in_flight() has to requeue the integrity_bio_wait
    work to transfer the rest of the data, the bio's __bi_remaining might
    already have been decremented to 0, e.g.: if bio passed to underlying
    data device was split via blk_queue_split().

    Use dm_bio_{record,restore} rather than effectively open-coding them in
    dm-integrity -- these methods now manage __bi_remaining too.

    Depends-on: f7f0b057a9c1 ("dm bio record: save/restore bi_end_io and bi_integrity")
    Reported-by: Daniel Glöckner
    Suggested-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mike Snitzer
     

28 Feb, 2020

1 commit

  • The function dm_suspended returns true if the target is suspended.
    However, when the target is being suspended during unload, it returns
    false.

    An example where this is a problem: the test "!dm_suspended(wc->ti)" in
    writecache_writeback is not sufficient, because dm_suspended returns
    zero while writecache_suspend is in progress. As is, without an
    enhanced dm_suspended, simply switching from flush_workqueue to
    drain_workqueue still emits warnings:
    workqueue writecache-writeback: drain_workqueue() isn't complete after 10 tries
    workqueue writecache-writeback: drain_workqueue() isn't complete after 100 tries
    workqueue writecache-writeback: drain_workqueue() isn't complete after 200 tries
    workqueue writecache-writeback: drain_workqueue() isn't complete after 300 tries
    workqueue writecache-writeback: drain_workqueue() isn't complete after 400 tries

    writecache_suspend calls flush_workqueue(wc->writeback_wq) - this function
    flushes the current work. However, the workqueue may re-queue itself and
    flush_workqueue doesn't wait for re-queued works to finish. Because of
    this - the function writecache_writeback continues execution after the
    device was suspended and then concurrently with writecache_dtr, causing
    a crash in writecache_writeback.

    We must use drain_workqueue - that waits until the work and all re-queued
    works finish.

    As a prereq for switching to drain_workqueue, this commit fixes
    dm_suspended to return true after the presuspend hook and before the
    postsuspend hook - just like during a normal suspend. It allows
    simplifying the dm-integrity and dm-writecache targets so that they
    don't have to maintain suspended flags on their own.

    With this change use of drain_workqueue() can be used effectively. This
    change was tested with the lvm2 testsuite and cryptsetup testsuite and
    the are no regressions.

    Fixes: 48debafe4f2f ("dm: add writecache target")
    Cc: stable@vger.kernel.org # 4.18+
    Reported-by: Corey Marthaler
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

26 Feb, 2020

3 commits

  • If the flag SB_FLAG_RECALCULATE is present in the superblock, but it was
    not specified on the command line (i.e. ic->recalculate_flag is false),
    dm-integrity would return invalid table line - the reported number of
    arguments would not match the real number.

    Fixes: 468dfca38b1a ("dm integrity: add a bitmap mode")
    Cc: stable@vger.kernel.org # v5.2+
    Reported-by: Ondrej Kozina
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     
  • If we need to perform synchronous I/O in dm_integrity_map_continue(),
    we must make sure that we are not in the map function - in order to
    avoid the deadlock due to bio queuing in generic_make_request. To
    avoid the deadlock, we offload the request to metadata_wq.

    However, metadata_wq also processes metadata updates for write requests.
    If there are too many requests that get offloaded to metadata_wq at the
    beginning of dm_integrity_map_continue, the workqueue metadata_wq
    becomes clogged and the system is incapable of processing any metadata
    updates.

    This causes a deadlock because all the requests that need to do metadata
    updates wait for metadata_wq to proceed and metadata_wq waits inside
    wait_and_add_new_range until some existing request releases its range
    lock (which doesn't happen because the range lock is released after
    metadata update).

    In order to fix the deadlock, we create a new workqueue offload_wq and
    offload requests to it - so that processing of offload_wq is independent
    from processing of metadata_wq.

    Fixes: 7eada909bfd7 ("dm: add integrity target")
    Cc: stable@vger.kernel.org # v4.12+
    Reported-by: Heinz Mauelshagen
    Tested-by: Heinz Mauelshagen
    Signed-off-by: Heinz Mauelshagen
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     
  • If we resume a device in bitmap mode and the on-disk format is in journal
    mode, we must recalculate anything above ic->sb->recalc_sector. Otherwise,
    there would be non-recalculated blocks which would cause I/O errors.

    Fixes: 468dfca38b1a ("dm integrity: add a bitmap mode")
    Cc: stable@vger.kernel.org # v5.2+
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

16 Nov, 2019

1 commit

  • Metadata runs are supposed to be aligned on 4k boundary (so that they work
    efficiently with disks with 4k sectors). However, there was a programming
    bug that makes them aligned on 128k boundary instead. The unused space is
    wasted.

    Fix this bug by providing a proper 4k alignment. In order to keep
    existing volumes working, we introduce a new flag SB_FLAG_FIXED_PADDING
    - when the flag is clear, we calculate the padding the old way. In order
    to make sure that the old version cannot mount the volume created by the
    new version, we increase superblock version to 4.

    Also in order to not break with old integritysetup, we fix alignment
    only if the parameter "fix_padding" is present when formatting the
    device.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

18 Sep, 2019

1 commit

  • Currently t10_pi_prepare/t10_pi_complete functions are called during the
    NVMe and SCSi layers command preparetion/completion, but their actual
    place should be the block layer since T10-PI is a general data integrity
    feature that is used by block storage protocols. Introduce .prepare_fn
    and .complete_fn callbacks within the integrity profile that each type
    can implement according to its needs.

    Suggested-by: Christoph Hellwig
    Reviewed-by: Christoph Hellwig
    Suggested-by: Martin K. Petersen
    Reviewed-by: Martin K. Petersen
    Signed-off-by: Max Gurtovoy

    Fixed to not call queue integrity functions if BLK_DEV_INTEGRITY
    isn't defined in the config.

    Signed-off-by: Jens Axboe

    Max Gurtovoy
     

16 Aug, 2019

1 commit

  • Fix a crash that was introduced by the commit 724376a04d1a. The crash is
    reported here: https://gitlab.com/cryptsetup/cryptsetup/issues/468

    When reading from the integrity device, the function
    dm_integrity_map_continue calls find_journal_node to find out if the
    location to read is present in the journal. Then, it calculates how many
    sectors are consecutively stored in the journal. Then, it locks the range
    with add_new_range and wait_and_add_new_range.

    The problem is that during wait_and_add_new_range, we hold no locks (we
    don't hold ic->endio_wait.lock and we don't hold a range lock), so the
    journal may change arbitrarily while wait_and_add_new_range sleeps.

    The code then goes to __journal_read_write and hits
    BUG_ON(journal_entry_get_sector(je) != logical_sector); because the
    journal has changed.

    In order to fix this bug, we need to re-check the journal location after
    wait_and_add_new_range. We restrict the length to one block in order to
    not complicate the code too much.

    Fixes: 724376a04d1a ("dm integrity: implement fair range locks")
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

10 Jul, 2019

2 commits


17 May, 2019

1 commit

  • …it/device-mapper/linux-dm

    Pull device mapper updates from Mike Snitzer:

    - Improve DM snapshot target's scalability by using finer grained
    locking. Requires some list_bl interface improvements.

    - Add ability for DM integrity to use a bitmap mode, that tracks
    regions where data and metadata are out of sync, instead of using a
    journal.

    - Improve DM thin provisioning target to not write metadata changes to
    disk if the thin-pool and associated thin devices are merely
    activated but not used. This avoids metadata corruption due to
    concurrent activation of thin devices across different OS instances
    (e.g. split brain scenarios, which ultimately would be avoided if
    proper device filters were used -- but not having proper filtering
    has proven a very common configuration mistake)

    - Fix missing call to path selector type->end_io in DM multipath. This
    fixes reported performance problems due to inaccurate path selector
    IO accounting causing an imbalance of IO (e.g. avoiding issuing IO to
    particular path due to it seemingly being heavily used).

    - Fix bug in DM cache metadata's loading of its discard bitset that
    could lead to all cache blocks being discarded if the very first
    cache block was discarded (thankfully in practice the first cache
    block is generally in use; be it FS superblock, partition table, disk
    label, etc).

    - Add testing-only DM dust target which simulates a device that has
    failing sectors and/or read failures.

    - Fix a DM init error path reference count hang that caused boot hangs
    if user supplied malformed input on kernel commandline.

    - Fix a couple issues with DM crypt target's logging being overly
    verbose or lacking context.

    - Various other small fixes to DM init, DM multipath, DM zoned, and DM
    crypt.

    * tag 'for-5.2/dm-changes-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: (42 commits)
    dm: fix a couple brace coding style issues
    dm crypt: print device name in integrity error message
    dm crypt: move detailed message into debug level
    dm ioctl: fix hang in early create error condition
    dm integrity: whitespace, coding style and dead code cleanup
    dm integrity: implement synchronous mode for reboot handling
    dm integrity: handle machine reboot in bitmap mode
    dm integrity: add a bitmap mode
    dm integrity: introduce a function add_new_range_and_wait()
    dm integrity: allow large ranges to be described
    dm ingerity: pass size to dm_integrity_alloc_page_list()
    dm integrity: introduce rw_journal_sectors()
    dm integrity: update documentation
    dm integrity: don't report unused options
    dm integrity: don't check null pointer before kvfree and vfree
    dm integrity: correctly calculate the size of metadata area
    dm dust: Make dm_dust_init and dm_dust_exit static
    dm dust: remove redundant unsigned comparison to less than zero
    dm mpath: always free attached_handler_name in parse_path()
    dm init: fix max devices/targets checks
    ...

    Linus Torvalds
     

10 May, 2019

1 commit


09 May, 2019

4 commits

  • Unfortunatelly, there may be bios coming even after the reboot notifier
    was called. We don't want these bios to make the bitmap dirty again.

    To address this, implement a synchronous mode - when a bio is about to
    be terminated, we clean the bitmap and terminate the bio after the clean
    operation succeeds. This obviously slows down bio processing, but it
    makes sure that when all bios are finished, the bitmap will be clean.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     
  • When in bitmap mode the bitmap must be cleared when rebooting. This
    commit adds the reboot hook.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     
  • Introduce an alternate mode of operation where dm-integrity uses a
    bitmap instead of a journal. If a bit in the bitmap is 1, the
    corresponding region's data and integrity tags are not synchronized - if
    the machine crashes, the unsynchronized regions will be recalculated.
    The bitmap mode is faster than the journal mode, because we don't have
    to write the data twice, but it is also less reliable, because if data
    corruption happens when the machine crashes, it may not be detected.

    Benchmark results for an SSD connected to a SATA300 port, when doing
    large linear writes with dd:

    buffered I/O:
    raw device throughput - 245MB/s
    dm-integrity with journaling - 120MB/s
    dm-integrity with bitmap - 238MB/s

    direct I/O with 1MB block size:
    raw device throughput - 248MB/s
    dm-integrity with journaling - 123MB/s
    dm-integrity with bitmap - 223MB/s

    For more info see dm-integrity in Documentation/device-mapper/

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     
  • Introduce a function add_new_range_and_wait() in order to avoid
    repetitive code. It will be used in the following commit.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer

    Mikulas Patocka
     

08 May, 2019

1 commit

  • Pull block updates from Jens Axboe:
    "Nothing major in this series, just fixes and improvements all over the
    map. This contains:

    - Series of fixes for sed-opal (David, Jonas)

    - Fixes and performance tweaks for BFQ (via Paolo)

    - Set of fixes for bcache (via Coly)

    - Set of fixes for md (via Song)

    - Enabling multi-page for passthrough requests (Ming)

    - Queue release fix series (Ming)

    - Device notification improvements (Martin)

    - Propagate underlying device rotational status in loop (Holger)

    - Removal of mtip32xx trim support, which has been disabled for years
    (Christoph)

    - Improvement and cleanup of nvme command handling (Christoph)

    - Add block SPDX tags (Christoph)

    - Cleanup/hardening of bio/bvec iteration (Christoph)

    - A few NVMe pull requests (Christoph)

    - Removal of CONFIG_LBDAF (Christoph)

    - Various little fixes here and there"

    * tag 'for-5.2/block-20190507' of git://git.kernel.dk/linux-block: (164 commits)
    block: fix mismerge in bvec_advance
    block: don't drain in-progress dispatch in blk_cleanup_queue()
    blk-mq: move cancel of hctx->run_work into blk_mq_hw_sysfs_release
    blk-mq: always free hctx after request queue is freed
    blk-mq: split blk_mq_alloc_and_init_hctx into two parts
    blk-mq: free hw queue's resource in hctx's release handler
    blk-mq: move cancel of requeue_work into blk_mq_release
    blk-mq: grab .q_usage_counter when queuing request from plug code path
    block: fix function name in comment
    nvmet: protect discovery change log event list iteration
    nvme: mark nvme_core_init and nvme_core_exit static
    nvme: move command size checks to the core
    nvme-fabrics: check more command sizes
    nvme-pci: check more command sizes
    nvme-pci: remove an unneeded variable initialization
    nvme-pci: unquiesce admin queue on shutdown
    nvme-pci: shutdown on timeout during deletion
    nvme-pci: fix psdt field for single segment sgls
    nvme-multipath: don't print ANA group state by default
    nvme-multipath: split bios with the ns_head bio_set before submitting
    ...

    Linus Torvalds